UNPKG

@stoqey/sofa

Version:
322 lines (321 loc) 9.61 kB
import { BaseQuery } from './base-query'; import { IConditionExpr, IGroupBy, IIndexOnParams, IIndexWithParams, ILetExpr, IndexType, ISelectType, LogicalWhereExpr, SortType } from './interface/query.types'; export declare class Query extends BaseQuery { /** * SELECT Expression. */ private selectExpr?; /** * WHERE Expression. */ private whereExpr?; /** * ORDER BY Expression. */ private orderExpr?; /** * LIMIT Expression. */ private limitExpr?; /** * OFFSET Expression. */ private offSetExpr?; /** * LET Expression. */ private letExpr?; /** * GROUP BY Expression. */ private groupByExpr?; /** * LETTING Expression. */ private lettingExpr?; /** * HAVING Expression. */ private havingExpr?; /** * Plain JOIN Expression. */ private plainJoinExpr?; /** * USE Expression. */ private useKeysExpr?; /** * Available query types. */ private queryType?; /** * INDEX ON Expression. */ private indexOn?; /** * Types of supported index statements. */ private indexType?; /** * Index name. */ private indexName?; /** * INDEX USING GSI Expression. */ private indexUsingGSI?; /** * INDEX USING GSI Expression. */ private indexWith?; /** * @summary Create an instance of Query. * @name Query * @class * @public * * @param conditions List of SELECT clause conditions * @param collection Collection name * @returns Query * * @example * ```ts * const query = new Query({$select: [{$field: 'address'}], $where: {$nill: [{ address: { $like: '%57-59%' } }, { free_breakfast: true }, { free_lunch: [1] }]}}, 'travel-sample'); * ``` */ constructor(conditions: IConditionExpr, collection: string); /** * Add result selectors to SELECT clause. * @method * @public * * @example * ```ts * const query = new Query({}, 'travel-sample'); * const result = query.select([{$field: 'address'}]).build() * console.log(result) * ``` * > SELECT address FROM `travel-sample` */ select(value?: ISelectType[] | string | undefined): Query; /** * Add index type and name to INDEX clause. * @method * @public * * @example * ```ts * const result = new Query({}, 'travel-sample').index('DROP', 'travel_sample_id_test').build(); * console.log(result) * ``` * > DROP INDEX `travel-sample`.`travel_sample_id_test` */ index(type: IndexType, name: string): Query; /** * Add items to ON clause in INDEX clause. * @method * @public * * @example * ```ts * const on = [{ name: 'travel-sample.callsing', sort: 'ASC' }]; * const result = new Query({}, 'travel-sample').index('CREATE', 'travel_sample_id_test').on(on).build(); * console.log(result) * ``` * > CREATE INDEX `travel_sample_id_test` ON `travel-sample`(`travel-sample.callsing`['ASC']) */ on(value: IIndexOnParams[]): Query; /** * Create INDEX using General Secondary Index(GSI). * @method * @public * * @example * ```ts * const result = new Query({}, 'travel-sample').index('CREATE', 'travel_sample_id_test').usingGSI().build(); * console.log(result) * ``` * > CREATE INDEX `travel_sample_id_test` USING GSI) */ usingGSI(): Query; /** * Add items to WITH clause in INDEX clause. * @method * @public * * @example * ```ts * const withExpr = {nodes: ['192.168.1.1:8078'],defer_build: true,num_replica: 2}; * const result = new Query({}, 'travel-sample').index('CREATE', 'travel_sample_id_test').with(withExpr).build(); * console.log(result) * ``` * > CREATE INDEX `travel_sample_id_test` WITH {'nodes': ['192.168.1.1:8078'],'defer_build': true,'num_replica': 2}) */ with(value: IIndexWithParams): Query; /** * Add WHERE expression to SELECT clause. * @method * @public * * @example * ```ts * const expr_where = {$or: [{ address: { $like: '%57-59%' } }, { free_breakfast: true }]}; * const query = new Query({}, 'travel-sample'); * const result = query.select([{$field: 'address'}]).where(expr_where).build() * console.log(result) * ``` * > SELECT address FROM `travel-sample WHERE (address LIKE '%57-59%' OR free_breakfast = true)` */ where(value: LogicalWhereExpr): Query; /** * Add JOIN expression to SELECT clause. * @method * @public * * @example * ```tS * const query = new Query({}, 'beer-sample brewery'); * const result = query.select([{$field: 'address'}]).plainJoin('JOIN `beer-sample` beer ON beer.brewery_id = LOWER(REPLACE(brewery.name, " ", "_"))').build() * console.log(result) * ``` * > SELECT address FROM `beer-sample brewery` JOIN `beer-sample` beer ON beer.brewery_id = LOWER(REPLACE(brewery.name, " ", "_")) LIMIT 1` */ plainJoin(value: string): Query; /** * Add ORDER BY expression to SELECT clause. * @method * @public * * @example * ```ts * const query = new Query({}, 'travel-sample'); * const result = query.select([{$field: 'address'}]).orderBy({ size: 'DESC' }).build() * console.log(result) * ``` * > SELECT address FROM `travel-sample ORDER BY size = 'DESC'` */ orderBy(value: Record<string, SortType>): Query; /** * Add LIMIT expression to SELECT clause. * @method * @public * * @example * ```ts * const query = new Query({}, 'travel-sample'); * const result = query.select([{$field: 'address'}]).limit(10).build() * console.log(result) * ``` * > SELECT address FROM `travel-sample LIMIT 10` */ limit(value: number): Query; /** * Add OFFSET expression to SELECT clause. * @method * @public * * @example * ```ts * const query = new Query({}, 'travel-sample'); * const result = query.select([{$field: 'address'}]).offset(10).build() * console.log(result) * ``` * > SELECT address FROM `travel-sample OFFSET 10` */ offset(value: number): Query; /** * Add LET expression to SELECT clause. * @method * @public * * @example * ```ts * const letExpr = [{ key: 'amount_val', value: 10 }]; * const query = new Query({}, 'travel-sample'); * const result = query.select([{$field: 'address'}]).let(letExpr).build() * console.log(result) * ``` * > SELECT address FROM `travel-sample LET amount_val = 10` */ let(value: ILetExpr[]): Query; /** * Add GROUP BY expression to GROUP BY clause. * @method * @public * * @example * ```ts * const groupByExpr = [{ expr: 'COUNT(amount_val)', as: 'amount' }]; * const query = new Query({}, 'travel-sample'); * const result = query.select([{$field: 'address'}]).groupBy(groupByExpr).build() * console.log(result) * ``` * > SELECT address FROM `travel-sample GROUP BY COUNT(amount) AS amount` */ groupBy(value: IGroupBy[]): Query; /** * Add LETTING expression to GROUP BY clause. * @method * @public * * @example * ```ts * const groupByExpr = [{ expr: 'COUNT(amount_val)', as: 'amount' }]; * const letExpr = [{ key: 'amount_val', value: 10 }]; * const query = new Query({}, 'travel-sample'); * const result = query.select([{$field: 'address'}]).groupBy(groupByExpr).let(letExpr).build() * console.log(result) * ``` * > SELECT address FROM `travel-sample GROUP BY COUNT(amount) AS amount LETTING amount = 10` */ letting(value: ILetExpr[]): Query; /** * Add HAVING expression to GROUP BY clause. * @method * @public * * @example * ```ts * const groupByExpr = [{ expr: 'COUNT(amount_val)', as: 'amount' }]; * const having = {address: {$like: '%58%'}}; * const query = new Query({}, 'travel-sample'); * const result = query.select([{$field: 'address'}]).groupBy(groupByExpr).having(having).build() * console.log(result) * ``` * > SELECT address FROM `travel-sample GROUP BY COUNT(amount) AS amount HAVING address LIKE '%58%'` */ having(value: LogicalWhereExpr): Query; /** * Add USE KEYS expression to SELECT clause. * @method * @public * * @example * ```ts * const query = new Query({}, 'travel-sample'); * const result = query.select([{$field: 'address'}]).useKeys(['airlineR_8093']).build() * console.log(result) * ``` * > SELECT address FROM `travel-sample USE KEYS ['airlineR_8093']` */ useKeys(value: string[]): Query; /** * Converts the conditional parameters passed to the constructor to the properties of the N1QL Query. * @method * @public * */ compileFromConditions(conditionals: IConditionExpr): void; /** * Build a n1ql query from the defined parameters. * @method * @public * */ build(): string; get conditions(): IConditionExpr; set conditions(value: IConditionExpr); get collection(): string; set collection(value: string); }