import { OrderDirection } from '@cashfarm/lang/lib'; import { Field, Table } from '../../mapping'; import { FieldOrSelector } from '../../types'; import { IQuery } from '../iQuery'; import { Whereable } from './whereable'; export interface IOrderByCriteria { field: Field; direction: OrderDirection; } export declare class Query extends Whereable> implements IQuery { protected _select: Set; readonly Select: Set; protected _orderBy: IOrderByCriteria[]; readonly OrderBy: IOrderByCriteria[]; protected _groupBy: Field[]; readonly GroupBy: Field[]; protected _limit: number; readonly Limit: number; protected _offset: number; readonly Offset: number; constructor(table: TTable); /** * Defines the set of fields that will be selected from the table. * * @param {string[]} fields An array of field names * @returns {Criteria} * * @memberOf Criteria */ select(fieldListSelector: (table: TTable) => Field[]): Query; /** * Appends `field` to the list of ordering fields. * * @param {string} field * @param {OrderDirection} direction * @returns {Criteria} * * @memberOf Query */ orderBy(field: FieldOrSelector, direction: OrderDirection): Query; orderBy(field: [FieldOrSelector, OrderDirection], ...otherFields: Array<[FieldOrSelector, OrderDirection]>): Query; /** * Sets the list of grouping fields. * * @param {...string[]} fields * @returns * * @memberOf Query */ groupBy(fields: FieldOrSelector[]): Query; groupBy(field: FieldOrSelector, ...fields: FieldOrSelector[]): Query; /** * Sets the limit of items returned * * @param {number} limit * @returns * * @memberOf Query */ limit(limit: number): this; /** * Sets the index of the first item to be returned * * @param {number} offset * @returns * * @memberOf Query */ offset(offset: number): this; /** * Clears the list of ordering fields * * @returns {Criteria} * * @memberOf Query */ clearSelect(): Query; /** * Clears the list of ordering fields * * @returns {Criteria} * * @memberOf Query */ clearOrderBy(): Query; /** * Clears the list of grouping fields * * @returns {Criteria} * * @memberOf Query */ clearGroupBy(): Query; /** * Clears the limit option * * @returns {Criteria} * * @memberOf Query */ clearLimit(): Query; /** * Clears the offset option * * @returns {Criteria} * * @memberOf Query */ clearOffset(): Query; toString(): string; private buildSelect(fields?); private escapeSelectExpr(selectExpr); private unwrap(field); }