333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../browser/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":".."}