import { IRelationDescriptor, IModelDescriptor, ForwardRefFunction, ISelectQueryBuilder } from './interfaces.js'; import { Constructor, Container } from '@spinajs/di'; import { ModelBase } from './model.js'; import type { Orm } from './orm.js'; import { OrmDriver } from './driver.js'; export interface IOrmRelation { /** * Executes relation, should be called only once. * * @param callback - optional callback to perform actions on relations eg. populate more, filter relational data etc. */ execute(callback?: (this: ISelectQueryBuilder, relation: NativeOrmRelation) => void): void; compile(): void; /** * Execute actions on relation query, does not initialize relation. Use it only AFTER execute was called. * * @param callback - execute callback to perform actions on relations eg. populate more, filter relational data etc. */ executeOnQuery(callback: (this: ISelectQueryBuilder, relation: NativeOrmRelation) => void): void; /** * Relation name */ Name: string; Descriptor: IRelationDescriptor; } export declare abstract class OrmRelation implements IOrmRelation { protected _container: Container; protected _query: ISelectQueryBuilder; protected _description: IRelationDescriptor; parentRelation?: NativeOrmRelation | undefined; /** * Guards `compile()` against running twice. Relation compilation mutates the owning * builder — it adds joins, merges columns and registers result middlewares — and * `toDB()` calls it, so without this guard compiling the same query twice produced a * different builder each time ( B19 ). */ protected _compiled: boolean; get Name(): string; get Descriptor(): IRelationDescriptor; get Alias(): string; constructor(_container: Container, _query: ISelectQueryBuilder, _description: IRelationDescriptor, parentRelation?: NativeOrmRelation | undefined); abstract compile(): void; abstract execute(callback?: (this: ISelectQueryBuilder, relation: NativeOrmRelation) => void): void; abstract executeOnQuery(callback: (this: ISelectQueryBuilder, relation: NativeOrmRelation) => void): void; } export declare abstract class NativeOrmRelation extends OrmRelation { protected _container: Container; protected _query: ISelectQueryBuilder; protected _description: IRelationDescriptor; parentRelation?: NativeOrmRelation | undefined; protected _targetModel: Constructor | ForwardRefFunction; protected _targetModelDescriptor: IModelDescriptor; protected _relationQuery: ISelectQueryBuilder; protected _separator: string; protected _driver: OrmDriver; get Name(): string; get Descriptor(): IRelationDescriptor; get Alias(): string; constructor(_container: Container, _query: ISelectQueryBuilder, _description: IRelationDescriptor, parentRelation?: NativeOrmRelation | undefined); abstract compile(): void; execute(callback?: (this: ISelectQueryBuilder, relation: NativeOrmRelation) => void): void; executeOnQuery(callback: (this: ISelectQueryBuilder, relation: NativeOrmRelation) => void): void; } export declare class BelongsToRelation extends NativeOrmRelation { constructor(_container: Container, _query: ISelectQueryBuilder, _description: IRelationDescriptor, _parentRelation?: NativeOrmRelation); compile(): void; } export declare class BelongsToRecursiveRelation extends NativeOrmRelation { constructor(_container: Container, _query: ISelectQueryBuilder, _description: IRelationDescriptor, _parentRelation?: NativeOrmRelation); compile(): void; } export declare class QueryRelation extends OrmRelation { execute(callback?: (this: ISelectQueryBuilder, relation: NativeOrmRelation) => void): void; executeOnQuery(callback: (this: ISelectQueryBuilder, relation: NativeOrmRelation) => void): void; compile(): void; } export declare class VirtualRelation extends OrmRelation { protected _relationCallback: ((this: ISelectQueryBuilder, relation: NativeOrmRelation) => void) | undefined; execute(callback?: (this: ISelectQueryBuilder, relation: NativeOrmRelation) => void): void; executeOnQuery(_callback: (this: ISelectQueryBuilder, relation: NativeOrmRelation) => void): void; compile(): void; } export declare class OneToManyRelation extends NativeOrmRelation { constructor(_container: Container, _query: ISelectQueryBuilder, _description: IRelationDescriptor, _parentRelation?: NativeOrmRelation); compile(): void; } export declare class ManyToManyRelation extends NativeOrmRelation { protected _orm: Orm; protected _joinModel: Constructor; protected _joinModelDescriptor: IModelDescriptor; protected _joinQuery: ISelectQueryBuilder; get TableJoinQuery(): ISelectQueryBuilder; get RelationQuery(): ISelectQueryBuilder; constructor(_container: Container, _orm: Orm, _query: ISelectQueryBuilder, _description: IRelationDescriptor, _parentRelation?: NativeOrmRelation); compile(): void; } //# sourceMappingURL=relations.d.ts.map