import QueryCondition from "../condition/query-condition"; import QueryOrdering from "../other/query-ordering"; import QueryTable from "../query-table"; import QueryColumn from "../column/query-column"; import { QueryProcessor, QueryAction } from "../helpers/internal-types"; export default class SelectQuery> { constructor( protected _queryProcessor: QueryProcessor, protected _tables: Table[] ) {} protected _distinct = false; protected _offset: number; protected _limit: number; protected _conditions: QueryCondition[] = []; protected _groupBy: QueryColumn[] = []; protected _having: QueryCondition
[] = []; protected _orderings: (QueryColumn | QueryOrdering
)[] = []; protected _columns: QueryColumn[] = []; protected _action: QueryAction; offset(offset: number): this { this._offset = offset; return this; } limit(limit: number): this { this._limit = limit; return this; } distinct(): this { this._distinct = true; return this; } where(...conditions: QueryCondition
[]): this { this._conditions = conditions; return this; } groupBy(...columns: QueryColumn[]): this { this._groupBy = columns; return this; } having(...conditions: QueryCondition
[]): this { this._having = conditions; return this; } orderBy(...orderings: (QueryColumn | QueryOrdering
)[]): this { this._orderings = orderings; return this; } select(): Promise select(column: QueryColumn): Promise select(...columns: QueryColumn[]): Promise select(...columns: QueryColumn[]): Promise { this._columns = columns; this._action = 'select'; return this._queryProcessor(this); } }