import { ConditionGroup } from '../conditions'; import { Field } from '../fields'; import { QueryTable } from '../QueryTable'; export declare enum JoinType { JOIN = 0, INNER_JOIN = 1, OUTER_JOIN = 2, LEFT_JOIN = 3, RIGHT_JOIN = 4, CROSS_JOIN = 5 } export type Join = { table: QueryTable; type: JoinType; condition: ConditionGroup; alias?: string; }; export declare abstract class HasJoins { protected _joins?: Array; getJoins(): Array; setJoins(joins: Array | undefined): R; join(join: Join): R; join(type: JoinType, table: QueryTable, sourceField: Field, remoteField: Field): R; join(type: JoinType, table: QueryTable, sourceField: Field, remoteField: Field, alias: string): R; join(type: JoinType, table: QueryTable, sourceField?: Field, remoteField?: Field, alias?: string): R; innerJoin(table: QueryTable, sourceField: Field, remoteField: Field): R; innerJoin(table: QueryTable, sourceField: Field, remoteField: Field, alias: string): R; innerJoin(table: QueryTable, sourceField?: Field, remoteField?: Field, alias?: string): R; leftJoin(table: QueryTable, sourceField: Field, remoteField: Field): R; leftJoin(table: QueryTable, sourceField: Field, remoteField: Field, alias: string): R; leftJoin(table: QueryTable, sourceField?: Field, remoteField?: Field, alias?: string): R; rightJoin(table: QueryTable, sourceField: Field, remoteField: Field): R; rightJoin(table: QueryTable, sourceField: Field, remoteField: Field, alias: string): R; rightJoin(table: QueryTable, sourceField?: Field, remoteField?: Field, alias?: string): R; outerJoin(table: QueryTable, sourceField: Field, remoteField: Field): R; outerJoin(table: QueryTable, sourceField: Field, remoteField: Field, alias: string): R; outerJoin(table: QueryTable, sourceField?: Field, remoteField?: Field, alias?: string): R; crossJoin(table: QueryTable, sourceField: Field, remoteField: Field): R; crossJoin(table: QueryTable, sourceField: Field, remoteField: Field, alias: string): R; crossJoin(table: QueryTable, sourceField?: Field, remoteField?: Field, alias?: string): R; }