@stoqey/sofa
Version:
Couchbase utilities
322 lines (321 loc) • 9.61 kB
TypeScript
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);
}