{"version":3,"sources":["../../src/query-builder/QueryBuilder.ts"],"names":[],"mappings":"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","file":"QueryBuilder.js","sourcesContent":["import {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {Connection} from \"../connection/Connection\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\nimport {SelectQueryBuilder} from \"./SelectQueryBuilder\";\nimport {UpdateQueryBuilder} from \"./UpdateQueryBuilder\";\nimport {DeleteQueryBuilder} from \"./DeleteQueryBuilder\";\nimport {InsertQueryBuilder} from \"./InsertQueryBuilder\";\nimport {RelationQueryBuilder} from \"./RelationQueryBuilder\";\nimport {ObjectType} from \"../common/ObjectType\";\nimport {Alias} from \"./Alias\";\nimport {Brackets} from \"./Brackets\";\nimport {QueryDeepPartialEntity} from \"./QueryPartialEntity\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {SqljsDriver} from \"../driver/sqljs/SqljsDriver\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {EntitySchema} from \"../\";\nimport {FindOperator} from \"../find-options/FindOperator\";\nimport {In} from \"../find-options/operator/In\";\n\n// todo: completely cover query builder with tests\n// todo: entityOrProperty can be target name. implement proper behaviour if it is.\n// todo: check in persistment if id exist on object and throw exception (can be in partial selection?)\n// todo: fix problem with long aliases eg getMaxIdentifierLength\n// todo: fix replacing in .select(\"COUNT(post.id) AS cnt\") statement\n// todo: implement joinAlways in relations and relationId\n// todo: finish partial selection\n// todo: sugar methods like: .addCount and .selectCount, selectCountAndMap, selectSum, selectSumAndMap, ...\n// todo: implement @Select decorator\n// todo: add select and map functions\n\n// todo: implement relation/entity loading and setting them into properties within a separate query\n// .loadAndMap(\"post.categories\", \"post.categories\", qb => ...)\n// .loadAndMap(\"post.categories\", Category, qb => ...)\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport abstract class QueryBuilder<Entity> {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection on which QueryBuilder was created.\n */\n readonly connection: Connection;\n\n /**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\n readonly expressionMap: QueryExpressionMap;\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Query runner used to execute query builder query.\n */\n protected queryRunner?: QueryRunner;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n constructor(queryBuilder: QueryBuilder<any>);\n\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n constructor(connection: Connection, queryRunner?: QueryRunner);\n\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n constructor(connectionOrQueryBuilder: Connection|QueryBuilder<any>, queryRunner?: QueryRunner) {\n if (connectionOrQueryBuilder instanceof QueryBuilder) {\n this.connection = connectionOrQueryBuilder.connection;\n this.queryRunner = connectionOrQueryBuilder.queryRunner;\n this.expressionMap = connectionOrQueryBuilder.expressionMap.clone();\n\n } else {\n this.connection = connectionOrQueryBuilder;\n this.queryRunner = queryRunner;\n this.expressionMap = new QueryExpressionMap(this.connection);\n }\n }\n\n // -------------------------------------------------------------------------\n // Abstract Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated sql query without parameters being replaced.\n */\n abstract getQuery(): string;\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Gets the main alias string used in this query builder.\n */\n get alias(): string {\n if (!this.expressionMap.mainAlias)\n throw new Error(`Main alias is not set`); // todo: better exception\n\n return this.expressionMap.mainAlias.name;\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates SELECT query.\n * Replaces all previous selections if they exist.\n */\n select(): SelectQueryBuilder<Entity>;\n\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n select(selection: string, selectionAliasName?: string): SelectQueryBuilder<Entity>;\n\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n select(selection: string[]): SelectQueryBuilder<Entity>;\n\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n select(selection?: string|string[], selectionAliasName?: string): SelectQueryBuilder<Entity> {\n this.expressionMap.queryType = \"select\";\n if (selection instanceof Array) {\n this.expressionMap.selects = selection.map(selection => ({ selection: selection }));\n } else if (selection) {\n this.expressionMap.selects = [{ selection: selection, aliasName: selectionAliasName }];\n }\n\n // loading it dynamically because of circular issue\n const SelectQueryBuilderCls = require(\"./SelectQueryBuilder\").SelectQueryBuilder;\n if (this instanceof SelectQueryBuilderCls)\n return this as any;\n\n return new SelectQueryBuilderCls(this);\n }\n\n /**\n * Creates INSERT query.\n */\n insert(): InsertQueryBuilder<Entity> {\n this.expressionMap.queryType = \"insert\";\n\n // loading it dynamically because of circular issue\n const InsertQueryBuilderCls = require(\"./InsertQueryBuilder\").InsertQueryBuilder;\n if (this instanceof InsertQueryBuilderCls)\n return this as any;\n\n return new InsertQueryBuilderCls(this);\n }\n\n /**\n * Creates UPDATE query and applies given update values.\n */\n update(): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query and applies given update values.\n */\n update(updateSet: QueryDeepPartialEntity<Entity>): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query for the given entity and applies given update values.\n */\n update<T>(entity: ObjectType<T>, updateSet?: QueryDeepPartialEntity<T>): UpdateQueryBuilder<T>;\n\n /**\n * Creates UPDATE query for the given entity and applies given update values.\n */\n update<T>(entity: EntitySchema<T>, updateSet?: QueryDeepPartialEntity<T>): UpdateQueryBuilder<T>;\n\n /**\n * Creates UPDATE query for the given entity and applies given update values.\n */\n update(entity: Function|EntitySchema<Entity>|string, updateSet?: QueryDeepPartialEntity<Entity>): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query for the given table name and applies given update values.\n */\n update(tableName: string, updateSet?: QueryDeepPartialEntity<Entity>): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query and applies given update values.\n */\n update(entityOrTableNameUpdateSet?: string|Function|EntitySchema<any>|ObjectLiteral, maybeUpdateSet?: ObjectLiteral): UpdateQueryBuilder<any> {\n const updateSet = maybeUpdateSet ? maybeUpdateSet : entityOrTableNameUpdateSet as ObjectLiteral|undefined;\n entityOrTableNameUpdateSet = entityOrTableNameUpdateSet instanceof EntitySchema ? entityOrTableNameUpdateSet.options.name : entityOrTableNameUpdateSet;\n\n if (entityOrTableNameUpdateSet instanceof Function || typeof entityOrTableNameUpdateSet === \"string\") {\n const mainAlias = this.createFromAlias(entityOrTableNameUpdateSet);\n this.expressionMap.setMainAlias(mainAlias);\n }\n\n this.expressionMap.queryType = \"update\";\n this.expressionMap.valuesSet = updateSet;\n\n // loading it dynamically because of circular issue\n const UpdateQueryBuilderCls = require(\"./UpdateQueryBuilder\").UpdateQueryBuilder;\n if (this instanceof UpdateQueryBuilderCls)\n return this as any;\n\n return new UpdateQueryBuilderCls(this);\n }\n\n /**\n * Creates DELETE query.\n */\n delete(): DeleteQueryBuilder<Entity> {\n this.expressionMap.queryType = \"delete\";\n\n // loading it dynamically because of circular issue\n const DeleteQueryBuilderCls = require(\"./DeleteQueryBuilder\").DeleteQueryBuilder;\n if (this instanceof DeleteQueryBuilderCls)\n return this as any;\n\n return new DeleteQueryBuilderCls(this);\n }\n\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n relation(propertyPath: string): RelationQueryBuilder<Entity>;\n\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n relation<T>(entityTarget: ObjectType<T>|string, propertyPath: string): RelationQueryBuilder<T>;\n\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n relation(entityTargetOrPropertyPath: Function|string, maybePropertyPath?: string): RelationQueryBuilder<Entity> {\n const entityTarget = arguments.length === 2 ? entityTargetOrPropertyPath : undefined;\n const propertyPath = arguments.length === 2 ? maybePropertyPath as string : entityTargetOrPropertyPath as string;\n\n this.expressionMap.queryType = \"relation\";\n this.expressionMap.relationPropertyPath = propertyPath;\n\n if (entityTarget) {\n const mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n }\n\n // loading it dynamically because of circular issue\n const RelationQueryBuilderCls = require(\"./RelationQueryBuilder\").RelationQueryBuilder;\n if (this instanceof RelationQueryBuilderCls)\n return this as any;\n\n return new RelationQueryBuilderCls(this);\n }\n\n\n /**\n * Checks if given relation exists in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n hasRelation<T>(target: ObjectType<T>|string, relation: string): boolean;\n\n /**\n * Checks if given relations exist in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n hasRelation<T>(target: ObjectType<T>|string, relation: string[]): boolean;\n\n /**\n * Checks if given relation or relations exist in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n hasRelation<T>(target: ObjectType<T>|string, relation: string|string[]): boolean {\n const entityMetadata = this.connection.getMetadata(target);\n const relations = relation instanceof Array ? relation : [relation];\n return relations.every(relation => {\n return !!entityMetadata.findRelationWithPropertyPath(relation);\n });\n }\n\n /**\n * Sets parameter name and its value.\n */\n setParameter(key: string, value: any): this {\n this.expressionMap.parameters[key] = value;\n return this;\n }\n\n /**\n * Adds all parameters from the given object.\n */\n setParameters(parameters: ObjectLiteral): this {\n\n // remove function parameters\n Object.keys(parameters).forEach(key => {\n if (parameters[key] instanceof Function) {\n throw new Error(`Function parameter isn't supported in the parameters. Please check \"${key}\" parameter.`);\n }\n });\n\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setParameters(parameters);\n\n Object.keys(parameters).forEach(key => this.setParameter(key, parameters[key]));\n return this;\n }\n\n /**\n * Adds native parameters from the given object.\n */\n setNativeParameters(parameters: ObjectLiteral): this {\n\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setNativeParameters(parameters);\n\n Object.keys(parameters).forEach(key => {\n this.expressionMap.nativeParameters[key] = parameters[key];\n });\n return this;\n }\n\n /**\n * Gets all parameters.\n */\n getParameters(): ObjectLiteral {\n const parameters: ObjectLiteral = Object.assign({}, this.expressionMap.parameters);\n\n // add discriminator column parameter if it exist\n if (this.expressionMap.mainAlias && this.expressionMap.mainAlias.hasMetadata) {\n const metadata = this.expressionMap.mainAlias!.metadata;\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n const values = metadata.childEntityMetadatas\n .filter(childMetadata => childMetadata.discriminatorColumn)\n .map(childMetadata => childMetadata.discriminatorValue);\n values.push(metadata.discriminatorValue);\n parameters[\"discriminatorColumnValues\"] = values;\n }\n }\n\n return parameters;\n }\n\n /**\n * Prints sql to stdout using console.log.\n */\n printSql(): this { // TODO rename to logSql()\n const [query, parameters] = this.getQueryAndParameters();\n this.connection.logger.logQuery(query, parameters);\n return this;\n }\n\n /**\n * Gets generated sql that will be executed.\n * Parameters in the query are escaped for the currently used driver.\n */\n getSql(): string {\n return this.getQueryAndParameters()[0];\n }\n\n /**\n * Gets query to be executed with all parameters used in it.\n */\n getQueryAndParameters(): [string, any[]] {\n // this execution order is important because getQuery method generates this.expressionMap.nativeParameters values\n const query = this.getQuery();\n const parameters = this.getParameters();\n return this.connection.driver.escapeQueryWithParameters(query, parameters, this.expressionMap.nativeParameters);\n }\n\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n async execute(): Promise<any> {\n const [sql, parameters] = this.getQueryAndParameters();\n const queryRunner = this.obtainQueryRunner();\n try {\n return await queryRunner.query(sql, parameters); // await is needed here because we are using finally\n\n } finally {\n if (queryRunner !== this.queryRunner) { // means we created our own query runner\n await queryRunner.release();\n }\n if (this.connection.driver instanceof SqljsDriver) {\n await this.connection.driver.autoSave();\n }\n }\n }\n\n /**\n * Creates a completely new query builder.\n * Uses same query runner as current QueryBuilder.\n */\n createQueryBuilder(): this {\n return new (this.constructor as any)(this.connection, this.queryRunner);\n }\n\n /**\n * Clones query builder as it is.\n * Note: it uses new query runner, if you want query builder that uses exactly same query runner,\n * you can create query builder using its constructor, for example new SelectQueryBuilder(queryBuilder)\n * where queryBuilder is cloned QueryBuilder.\n */\n clone(): this {\n return new (this.constructor as any)(this);\n }\n\n /**\n * Disables escaping.\n */\n disableEscaping(): this {\n this.expressionMap.disableEscaping = false;\n return this;\n }\n\n /**\n * Escapes table name, column name or alias name using current database's escaping character.\n */\n escape(name: string): string {\n if (!this.expressionMap.disableEscaping)\n return name;\n return this.connection.driver.escape(name);\n }\n\n /**\n * Sets or overrides query builder's QueryRunner.\n */\n setQueryRunner(queryRunner: QueryRunner): this {\n this.queryRunner = queryRunner;\n return this;\n }\n\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n * Enabled by default.\n */\n callListeners(enabled: boolean): this {\n this.expressionMap.callListeners = enabled;\n return this;\n }\n\n /**\n * If set to true the query will be wrapped into a transaction.\n */\n useTransaction(enabled: boolean): this {\n this.expressionMap.useTransaction = enabled;\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets escaped table name with schema name if SqlServer driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n protected getTableName(tablePath: string): string {\n return tablePath.split(\".\")\n .map(i => {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return this.escape(i);\n }).join(\".\");\n }\n\n /**\n * Gets name of the table where insert should be performed.\n */\n protected getMainTableName(): string {\n if (!this.expressionMap.mainAlias)\n throw new Error(`Entity where values should be inserted is not specified. Call \"qb.into(entity)\" method to specify it.`);\n\n if (this.expressionMap.mainAlias.hasMetadata)\n return this.expressionMap.mainAlias.metadata.tablePath;\n\n return this.expressionMap.mainAlias.tablePath!;\n }\n\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n protected createFromAlias(entityTarget: Function|string|((qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>), aliasName?: string): Alias {\n\n // if table has a metadata then find it to properly escape its properties\n // const metadata = this.connection.entityMetadatas.find(metadata => metadata.tableName === tableName);\n if (this.connection.hasMetadata(entityTarget)) {\n const metadata = this.connection.getMetadata(entityTarget);\n\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n metadata: this.connection.getMetadata(entityTarget),\n tablePath: metadata.tablePath\n });\n\n } else {\n let subQuery: string = \"\";\n if (entityTarget instanceof Function) {\n const subQueryBuilder: SelectQueryBuilder<any> = (entityTarget as any)(((this as any) as SelectQueryBuilder<any>).subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n subQuery = subQueryBuilder.getQuery();\n\n } else {\n subQuery = entityTarget;\n }\n const isSubQuery = entityTarget instanceof Function || entityTarget.substr(0, 1) === \"(\" && entityTarget.substr(-1) === \")\";\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n tablePath: isSubQuery === false ? entityTarget as string : undefined,\n subQuery: isSubQuery === true ? subQuery : undefined,\n });\n }\n }\n\n /**\n * Replaces all entity's propertyName to name in the given statement.\n */\n protected replacePropertyNames(statement: string) {\n this.expressionMap.aliases.forEach(alias => {\n if (!alias.hasMetadata) return;\n const replaceAliasNamePrefix = this.expressionMap.aliasNamePrefixingEnabled ? alias.name + \"\\\\.\" : \"\";\n const replacementAliasNamePrefix = this.expressionMap.aliasNamePrefixingEnabled ? this.escape(alias.name) + \".\" : \"\";\n alias.metadata.columns.forEach(column => {\n const expression = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + column.propertyPath + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(column.databaseName) + \"$2\");\n const expression2 = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + column.propertyName + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression2, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(column.databaseName) + \"$2\");\n });\n alias.metadata.relations.forEach(relation => {\n [...relation.joinColumns, ...relation.inverseJoinColumns].forEach(joinColumn => {\n const expression = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + relation.propertyPath + \"\\\\.\" + joinColumn.referencedColumn!.propertyPath + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(joinColumn.databaseName) + \"$2\"); // todo: fix relation.joinColumns[0], what if multiple columns\n });\n if (relation.joinColumns.length > 0) {\n const expression = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + relation.propertyPath + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(relation.joinColumns[0].databaseName) + \"$2\"); // todo: fix relation.joinColumns[0], what if multiple columns\n }\n });\n });\n return statement;\n }\n\n /**\n * Creates \"WHERE\" expression.\n */\n protected createWhereExpression() {\n const conditions = this.createWhereExpressionString();\n\n if (this.expressionMap.mainAlias!.hasMetadata) {\n const metadata = this.expressionMap.mainAlias!.metadata;\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n const column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias!.name + \".\" + metadata.discriminatorColumn.databaseName\n : metadata.discriminatorColumn.databaseName;\n\n const condition = `${this.replacePropertyNames(column)} IN (:...discriminatorColumnValues)`;\n return ` WHERE ${ conditions.length ? \"(\" + conditions + \") AND\" : \"\" } ${condition}`;\n }\n }\n\n if (!conditions.length) // TODO copy in to discriminator condition\n return this.expressionMap.extraAppendedAndWhereCondition ? \" WHERE \" + this.replacePropertyNames(this.expressionMap.extraAppendedAndWhereCondition) : \"\";\n\n if (this.expressionMap.extraAppendedAndWhereCondition)\n return \" WHERE (\" + conditions + \") AND \" + this.replacePropertyNames(this.expressionMap.extraAppendedAndWhereCondition);\n\n return \" WHERE \" + conditions;\n }\n\n /**\n * Creates \"RETURNING\" / \"OUTPUT\" expression.\n */\n protected createReturningExpression(): string {\n const columns = this.getReturningColumns();\n const driver = this.connection.driver;\n\n // also add columns we must auto-return to perform entity updation\n // if user gave his own returning\n if (typeof this.expressionMap.returning !== \"string\" &&\n this.expressionMap.extraReturningColumns.length > 0 &&\n driver.isReturningSqlSupported()) {\n columns.push(...this.expressionMap.extraReturningColumns.filter(column => {\n return columns.indexOf(column) === -1;\n }));\n }\n\n if (columns.length) {\n let columnsExpression = columns.map(column => {\n const name = this.escape(column.databaseName);\n if (driver instanceof SqlServerDriver) {\n if (this.expressionMap.queryType === \"insert\" || this.expressionMap.queryType === \"update\") {\n return \"INSERTED.\" + name;\n } else {\n return this.escape(this.getMainTableName()) + \".\" + name;\n }\n } else {\n return name;\n }\n }).join(\", \");\n\n if (driver instanceof OracleDriver) {\n columnsExpression += \" INTO \" + columns.map(column => {\n const parameterName = \"output_\" + column.databaseName;\n this.expressionMap.nativeParameters[parameterName] = { type: driver.columnTypeToNativeParameter(column.type), dir: driver.oracle.BIND_OUT };\n return this.connection.driver.createParameter(parameterName, Object.keys(this.expressionMap.nativeParameters).length);\n }).join(\", \");\n }\n return columnsExpression;\n\n } else if (typeof this.expressionMap.returning === \"string\") {\n return this.expressionMap.returning;\n }\n\n return \"\";\n }\n\n /**\n * If returning / output cause is set to array of column names,\n * then this method will return all column metadatas of those column names.\n */\n protected getReturningColumns(): ColumnMetadata[] {\n const columns: ColumnMetadata[] = [];\n if (this.expressionMap.returning instanceof Array) {\n (this.expressionMap.returning as string[]).forEach(columnName => {\n if (this.expressionMap.mainAlias!.hasMetadata) {\n columns.push(...this.expressionMap.mainAlias!.metadata.findColumnsWithPropertyPath(columnName));\n }\n });\n }\n return columns;\n }\n\n /**\n * Concatenates all added where expressions into one string.\n */\n protected createWhereExpressionString(): string {\n return this.expressionMap.wheres.map((where, index) => {\n switch (where.type) {\n case \"and\":\n return (index > 0 ? \"AND \" : \"\") + this.replacePropertyNames(where.condition);\n case \"or\":\n return (index > 0 ? \"OR \" : \"\") + this.replacePropertyNames(where.condition);\n default:\n return this.replacePropertyNames(where.condition);\n }\n }).join(\" \");\n }\n\n /**\n * Creates \"WHERE\" expression and variables for the given \"ids\".\n */\n protected createWhereIdsExpression(ids: any|any[]): string {\n const metadata = this.expressionMap.mainAlias!.metadata;\n const normalized = (Array.isArray(ids) ? ids : [ids]).map(id => metadata.ensureEntityIdMap(id));\n\n // using in(...ids) for single primary key entities\n if (!metadata.hasMultiplePrimaryKeys\n && metadata.embeddeds.length === 0\n ) {\n const primaryColumn = metadata.primaryColumns[0];\n\n // getEntityValue will try to transform `In`, it is a bug\n // todo: remove this transformer check after #2390 is fixed\n if (!primaryColumn.transformer) {\n return this.computeWhereParameter({\n [primaryColumn.propertyName]: In(\n normalized.map(id => primaryColumn.getEntityValue(id, false))\n )\n });\n }\n }\n\n // create shortcuts for better readability\n const alias = this.expressionMap.aliasNamePrefixingEnabled ? this.escape(this.expressionMap.mainAlias!.name) + \".\" : \"\";\n let parameterIndex = Object.keys(this.expressionMap.nativeParameters).length;\n const whereStrings = normalized.map((id, index) => {\n const whereSubStrings: string[] = [];\n metadata.primaryColumns.forEach((primaryColumn, secondIndex) => {\n const parameterName = \"id_\" + index + \"_\" + secondIndex;\n // whereSubStrings.push(alias + this.escape(primaryColumn.databaseName) + \"=:id_\" + index + \"_\" + secondIndex);\n whereSubStrings.push(alias + this.escape(primaryColumn.databaseName) + \" = \" + this.connection.driver.createParameter(parameterName, parameterIndex));\n this.expressionMap.nativeParameters[parameterName] = primaryColumn.getEntityValue(id, true);\n parameterIndex++;\n });\n return whereSubStrings.join(\" AND \");\n });\n\n return whereStrings.length > 1\n ? \"(\" + whereStrings.map(whereString => \"(\" + whereString + \")\").join(\" OR \") + \")\"\n : whereStrings[0];\n }\n\n /**\n * Computes given where argument - transforms to a where string all forms it can take.\n */\n protected computeWhereParameter(where: string|((qb: this) => string)|Brackets|ObjectLiteral|ObjectLiteral[]) {\n if (typeof where === \"string\")\n return where;\n\n if (where instanceof Brackets) {\n const whereQueryBuilder = this.createQueryBuilder();\n where.whereFactory(whereQueryBuilder as any);\n const whereString = whereQueryBuilder.createWhereExpressionString();\n this.setParameters(whereQueryBuilder.getParameters());\n return whereString ? \"(\" + whereString + \")\" : \"\";\n\n } else if (where instanceof Function) {\n return where(this);\n\n } else if (where instanceof Object) {\n const wheres: ObjectLiteral[] = where instanceof Array ? where : [where];\n let andConditions: string[];\n let parameterIndex = Object.keys(this.expressionMap.nativeParameters).length;\n\n if (this.expressionMap.mainAlias!.hasMetadata) {\n andConditions = wheres.map((where, whereIndex) => {\n const propertyPaths = EntityMetadata.createPropertyPath(this.expressionMap.mainAlias!.metadata, where);\n\n return propertyPaths.map((propertyPath, propertyIndex) => {\n const columns = this.expressionMap.mainAlias!.metadata.findColumnsWithPropertyPath(propertyPath);\n return columns.map((column, columnIndex) => {\n\n const aliasPath = this.expressionMap.aliasNamePrefixingEnabled ? `${this.alias}.${propertyPath}` : column.propertyPath;\n let parameterValue = column.getEntityValue(where, true);\n const parameterName = \"where_\" + whereIndex + \"_\" + propertyIndex + \"_\" + columnIndex;\n const parameterBaseCount = Object.keys(this.expressionMap.nativeParameters).filter(x => x.startsWith(parameterName)).length;\n\n if (parameterValue === null) {\n return `${aliasPath} IS NULL`;\n\n } else if (parameterValue instanceof FindOperator) {\n let parameters: any[] = [];\n if (parameterValue.useParameter) {\n const realParameterValues: any[] = parameterValue.multipleParameters ? parameterValue.value : [parameterValue.value];\n realParameterValues.forEach((realParameterValue, realParameterValueIndex) => {\n this.expressionMap.nativeParameters[parameterName + (parameterBaseCount + realParameterValueIndex)] = realParameterValue;\n parameterIndex++;\n parameters.push(this.connection.driver.createParameter(parameterName + (parameterBaseCount + realParameterValueIndex), parameterIndex - 1));\n });\n }\n return parameterValue.toSql(this.connection, aliasPath, parameters);\n\n } else {\n this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex++;\n const parameter = this.connection.driver.createParameter(parameterName, parameterIndex - 1);\n return `${aliasPath} = ${parameter}`;\n }\n\n }).filter(expression => !!expression).join(\" AND \");\n }).filter(expression => !!expression).join(\" AND \");\n });\n\n } else {\n andConditions = wheres.map((where, whereIndex) => {\n return Object.keys(where).map((key, parameterIndex) => {\n const parameterValue = where[key];\n const aliasPath = this.expressionMap.aliasNamePrefixingEnabled ? `${this.alias}.${key}` : key;\n if (parameterValue === null) {\n return `${aliasPath} IS NULL`;\n\n } else {\n const parameterName = \"where_\" + whereIndex + \"_\" + parameterIndex;\n this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex++;\n return `${aliasPath} = ${this.connection.driver.createParameter(parameterName, parameterIndex - 1)}`;\n }\n }).join(\" AND \");\n });\n }\n\n if (andConditions.length > 1)\n return andConditions.map(where => \"(\" + where + \")\").join(\" OR \");\n\n return andConditions.join(\"\");\n }\n\n return \"\";\n }\n\n /**\n * Creates a query builder used to execute sql queries inside this query builder.\n */\n protected obtainQueryRunner() {\n return this.queryRunner || this.connection.createQueryRunner(\"master\");\n }\n\n}\n"],"sourceRoot":".."}
|