@bxjs/base
Version:
617 lines (614 loc) • 32.4 kB
text/typescript
import {
ObjectLiteral, OrderByCondition,
WhereExpression, Brackets,
// SelectQueryBuilderOption,
} from 'typeorm'
import { QueryBuilder } from './QueryBuilder'
// export declare type SelectQueryBuilderOption = "disable-global-order" | "create-pojo";
/**
* Allows to build complex sql queries in a fashion way and execute those queries.
*/
export declare class SelectQueryBuilder<Entity> extends QueryBuilder<Entity> implements WhereExpression {
/**
* Gets generated sql query without parameters being replaced.
*/
getQuery(): string;
/**
* Creates a subquery - query that can be used inside other queries.
*/
subQuery(): SelectQueryBuilder<any>;
/**
* Creates SELECT query.
* Replaces all previous selections if they exist.
*/
// select(): this;
// /**
// * Creates SELECT query.
// * Replaces all previous selections if they exist.
// */
// select(selection: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>, selectionAliasName?: string): this;
// /**
// * Creates SELECT query and selects given data.
// * Replaces all previous selections if they exist.
// */
// select(selection: string, selectionAliasName?: string): this;
/**
* Creates SELECT query and selects given data.
* Replaces all previous selections if they exist.
*/
// select(selection: string[]): this;
select(selection: any[]): this;
/**
* Adds new selection to the SELECT query.
*/
addSelect(selection: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>, selectionAliasName?: string): this;
/**
* Adds new selection to the SELECT query.
*/
// addSelect(selection: string, selectionAliasName?: string): this;
/**
* Adds new selection to the SELECT query.
*/
// addSelect(selection: string[]): this;
addSelect(selection: any[]): this;
/**
* Sets whether the selection is DISTINCT.
*/
distinct(distinct?: boolean): this;
/**
* Sets the distinct on clause for Postgres.
*/
distinctOn(distinctOn: string[]): this;
// /**
// * Specifies FROM which entity's table select/update/delete will be executed.
// * Also sets a main string alias of the selection data.
// * Removes all previously set from-s.
// */
// from<T>(entityTarget: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>, aliasName: string): SelectQueryBuilder<T>;
// /**
// * Specifies FROM which entity's table select/update/delete will be executed.
// * Also sets a main string alias of the selection data.
// * Removes all previously set from-s.
// */
// from<T>(entityTarget: ObjectType<T> | string, aliasName: string): SelectQueryBuilder<T>;
// /**
// * Specifies FROM which entity's table select/update/delete will be executed.
// * Also sets a main string alias of the selection data.
// */
// addFrom<T>(entityTarget: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>, aliasName: string): SelectQueryBuilder<T>;
// /**
// * Specifies FROM which entity's table select/update/delete will be executed.
// * Also sets a main string alias of the selection data.
// */
// addFrom<T>(entityTarget: ObjectType<T> | string, aliasName: string): SelectQueryBuilder<T>;
// /**
// * INNER JOINs (without selection) given subquery.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoin(subQueryFactory: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * INNER JOINs (without selection) entity's property.
// * Given entity property should be a relation.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoin(property: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * INNER JOINs (without selection) given entity's table.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoin(entity: Function | string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * INNER JOINs (without selection) given table.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoin(tableName: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs (without selection) given subquery.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoin(subQueryFactory: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs (without selection) entity's property.
// * Given entity property should be a relation.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoin(property: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs (without selection) entity's table.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoin(entity: Function | string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs (without selection) given table.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoin(tableName: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
/**
* INNER JOINs given subquery and adds all selection properties to SELECT..
* You also need to specify an alias of the joined data.
* Optionally, you can add condition and parameters used in condition.
*/
innerJoinAndSelect(subQueryFactory: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>, alias: string, condition?: string, parameters?: ObjectLiteral): this;
/**
* INNER JOINs entity's property and adds all selection properties to SELECT.
* Given entity property should be a relation.
* You also need to specify an alias of the joined data.
* Optionally, you can add condition and parameters used in condition.
*/
// innerJoinAndSelect(property: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
innerJoinAndSelect(property: any, alias: any, condition?: string, parameters?: ObjectLiteral): this;
/**
* INNER JOINs entity and adds all selection properties to SELECT.
* You also need to specify an alias of the joined data.
* Optionally, you can add condition and parameters used in condition.
*/
// innerJoinAndSelect(entity: Function | string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
/**
* INNER JOINs table and adds all selection properties to SELECT.
* You also need to specify an alias of the joined data.
* Optionally, you can add condition and parameters used in condition.
*/
// innerJoinAndSelect(tableName: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
/**
* LEFT JOINs given subquery and adds all selection properties to SELECT..
* You also need to specify an alias of the joined data.
* Optionally, you can add condition and parameters used in condition.
*/
leftJoinAndSelect(subQueryFactory: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>, alias: string, condition?: string, parameters?: ObjectLiteral): this;
/**
* LEFT JOINs entity's property and adds all selection properties to SELECT.
* Given entity property should be a relation.
* You also need to specify an alias of the joined data.
* Optionally, you can add condition and parameters used in condition.
*/
// leftJoinAndSelect(property: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
leftJoinAndSelect(property: any, alias: any, condition?: string, parameters?: ObjectLiteral): this;
/**
* LEFT JOINs entity and adds all selection properties to SELECT.
* You also need to specify an alias of the joined data.
* Optionally, you can add condition and parameters used in condition.
*/
// leftJoinAndSelect(entity: Function | string, alias: string, condition: string, parameters?: ObjectLiteral): this;
/**
* LEFT JOINs table and adds all selection properties to SELECT.
* You also need to specify an alias of the joined data.
* Optionally, you can add condition and parameters used in condition.
*/
// leftJoinAndSelect(tableName: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * INNER JOINs given subquery, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there are multiple rows of selecting data, and mapped result will be an array.
// * Given entity property should be a relation.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoinAndMapMany(mapToProperty: string, subQueryFactory: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>,
// alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * INNER JOINs entity's property, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there are multiple rows of selecting data, and mapped result will be an array.
// * Given entity property should be a relation.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoinAndMapMany(mapToProperty: string, property: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * INNER JOINs entity's table, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there are multiple rows of selecting data, and mapped result will be an array.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoinAndMapMany(mapToProperty: string, entity: Function | string, alias: string, condition: string, parameters?: ObjectLiteral): this;
// /**
// * INNER JOINs table, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there are multiple rows of selecting data, and mapped result will be an array.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoinAndMapMany(mapToProperty: string, tableName: string, alias: string, condition: string, parameters?: ObjectLiteral): this;
// /**
// * INNER JOINs given subquery, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.
// * Given entity property should be a relation.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoinAndMapOne(mapToProperty: string, subQueryFactory: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>,
// alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * INNER JOINs entity's property, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.
// * Given entity property should be a relation.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoinAndMapOne(mapToProperty: string, property: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * INNER JOINs entity's table, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoinAndMapOne(mapToProperty: string, entity: Function | string, alias: string, condition: string, parameters?: ObjectLiteral): this;
// /**
// * INNER JOINs table, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// innerJoinAndMapOne(mapToProperty: string, tableName: string, alias: string, condition: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs given subquery, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there are multiple rows of selecting data, and mapped result will be an array.
// * Given entity property should be a relation.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoinAndMapMany(mapToProperty: string, subQueryFactory: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>,
// alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs entity's property, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there are multiple rows of selecting data, and mapped result will be an array.
// * Given entity property should be a relation.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoinAndMapMany(mapToProperty: string, property: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs entity's table, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there are multiple rows of selecting data, and mapped result will be an array.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoinAndMapMany(mapToProperty: string, entity: Function | string, alias: string, condition: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs table, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there are multiple rows of selecting data, and mapped result will be an array.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoinAndMapMany(mapToProperty: string, tableName: string, alias: string, condition: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs given subquery, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.
// * Given entity property should be a relation.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoinAndMapOne(mapToProperty: string, subQueryFactory: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>,
// alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs entity's property, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.
// * Given entity property should be a relation.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoinAndMapOne(mapToProperty: string, property: string, alias: string, condition?: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs entity's table, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoinAndMapOne(mapToProperty: string, entity: Function | string, alias: string, condition: string, parameters?: ObjectLiteral): this;
// /**
// * LEFT JOINs table, SELECTs the data returned by a join and MAPs all that data to some entity's property.
// * This is extremely useful when you want to select some data and map it to some virtual property.
// * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.
// * You also need to specify an alias of the joined data.
// * Optionally, you can add condition and parameters used in condition.
// */
// leftJoinAndMapOne(mapToProperty: string, tableName: string, alias: string, condition: string, parameters?: ObjectLiteral): this;
// /**
// */
// /**
// */
// /**
// */
// /**
// */
// /**
// * LEFT JOINs relation id and maps it into some entity's property.
// * Optionally, you can add condition and parameters used in condition.
// */
// loadRelationIdAndMap(mapToProperty: string, relationName: string, options?: {
// disableMixedMap?: boolean;
// }): this;
// /**
// * LEFT JOINs relation id and maps it into some entity's property.
// * Optionally, you can add condition and parameters used in condition.
// */
// loadRelationIdAndMap(mapToProperty: string, relationName: string, alias: string, queryBuilderFactory: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>): this;
// /**
// * Counts number of entities of entity's relation and maps the value into some entity's property.
// * Optionally, you can add condition and parameters used in condition.
// */
// loadRelationCountAndMap(mapToProperty: string, relationName: string, aliasName?: string,
// queryBuilderFactory?: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>): this;
// /**
// * Loads all relation ids for all relations of the selected entity.
// * All relation ids will be mapped to relation property themself.
// * If array of strings is given then loads only relation ids of the given properties.
// */
// loadAllRelationIds(options?: {
// relations?: string[];
// disableMixedMap?: boolean;
// }): this;
/**
* Sets WHERE condition in the query builder.
* If you had previously WHERE expression defined,
* calling this function will override previously set WHERE conditions.
* Additionally you can add parameters used in where expression.
*/
where(where: Brackets | string | ((qb: this) => string) | ObjectLiteral | ObjectLiteral[], parameters?: ObjectLiteral): this;
/**
* Adds new AND WHERE condition in the query builder.
* Additionally you can add parameters used in where expression.
*/
andWhere(where: string | Brackets | ((qb: this) => string), parameters?: ObjectLiteral): this;
/**
* Adds new OR WHERE condition in the query builder.
* Additionally you can add parameters used in where expression.
*/
orWhere(where: Brackets | string | ((qb: this) => string), parameters?: ObjectLiteral): this;
/**
* Adds new AND WHERE with conditions for the given ids.
*
* Ids are mixed.
* It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].
* If you have multiple primary keys you need to pass object with property names and values specified,
* for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]
*/
whereInIds(ids: any | any[]): this;
/**
* Adds new AND WHERE with conditions for the given ids.
*
* Ids are mixed.
* It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].
* If you have multiple primary keys you need to pass object with property names and values specified,
* for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]
*/
andWhereInIds(ids: any | any[]): this;
/**
* Adds new OR WHERE with conditions for the given ids.
*
* Ids are mixed.
* It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].
* If you have multiple primary keys you need to pass object with property names and values specified,
* for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]
*/
orWhereInIds(ids: any | any[]): this;
/**
* Sets HAVING condition in the query builder.
* If you had previously HAVING expression defined,
* calling this function will override previously set HAVING conditions.
* Additionally you can add parameters used in where expression.
*/
having(having: string, parameters?: ObjectLiteral): this;
/**
* Adds new AND HAVING condition in the query builder.
* Additionally you can add parameters used in where expression.
*/
andHaving(having: string, parameters?: ObjectLiteral): this;
/**
* Adds new OR HAVING condition in the query builder.
* Additionally you can add parameters used in where expression.
*/
orHaving(having: string, parameters?: ObjectLiteral): this;
/**
* Sets GROUP BY condition in the query builder.
* If you had previously GROUP BY expression defined,
* calling this function will override previously set GROUP BY conditions.
*/
groupBy(): this;
/**
* Sets GROUP BY condition in the query builder.
* If you had previously GROUP BY expression defined,
* calling this function will override previously set GROUP BY conditions.
*/
groupBy(groupBy: string): this;
/**
* Adds GROUP BY condition in the query builder.
*/
addGroupBy(groupBy: string): this;
/**
* Sets ORDER BY condition in the query builder.
* If you had previously ORDER BY expression defined,
* calling this function will override previously set ORDER BY conditions.
*
* Calling order by without order set will remove all previously set order bys.
*/
orderBy(): this;
/**
* Sets ORDER BY condition in the query builder.
* If you had previously ORDER BY expression defined,
* calling this function will override previously set ORDER BY conditions.
*/
orderBy(sort: string, order?: 'ASC' | 'DESC', nulls?: 'NULLS FIRST' | 'NULLS LAST'): this;
/**
* Sets ORDER BY condition in the query builder.
* If you had previously ORDER BY expression defined,
* calling this function will override previously set ORDER BY conditions.
*/
orderBy(order: OrderByCondition): this;
/**
* Adds ORDER BY condition in the query builder.
*/
addOrderBy(sort: string, order?: 'ASC' | 'DESC', nulls?: 'NULLS FIRST' | 'NULLS LAST'): this;
/**
* Set's LIMIT - maximum number of rows to be selected.
* NOTE that it may not work as you expect if you are using joins.
* If you want to implement pagination, and you are having join in your query,
* then use instead take method instead.
*/
limit(limit?: number): this;
/**
* Set's OFFSET - selection offset.
* NOTE that it may not work as you expect if you are using joins.
* If you want to implement pagination, and you are having join in your query,
* then use instead skip method instead.
*/
offset(offset?: number): this;
/**
* Sets maximal number of entities to take.
*/
take(take?: number): this;
/**
* Sets number of entities to skip.
*/
skip(skip?: number): this;
/**
* Sets locking mode.
*/
setLock(lockMode: 'optimistic', lockVersion: number): this;
// /**
// * Sets locking mode.
// */
// setLock(lockMode: 'optimistic', lockVersion: Date): this;
/**
* Sets locking mode.
*/
// setLock(lockMode: 'pessimistic_read' | 'pessimistic_write' | 'dirty_read'): this;
setLock(lockMode: 'pessimistic_read' | 'pessimistic_write'): this;
/**
* Gets first raw result returned by execution of generated query builder sql.
*/
getRawOne(): Promise<any>;
/**
* Gets all raw results returned by execution of generated query builder sql.
*/
getRawMany(): Promise<any[]>;
/**
* Executes sql generated by query builder and returns object with raw results and entities created from them.
*/
getRawAndEntities(): Promise<{
entities: Entity[];
raw: any[];
}>;
/**
* Gets single entity returned by execution of generated query builder sql.
*/
// getOne(): Promise<Entity | undefined>; // 不适合返回undefined应该由应用进行断言处理,简化上层应用的书写编码体验。
getOne(): Promise<Entity>;
/**
* Gets entities returned by execution of generated query builder sql.
*/
getMany(): Promise<Entity[]>;
/**
* Gets count - number of entities selected by sql generated by this query builder.
* Count excludes all limitations set by setFirstResult and setMaxResults methods call.
*/
getCount(): Promise<number>;
/**
* Executes built SQL query and returns entities and overall entities count (without limitation).
* This method is useful to build pagination.
*/
getManyAndCount(): Promise<[Entity[], number]>;
// /**
// * Executes built SQL query and returns raw data stream.
// */
// stream(): Promise<ReadStream>;
/**
* Enables or disables query result caching.
*/
cache(enabled: boolean): this;
/**
* Enables query result caching and sets in milliseconds in which cache will expire.
* If not set then global caching time will be used.
*/
cache(milliseconds: number): this;
/**
* Enables query result caching and sets cache id and milliseconds in which cache will expire.
*/
cache(id: any, milliseconds?: number): this;
// /**
// * Sets extra options that can be used to configure how query builder works.
// */
// setOption(option: SelectQueryBuilderOption): this;
// protected join(direction: "INNER" | "LEFT", entityOrProperty: Function | string
// | ((qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>), aliasName: string, condition?: string,
// parameters?: ObjectLiteral, mapToProperty?: string, isMappingMany?: boolean): void;
// /**
// * Creates "SELECT FROM" part of SQL query.
// */
// protected createSelectExpression(): string;
// /**
// * Creates select | select distinct part of SQL query.
// */
// protected createSelectDistinctExpression(): string;
// /**
// * Creates "JOIN" part of SQL query.
// */
// protected createJoinExpression(): string;
// /**
// * Creates "GROUP BY" part of SQL query.
// */
// protected createGroupByExpression(): string;
// /**
// * Creates "ORDER BY" part of SQL query.
// */
// protected createOrderByExpression(): string;
// /**
// * Creates "LIMIT" and "OFFSET" parts of SQL query.
// */
// protected createLimitOffsetExpression(): string;
// /**
// * Creates "LOCK" part of SQL query.
// */
// protected createLockExpression(): string;
// /**
// * Creates "HAVING" part of SQL query.
// */
// protected createHavingExpression(): string;
// protected buildEscapedEntityColumnSelects(aliasName: string, metadata: EntityMetadata): SelectQuery[];
// protected findEntityColumnSelects(aliasName: string, metadata: EntityMetadata): SelectQuery[];
// protected executeCountQuery(queryRunner: QueryRunner): Promise<number>;
// /**
// * Executes sql generated by query builder and returns object with raw results and entities created from them.
// */
// protected executeEntitiesAndRawResults(queryRunner: QueryRunner): Promise<{
// entities: Entity[];
// raw: any[];
// }>;
// protected createOrderByCombinedWithSelectExpression(parentAlias: string): [string, OrderByCondition];
// /**
// * Loads raw results from the database.
// */
// protected loadRawResults(queryRunner: QueryRunner): Promise<any>;
// /**
// * Merges into expression map given expression map properties.
// */
// protected mergeExpressionMap(expressionMap: Partial<QueryExpressionMap>): this;
// /**
// * Normalizes a give number - converts to int if possible.
// */
// protected normalizeNumber(num: any): any;
// /**
// * Creates a query builder used to execute sql queries inside this query builder.
// */
// protected obtainQueryRunner(): QueryRunner;
}