import { Token } from './tokens'; import { SelectFn } from './SelectFn'; import { Column } from './column'; import { Expression } from './expression'; import { FromItem } from './with'; import { Query } from './query'; import { QueryExecutorFn } from './types'; import { ResultSet } from './result-set'; import { Table } from './TableType'; import { TableDefinition } from './table'; export { SelectFn }; declare type JoinType = 'left-join' | 'left-side-of-right-join' | 'full-join'; declare type ToJoinType = Extract extends never ? NewType : OldType; declare type GetTableName> = T extends Table ? A : never; declare type AddLeftJoin = { [K in keyof Columns]: Columns[K] extends Column ? Extract, TableName> extends never ? Column : Column> : never; }; declare type AddRightJoin = { [K in keyof Columns]: Columns[K] extends Column ? Extract, TableName> extends never ? Column> : Columns[K] : never; }; declare type AddJoinType = { [K in keyof Columns]: Columns[K] extends Column ? Column> : never; }; declare type Join, JoinTable extends Table | FromItem> = Query extends SelectQuery ? IncludesStar extends true ? SelectQuery, keyof ExistingColumns>, true> : SelectQuery : never; declare type GetColumns | FromItem> = From extends Table ? Columns : From extends FromItem ? Q extends Query ? Returning : never : never; declare type LeftJoin, JoinTable extends Table | FromItem> = Query extends SelectQuery ? IncludesStar extends true ? SelectQuery, 'left-join'>> : SelectQuery> : never; declare type RightJoin, JoinTable extends Table | FromItem> = Query extends SelectQuery ? IncludesStar extends true ? SelectQuery & GetColumns> : SelectQuery> : never; declare type FullJoin, JoinTable extends Table | FromItem> = Query extends SelectQuery ? IncludesStar extends true ? SelectQuery, 'full-join'>> : SelectQuery> : never; export declare class SelectQuery extends Query { private readonly queryExecutor; private readonly returningKeys; private readonly includesStar; private readonly tokens; private _selectQueryBrand; constructor(queryExecutor: QueryExecutorFn, returningKeys: string[], includesStar: boolean, tokens: Token[]); then(onFulfilled?: ((value: ResultSet, false>[]) => Result1 | PromiseLike) | undefined | null, onRejected?: ((reason: any) => Result2 | PromiseLike) | undefined | null): Promise; private newSelectQuery; from>(fromItem: T): T extends TableDefinition ? never : Join, T>; private getTableStringToken; join>(table: T): Join, T>; innerJoin>(table: JoinTable): Join, JoinTable>; leftOuterJoin>(table: JoinTable): LeftJoin, JoinTable>; leftJoin>(table: JoinTable): LeftJoin, JoinTable>; rightOuterJoin>(table: JoinTable): RightJoin, JoinTable>; rightJoin>(table: JoinTable): RightJoin, JoinTable>; fullOuterJoin>(table: JoinTable): FullJoin, JoinTable>; fullJoin>(table: JoinTable): FullJoin, JoinTable>; crossJoin>(table: Table): Join, JoinTable>; forUpdate(): SelectQuery; forNoKeyUpdate(): SelectQuery; forShare(): SelectQuery; forKeyShare(): SelectQuery; on(joinCondition: Expression): SelectQuery; using(...columns: Column[]): SelectQuery; where(condition: Expression): SelectQuery; groupBy(...expressions: Expression[]): SelectQuery; having(...conditions: Expression[]): SelectQuery; window(): SelectQuery; orderBy(...expressions: Expression[]): SelectQuery; limit(limit: number | 'ALL'): SelectQuery; offset(start: number): SelectQuery; fetch(count: number): SelectQuery; of(table: Table): SelectQuery; nowait(): SelectQuery; skipLocked(): SelectQuery; } export declare const makeSelect: (queryExecutor: QueryExecutorFn, initialTokens?: Token[] | undefined) => SelectFn;