333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../../src/driver/sqlserver/SqlServerQueryRunner.ts"],"names":[],"mappings":"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","file":"SqlServerQueryRunner.js","sourcesContent":["import {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {TransactionAlreadyStartedError} from \"../../error/TransactionAlreadyStartedError\";\nimport {TransactionNotStartedError} from \"../../error/TransactionNotStartedError\";\nimport {ColumnType, PromiseUtils} from \"../../index\";\nimport {ReadStream} from \"../../platform/PlatformTools\";\nimport {BaseQueryRunner} from \"../../query-runner/BaseQueryRunner\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {TableIndexOptions} from \"../../schema-builder/options/TableIndexOptions\";\nimport {Table} from \"../../schema-builder/table/Table\";\nimport {TableCheck} from \"../../schema-builder/table/TableCheck\";\nimport {TableColumn} from \"../../schema-builder/table/TableColumn\";\nimport {TableExclusion} from \"../../schema-builder/table/TableExclusion\";\nimport {TableForeignKey} from \"../../schema-builder/table/TableForeignKey\";\nimport {TableIndex} from \"../../schema-builder/table/TableIndex\";\nimport {TableUnique} from \"../../schema-builder/table/TableUnique\";\nimport {View} from \"../../schema-builder/view/View\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {Query} from \"../Query\";\nimport {IsolationLevel} from \"../types/IsolationLevel\";\nimport {MssqlParameter} from \"./MssqlParameter\";\nimport {SqlServerDriver} from \"./SqlServerDriver\";\n\n/**\n * Runs queries on a single SQL Server database connection.\n */\nexport class SqlServerQueryRunner extends BaseQueryRunner implements QueryRunner {\n\n    // -------------------------------------------------------------------------\n    // Public Implemented Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Database driver used by connection.\n     */\n    driver: SqlServerDriver;\n\n    // -------------------------------------------------------------------------\n    // Protected Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Last executed query in a transaction.\n     * This is needed because in transaction mode mssql cannot execute parallel queries,\n     * that's why we store last executed query promise to wait it when we execute next query.\n     *\n     * @see https://github.com/patriksimek/node-mssql/issues/491\n     */\n    protected queryResponsibilityChain: Promise<any>[] = [];\n\n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n\n    constructor(driver: SqlServerDriver, mode: \"master\"|\"slave\" = \"master\") {\n        super();\n        this.driver = driver;\n        this.connection = driver.connection;\n        this.broadcaster = new Broadcaster(this);\n        this.mode = mode;\n    }\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Creates/uses database connection from the connection pool to perform further operations.\n     * Returns obtained database connection.\n     */\n    connect(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    /**\n     * Releases used database connection.\n     * You cannot use query runner methods once its released.\n     */\n    release(): Promise<void> {\n        this.isReleased = true;\n        return Promise.resolve();\n    }\n\n    /**\n     * Starts transaction.\n     */\n    async startTransaction(isolationLevel?: IsolationLevel): Promise<void> {\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        if (this.isTransactionActive)\n            throw new TransactionAlreadyStartedError();\n\n        return new Promise<void>(async (ok, fail) => {\n            this.isTransactionActive = true;\n\n            const pool = await (this.mode === \"slave\" ? this.driver.obtainSlaveConnection() : this.driver.obtainMasterConnection());\n            this.databaseConnection = pool.transaction();\n\n            const transactionCallback = (err: any) => {\n                if (err) {\n                    this.isTransactionActive = false;\n                    return fail(err);\n                }\n                ok();\n                this.connection.logger.logQuery(\"BEGIN TRANSACTION\");\n                if (isolationLevel) {\n                    this.connection.logger.logQuery(\"SET TRANSACTION ISOLATION LEVEL \" + isolationLevel);\n                }\n            };\n\n            if (isolationLevel) {\n                this.databaseConnection.begin(this.convertIsolationLevel(isolationLevel), transactionCallback);\n            } else {\n                this.databaseConnection.begin(transactionCallback);\n            }\n        });\n    }\n\n    /**\n     * Commits transaction.\n     * Error will be thrown if transaction was not started.\n     */\n    async commitTransaction(): Promise<void> {\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        if (!this.isTransactionActive)\n            throw new TransactionNotStartedError();\n\n        return new Promise<void>((ok, fail) => {\n            this.databaseConnection.commit((err: any) => {\n                if (err) return fail(err);\n                this.isTransactionActive = false;\n                this.databaseConnection = null;\n                ok();\n                this.connection.logger.logQuery(\"COMMIT\");\n            });\n        });\n    }\n\n    /**\n     * Rollbacks transaction.\n     * Error will be thrown if transaction was not started.\n     */\n    async rollbackTransaction(): Promise<void> {\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        if (!this.isTransactionActive)\n            throw new TransactionNotStartedError();\n\n        return new Promise<void>((ok, fail) => {\n            this.databaseConnection.rollback((err: any) => {\n                if (err) return fail(err);\n                this.isTransactionActive = false;\n                this.databaseConnection = null;\n                ok();\n                this.connection.logger.logQuery(\"ROLLBACK\");\n            });\n        });\n    }\n\n    /**\n     * Executes a given SQL query.\n     */\n    async query(query: string, parameters?: any[]): Promise<any> {\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        let waitingOkay: Function;\n        const waitingPromise = new Promise((ok) => waitingOkay = ok);\n        if (this.queryResponsibilityChain.length) {\n            const otherWaitingPromises = [...this.queryResponsibilityChain];\n            this.queryResponsibilityChain.push(waitingPromise);\n            await Promise.all(otherWaitingPromises);\n        }\n\n        const promise = new Promise(async (ok, fail) => {\n            try {\n                this.driver.connection.logger.logQuery(query, parameters, this);\n                const pool = await (this.mode === \"slave\" ? this.driver.obtainSlaveConnection() : this.driver.obtainMasterConnection());\n                const request = new this.driver.mssql.Request(this.isTransactionActive ? this.databaseConnection : pool);\n                if (parameters && parameters.length) {\n                    parameters.forEach((parameter, index) => {\n                        if (parameter instanceof MssqlParameter) {\n                            const mssqlParameter = this.mssqlParameterToNativeParameter(parameter);\n                            if (mssqlParameter) {\n                                request.input(index, mssqlParameter, parameter.value);\n                            } else {\n                                request.input(index, parameter.value);\n                            }\n                        } else {\n                            request.input(index, parameter);\n                        }\n                    });\n                }\n                const queryStartTime = +new Date();\n                request.query(query, (err: any, result: any) => {\n\n                    // log slow queries if maxQueryExecution time is set\n                    const maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n                    const queryEndTime = +new Date();\n                    const queryExecutionTime = queryEndTime - queryStartTime;\n                    if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n                        this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n\n                    const resolveChain = () => {\n                        if (promiseIndex !== -1)\n                            this.queryResponsibilityChain.splice(promiseIndex, 1);\n                        if (waitingPromiseIndex !== -1)\n                            this.queryResponsibilityChain.splice(waitingPromiseIndex, 1);\n                        waitingOkay();\n                    };\n\n                    let promiseIndex = this.queryResponsibilityChain.indexOf(promise);\n                    let waitingPromiseIndex = this.queryResponsibilityChain.indexOf(waitingPromise);\n                    if (err) {\n                        this.driver.connection.logger.logQueryError(err, query, parameters, this);\n                        resolveChain();\n                        return fail(new QueryFailedError(query, parameters, err));\n                    }\n\n                    const queryType = query.slice(0, query.indexOf(\" \"));\n                    switch (queryType) {\n                        case \"DELETE\":\n                            // for DELETE query additionally return number of affected rows\n                            ok([result.recordset, result.rowsAffected[0]]);\n                            break;\n                        default:\n                            ok(result.recordset);\n                    }\n                    resolveChain();\n                });\n\n            } catch (err) {\n                fail(err);\n            }\n        });\n        // with this condition, Promise.all causes unexpected behavior.\n        // if (this.isTransactionActive)\n        this.queryResponsibilityChain.push(promise);\n        return promise;\n    }\n\n    /**\n     * Returns raw data stream.\n     */\n    async stream(query: string, parameters?: any[], onEnd?: Function, onError?: Function): Promise<ReadStream> {\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        let waitingOkay: Function;\n        const waitingPromise = new Promise((ok) => waitingOkay = ok);\n        if (this.queryResponsibilityChain.length) {\n            const otherWaitingPromises = [...this.queryResponsibilityChain];\n            this.queryResponsibilityChain.push(waitingPromise);\n            await Promise.all(otherWaitingPromises);\n        }\n\n        const promise = new Promise<ReadStream>(async (ok, fail) => {\n\n            this.driver.connection.logger.logQuery(query, parameters, this);\n            const pool = await (this.mode === \"slave\" ? this.driver.obtainSlaveConnection() : this.driver.obtainMasterConnection());\n            const request = new this.driver.mssql.Request(this.isTransactionActive ? this.databaseConnection : pool);\n            request.stream = true;\n            if (parameters && parameters.length) {\n                parameters.forEach((parameter, index) => {\n                    if (parameter instanceof MssqlParameter) {\n                        request.input(index, this.mssqlParameterToNativeParameter(parameter), parameter.value);\n                    } else {\n                        request.input(index, parameter);\n                    }\n                });\n            }\n            request.query(query, (err: any, result: any) => {\n\n                const resolveChain = () => {\n                    if (promiseIndex !== -1)\n                        this.queryResponsibilityChain.splice(promiseIndex, 1);\n                    if (waitingPromiseIndex !== -1)\n                        this.queryResponsibilityChain.splice(waitingPromiseIndex, 1);\n                    waitingOkay();\n                };\n\n                let promiseIndex = this.queryResponsibilityChain.indexOf(promise);\n                let waitingPromiseIndex = this.queryResponsibilityChain.indexOf(waitingPromise);\n                if (err) {\n                    this.driver.connection.logger.logQueryError(err, query, parameters, this);\n                    resolveChain();\n                    return fail(err);\n                }\n\n                ok(result.recordset);\n                resolveChain();\n            });\n            if (onEnd) request.on(\"done\", onEnd);\n            if (onError) request.on(\"error\", onError);\n            ok(request as ReadStream);\n        });\n        if (this.isTransactionActive)\n            this.queryResponsibilityChain.push(promise);\n\n        return promise;\n    }\n\n    /**\n     * Returns all available database names including system databases.\n     */\n    async getDatabases(): Promise<string[]> {\n        const results: ObjectLiteral[] = await this.query(`EXEC sp_databases`);\n        return results.map(result => result[\"DATABASE_NAME\"]);\n    }\n\n    /**\n     * Returns all available schema names including system schemas.\n     * If database parameter specified, returns schemas of that database.\n     */\n    async getSchemas(database?: string): Promise<string[]> {\n        const query = database ? `SELECT * FROM \"${database}\".\"sys\".\"schema\"` : `SELECT * FROM \"sys\".\"schemas\"`;\n        const results: ObjectLiteral[] = await this.query(query);\n        return results.map(result => result[\"name\"]);\n    }\n\n    /**\n     * Checks if database with the given name exist.\n     */\n    async hasDatabase(database: string): Promise<boolean> {\n        const result = await this.query(`SELECT DB_ID('${database}') as \"db_id\"`);\n        const dbId = result[0][\"db_id\"];\n        return !!dbId;\n    }\n\n    /**\n     * Checks if schema with the given name exist.\n     */\n    async hasSchema(schema: string): Promise<boolean> {\n        const result = await this.query(`SELECT SCHEMA_ID('${schema}') as \"schema_id\"`);\n        const schemaId = result[0][\"schema_id\"];\n        return !!schemaId;\n    }\n\n    /**\n     * Checks if table with the given name exist in the database.\n     */\n    async hasTable(tableOrName: Table|string): Promise<boolean> {\n        const parsedTableName = this.parseTableName(tableOrName);\n        const schema = parsedTableName.schema === \"SCHEMA_NAME()\" ? parsedTableName.schema : `'${parsedTableName.schema}'`;\n        const sql = `SELECT * FROM \"${parsedTableName.database}\".\"INFORMATION_SCHEMA\".\"TABLES\" WHERE \"TABLE_NAME\" = '${parsedTableName.name}' AND \"TABLE_SCHEMA\" = ${schema}`;\n        const result = await this.query(sql);\n        return result.length ? true : false;\n    }\n\n    /**\n     * Checks if column exist in the table.\n     */\n    async hasColumn(tableOrName: Table|string, columnName: string): Promise<boolean> {\n        const parsedTableName = this.parseTableName(tableOrName);\n        const schema = parsedTableName.schema === \"SCHEMA_NAME()\" ? parsedTableName.schema : `'${parsedTableName.schema}'`;\n        const sql = `SELECT * FROM \"${parsedTableName.database}\".\"INFORMATION_SCHEMA\".\"TABLES\" WHERE \"TABLE_NAME\" = '${parsedTableName.name}' AND \"COLUMN_NAME\" = '${columnName}' AND \"TABLE_SCHEMA\" = ${schema}`;\n        const result = await this.query(sql);\n        return result.length ? true : false;\n    }\n\n    /**\n     * Creates a new database.\n     */\n    async createDatabase(database: string, ifNotExist?: boolean): Promise<void> {\n        const up = ifNotExist ? `IF DB_ID('${database}') IS NULL CREATE DATABASE \"${database}\"` : `CREATE DATABASE \"${database}\"`;\n        const down = `DROP DATABASE \"${database}\"`;\n        await this.executeQueries(new Query(up), new Query(down));\n    }\n\n    /**\n     * Drops database.\n     */\n    async dropDatabase(database: string, ifExist?: boolean): Promise<void> {\n        const up = ifExist ? `IF DB_ID('${database}') IS NOT NULL DROP DATABASE \"${database}\"` : `DROP DATABASE \"${database}\"`;\n        const down = `CREATE DATABASE \"${database}\"`;\n        await this.executeQueries(new Query(up), new Query(down));\n    }\n\n    /**\n     * Creates table schema.\n     * If database name also specified (e.g. 'dbName.schemaName') schema will be created in specified database.\n     */\n    async createSchema(schemaPath: string, ifNotExist?: boolean): Promise<void> {\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        if (schemaPath.indexOf(\".\") === -1) {\n            const upQuery = ifNotExist ? `IF SCHEMA_ID('${schemaPath}') IS NULL BEGIN EXEC ('CREATE SCHEMA \"${schemaPath}\"') END` : `CREATE SCHEMA \"${schemaPath}\"`;\n            upQueries.push(new Query(upQuery));\n            downQueries.push(new Query(`DROP SCHEMA \"${schemaPath}\"`));\n\n        } else {\n            const dbName = schemaPath.split(\".\")[0];\n            const schema = schemaPath.split(\".\")[1];\n            const currentDB = await this.getCurrentDatabase();\n            upQueries.push(new Query(`USE \"${dbName}\"`));\n            downQueries.push(new Query(`USE \"${currentDB}\"`));\n\n            const upQuery = ifNotExist ? `IF SCHEMA_ID('${schema}') IS NULL BEGIN EXEC ('CREATE SCHEMA \"${schema}\"') END` : `CREATE SCHEMA \"${schema}\"`;\n            upQueries.push(new Query(upQuery));\n            downQueries.push(new Query(`DROP SCHEMA \"${schema}\"`));\n\n            upQueries.push(new Query(`USE \"${currentDB}\"`));\n            downQueries.push(new Query(`USE \"${dbName}\"`));\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Drops table schema.\n     * If database name also specified (e.g. 'dbName.schemaName') schema will be dropped in specified database.\n     */\n    async dropSchema(schemaPath: string, ifExist?: boolean): Promise<void> {\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        if (schemaPath.indexOf(\".\") === -1) {\n            const upQuery = ifExist ? `IF SCHEMA_ID('${schemaPath}') IS NULL BEGIN EXEC ('DROP SCHEMA \"${schemaPath}\"') END` : `DROP SCHEMA \"${schemaPath}\"`;\n            upQueries.push(new Query(upQuery));\n            downQueries.push(new Query(`CREATE SCHEMA \"${schemaPath}\"`));\n\n        } else {\n            const dbName = schemaPath.split(\".\")[0];\n            const schema = schemaPath.split(\".\")[1];\n            const currentDB = await this.getCurrentDatabase();\n            upQueries.push(new Query(`USE \"${dbName}\"`));\n            downQueries.push(new Query(`USE \"${currentDB}\"`));\n\n            const upQuery = ifExist ? `IF SCHEMA_ID('${schema}') IS NULL BEGIN EXEC ('DROP SCHEMA \"${schema}\"') END` : `DROP SCHEMA \"${schema}\"`;\n            upQueries.push(new Query(upQuery));\n            downQueries.push(new Query(`CREATE SCHEMA \"${schema}\"`));\n\n            upQueries.push(new Query(`USE \"${currentDB}\"`));\n            downQueries.push(new Query(`USE \"${dbName}\"`));\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Creates a new table.\n     */\n    async createTable(table: Table, ifNotExist: boolean = false, createForeignKeys: boolean = true, createIndices: boolean = true): Promise<void> {\n        if (ifNotExist) {\n            const isTableExist = await this.hasTable(table);\n            if (isTableExist) return Promise.resolve();\n        }\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        upQueries.push(this.createTableSql(table, createForeignKeys));\n        downQueries.push(this.dropTableSql(table));\n\n        // if createForeignKeys is true, we must drop created foreign keys in down query.\n        // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.\n        if (createForeignKeys)\n            table.foreignKeys.forEach(foreignKey => downQueries.push(this.dropForeignKeySql(table, foreignKey)));\n\n        if (createIndices) {\n            table.indices.forEach(index => {\n\n                // new index may be passed without name. In this case we generate index name manually.\n                if (!index.name)\n                    index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n                upQueries.push(this.createIndexSql(table, index));\n                downQueries.push(this.dropIndexSql(table, index));\n            });\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Drops the table.\n     */\n    async dropTable(tableOrName: Table|string, ifExist?: boolean, dropForeignKeys: boolean = true, dropIndices: boolean = true): Promise<void> {\n        if (ifExist) {\n            const isTableExist = await this.hasTable(tableOrName);\n            if (!isTableExist) return Promise.resolve();\n        }\n\n        // if dropTable called with dropForeignKeys = true, we must create foreign keys in down query.\n        const createForeignKeys: boolean = dropForeignKeys;\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        // It needs because if table does not exist and dropForeignKeys or dropIndices is true, we don't need\n        // to perform drop queries for foreign keys and indices.\n\n        if (dropIndices) {\n            table.indices.forEach(index => {\n                upQueries.push(this.dropIndexSql(table, index));\n                downQueries.push(this.createIndexSql(table, index));\n            });\n        }\n\n        // if dropForeignKeys is true, we just drop the table, otherwise we also drop table foreign keys.\n        // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.\n        if (dropForeignKeys)\n            table.foreignKeys.forEach(foreignKey => upQueries.push(this.dropForeignKeySql(table, foreignKey)));\n\n        upQueries.push(this.dropTableSql(table));\n        downQueries.push(this.createTableSql(table, createForeignKeys));\n\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Creates a new view.\n     */\n    async createView(view: View): Promise<void> {\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n        upQueries.push(this.createViewSql(view));\n        upQueries.push(await this.insertViewDefinitionSql(view));\n        downQueries.push(this.dropViewSql(view));\n        downQueries.push(await this.deleteViewDefinitionSql(view));\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Drops the view.\n     */\n    async dropView(target: View|string): Promise<void> {\n        const viewName = target instanceof View ? target.name : target;\n        const view = await this.getCachedView(viewName);\n\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n        upQueries.push(await this.deleteViewDefinitionSql(view));\n        upQueries.push(this.dropViewSql(view));\n        downQueries.push(await this.insertViewDefinitionSql(view));\n        downQueries.push(this.createViewSql(view));\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Renames a table.\n     */\n    async renameTable(oldTableOrName: Table|string, newTableName: string): Promise<void> {\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n        const oldTable = oldTableOrName instanceof Table ? oldTableOrName : await this.getCachedTable(oldTableOrName);\n        let newTable = oldTable.clone();\n\n        // we need database name and schema name to rename FK constraints\n        let dbName: string|undefined = undefined;\n        let schemaName: string|undefined = undefined;\n        let oldTableName: string = oldTable.name;\n        const splittedName = oldTable.name.split(\".\");\n        if (splittedName.length === 3) {\n            dbName = splittedName[0];\n            oldTableName = splittedName[2];\n            if (splittedName[1] !== \"\")\n                schemaName = splittedName[1];\n\n        } else if (splittedName.length === 2) {\n            schemaName = splittedName[0];\n            oldTableName = splittedName[1];\n        }\n\n        newTable.name = this.driver.buildTableName(newTableName, schemaName, dbName);\n\n        // if we have tables with database which differs from database specified in config, we must change currently used database.\n        // This need because we can not rename objects from another database.\n        const currentDB = await this.getCurrentDatabase();\n        if (dbName && dbName !== currentDB) {\n            upQueries.push(new Query(`USE \"${dbName}\"`));\n            downQueries.push(new Query(`USE \"${currentDB}\"`));\n        }\n\n        // rename table\n        upQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(oldTable, true)}\", \"${newTableName}\"`));\n        downQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(newTable, true)}\", \"${oldTableName}\"`));\n\n        // rename primary key constraint\n        if (newTable.primaryColumns.length > 0) {\n            const columnNames = newTable.primaryColumns.map(column => column.name);\n\n            const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);\n            const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);\n\n            // rename primary constraint\n            upQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(newTable, true)}.${oldPkName}\", \"${newPkName}\"`));\n            downQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(newTable, true)}.${newPkName}\", \"${oldPkName}\"`));\n        }\n\n        // rename unique constraints\n        newTable.uniques.forEach(unique => {\n            // build new constraint name\n            const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);\n\n            // build queries\n            upQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(newTable, true)}.${unique.name}\", \"${newUniqueName}\"`));\n            downQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(newTable, true)}.${newUniqueName}\", \"${unique.name}\"`));\n\n            // replace constraint name\n            unique.name = newUniqueName;\n        });\n\n        // rename index constraints\n        newTable.indices.forEach(index => {\n            // build new constraint name\n            const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n\n            // build queries\n            upQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(newTable, true)}.${index.name}\", \"${newIndexName}\", \"INDEX\"`));\n            downQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(newTable, true)}.${newIndexName}\", \"${index.name}\", \"INDEX\"`));\n\n            // replace constraint name\n            index.name = newIndexName;\n        });\n\n        // rename foreign key constraints\n        newTable.foreignKeys.forEach(foreignKey => {\n            // build new constraint name\n            const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames);\n\n            // build queries\n            upQueries.push(new Query(`EXEC sp_rename \"${this.buildForeignKeyName(foreignKey.name!, schemaName, dbName)}\", \"${newForeignKeyName}\"`));\n            downQueries.push(new Query(`EXEC sp_rename \"${this.buildForeignKeyName(newForeignKeyName, schemaName, dbName)}\", \"${foreignKey.name}\"`));\n\n            // replace constraint name\n            foreignKey.name = newForeignKeyName;\n        });\n\n        // change currently used database back to default db.\n        if (dbName && dbName !== currentDB) {\n            upQueries.push(new Query(`USE \"${currentDB}\"`));\n            downQueries.push(new Query(`USE \"${dbName}\"`));\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n\n        // rename old table and replace it in cached tabled;\n        oldTable.name = newTable.name;\n        this.replaceCachedTable(oldTable, newTable);\n    }\n\n    /**\n     * Creates a new column from the column in the table.\n     */\n    async addColumn(tableOrName: Table|string, column: TableColumn): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const clonedTable = table.clone();\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(table, column, false, false)}`));\n        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN \"${column.name}\"`));\n\n        // create or update primary key constraint\n        if (column.isPrimary) {\n            const primaryColumns = clonedTable.primaryColumns;\n            // if table already have primary key, me must drop it and recreate again\n            if (primaryColumns.length > 0) {\n                const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n            }\n\n            primaryColumns.push(column);\n            const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n            const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n        }\n\n        // create column index\n        const columnIndex = clonedTable.indices.find(index => index.columnNames.length === 1 && index.columnNames[0] === column.name);\n        if (columnIndex) {\n            upQueries.push(this.createIndexSql(table, columnIndex));\n            downQueries.push(this.dropIndexSql(table, columnIndex));\n        }\n\n        // create unique constraint\n        if (column.isUnique) {\n            const uniqueConstraint = new TableUnique({\n               name: this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n               columnNames: [column.name]\n            });\n            clonedTable.uniques.push(uniqueConstraint);\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${uniqueConstraint.name}\" UNIQUE (\"${column.name}\")`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${uniqueConstraint.name}\"`));\n        }\n\n        // create default constraint\n        if (column.default !== null && column.default !== undefined) {\n            const defaultName = this.connection.namingStrategy.defaultConstraintName(table.name, column.name);\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${defaultName}\" DEFAULT ${column.default} FOR \"${column.name}\"`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${defaultName}\"`));\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n\n        clonedTable.addColumn(column);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Creates a new columns from the column in the table.\n     */\n    async addColumns(tableOrName: Table|string, columns: TableColumn[]): Promise<void> {\n        await PromiseUtils.runInSequence(columns, column => this.addColumn(tableOrName, column));\n    }\n\n    /**\n     * Renames column in the given table.\n     */\n    async renameColumn(tableOrName: Table|string, oldTableColumnOrName: TableColumn|string, newTableColumnOrName: TableColumn|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(c => c.name === oldTableColumnOrName);\n        if (!oldColumn)\n            throw new Error(`Column \"${oldTableColumnOrName}\" was not found in the \"${table.name}\" table.`);\n\n        let newColumn: TableColumn|undefined = undefined;\n        if (newTableColumnOrName instanceof TableColumn) {\n            newColumn = newTableColumnOrName;\n        } else {\n            newColumn = oldColumn.clone();\n            newColumn.name = newTableColumnOrName;\n        }\n\n        await this.changeColumn(table, oldColumn, newColumn);\n    }\n\n    /**\n     * Changes a column in the table.\n     */\n    async changeColumn(tableOrName: Table|string, oldTableColumnOrName: TableColumn|string, newColumn: TableColumn): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        let clonedTable = table.clone();\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        const oldColumn = oldTableColumnOrName instanceof TableColumn\n            ? oldTableColumnOrName\n            : table.columns.find(column => column.name === oldTableColumnOrName);\n        if (!oldColumn)\n            throw new Error(`Column \"${oldTableColumnOrName}\" was not found in the \"${table.name}\" table.`);\n\n        if ((newColumn.isGenerated !== oldColumn.isGenerated && newColumn.generationStrategy !== \"uuid\") || newColumn.type !== oldColumn.type || newColumn.length !== oldColumn.length) {\n            // SQL Server does not support changing of IDENTITY column, so we must drop column and recreate it again.\n            // Also, we recreate column if column type changed\n            await this.dropColumn(table, oldColumn);\n            await this.addColumn(table, newColumn);\n\n            // update cloned table\n            clonedTable = table.clone();\n\n        } else {\n            if (newColumn.name !== oldColumn.name) {\n\n                // we need database name and schema name to rename FK constraints\n                let dbName: string|undefined = undefined;\n                let schemaName: string|undefined = undefined;\n                const splittedName = table.name.split(\".\");\n                if (splittedName.length === 3) {\n                    dbName = splittedName[0];\n                    if (splittedName[1] !== \"\")\n                        schemaName = splittedName[1];\n\n                } else if (splittedName.length === 2) {\n                    schemaName = splittedName[0];\n                }\n\n                // if we have tables with database which differs from database specified in config, we must change currently used database.\n                // This need because we can not rename objects from another database.\n                const currentDB = await this.getCurrentDatabase();\n                if (dbName && dbName !== currentDB) {\n                    upQueries.push(new Query(`USE \"${dbName}\"`));\n                    downQueries.push(new Query(`USE \"${currentDB}\"`));\n                }\n\n                // rename the column\n                upQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(table, true)}.${oldColumn.name}\", \"${newColumn.name}\"`));\n                downQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(table, true)}.${newColumn.name}\", \"${oldColumn.name}\"`));\n\n                if (oldColumn.isPrimary === true) {\n                    const primaryColumns = clonedTable.primaryColumns;\n\n                    // build old primary constraint name\n                    const columnNames = primaryColumns.map(column => column.name);\n                    const oldPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n\n                    // replace old column name with new column name\n                    columnNames.splice(columnNames.indexOf(oldColumn.name), 1);\n                    columnNames.push(newColumn.name);\n\n                    // build new primary constraint name\n                    const newPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n\n                    // rename primary constraint\n                    upQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(clonedTable, true)}.${oldPkName}\", \"${newPkName}\"`));\n                    downQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(clonedTable, true)}.${newPkName}\", \"${oldPkName}\"`));\n                }\n\n                // rename index constraints\n                clonedTable.findColumnIndices(oldColumn).forEach(index => {\n                    // build new constraint name\n                    index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);\n                    index.columnNames.push(newColumn.name);\n                    const newIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);\n\n                    // build queries\n                    upQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(clonedTable, true)}.${index.name}\", \"${newIndexName}\", \"INDEX\"`));\n                    downQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(clonedTable, true)}.${newIndexName}\", \"${index.name}\", \"INDEX\"`));\n\n                    // replace constraint name\n                    index.name = newIndexName;\n                });\n\n                // rename foreign key constraints\n                clonedTable.findColumnForeignKeys(oldColumn).forEach(foreignKey => {\n                    // build new constraint name\n                    foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);\n                    foreignKey.columnNames.push(newColumn.name);\n                    const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames);\n\n                    // build queries\n                    upQueries.push(new Query(`EXEC sp_rename \"${this.buildForeignKeyName(foreignKey.name!, schemaName, dbName)}\", \"${newForeignKeyName}\"`));\n                    downQueries.push(new Query(`EXEC sp_rename \"${this.buildForeignKeyName(newForeignKeyName, schemaName, dbName)}\", \"${foreignKey.name}\"`));\n\n                    // replace constraint name\n                    foreignKey.name = newForeignKeyName;\n                });\n\n                // rename check constraints\n                clonedTable.findColumnChecks(oldColumn).forEach(check => {\n                    // build new constraint name\n                    check.columnNames!.splice(check.columnNames!.indexOf(oldColumn.name), 1);\n                    check.columnNames!.push(newColumn.name);\n                    const newCheckName = this.connection.namingStrategy.checkConstraintName(clonedTable, check.expression!);\n\n                    // build queries\n                    upQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(clonedTable, true)}.${check.name}\", \"${newCheckName}\"`));\n                    downQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(clonedTable, true)}.${newCheckName}\", \"${check.name}\"`));\n\n                    // replace constraint name\n                    check.name = newCheckName;\n                });\n\n                // rename unique constraints\n                clonedTable.findColumnUniques(oldColumn).forEach(unique => {\n                    // build new constraint name\n                    unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);\n                    unique.columnNames.push(newColumn.name);\n                    const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);\n\n                    // build queries\n                    upQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(clonedTable, true)}.${unique.name}\", \"${newUniqueName}\"`));\n                    downQueries.push(new Query(`EXEC sp_rename \"${this.escapePath(clonedTable, true)}.${newUniqueName}\", \"${unique.name}\"`));\n\n                    // replace constraint name\n                    unique.name = newUniqueName;\n                });\n\n                // change currently used database back to default db.\n                if (dbName && dbName !== currentDB) {\n                    upQueries.push(new Query(`USE \"${currentDB}\"`));\n                    downQueries.push(new Query(`USE \"${dbName}\"`));\n                }\n\n                // rename old column in the Table object\n                const oldTableColumn = clonedTable.columns.find(column => column.name === oldColumn.name);\n                clonedTable.columns[clonedTable.columns.indexOf(oldTableColumn!)].name = newColumn.name;\n                oldColumn.name = newColumn.name;\n            }\n\n            if (this.isColumnChanged(oldColumn, newColumn)) {\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN ${this.buildCreateColumnSql(table, newColumn, true, false)}`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN ${this.buildCreateColumnSql(table, oldColumn, true, false)}`));\n            }\n\n            if (newColumn.isPrimary !== oldColumn.isPrimary) {\n                const primaryColumns = clonedTable.primaryColumns;\n\n                // if primary column state changed, we must always drop existed constraint.\n                if (primaryColumns.length > 0) {\n                    const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                    const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                }\n\n                if (newColumn.isPrimary === true) {\n                    primaryColumns.push(newColumn);\n                    // update column in table\n                    const column = clonedTable.columns.find(column => column.name === newColumn.name);\n                    column!.isPrimary = true;\n                    const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                    const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n\n                } else {\n                    const primaryColumn = primaryColumns.find(c => c.name === newColumn.name);\n                    primaryColumns.splice(primaryColumns.indexOf(primaryColumn!), 1);\n\n                    // update column in table\n                    const column = clonedTable.columns.find(column => column.name === newColumn.name);\n                    column!.isPrimary = false;\n\n                    // if we have another primary keys, we must recreate constraint.\n                    if (primaryColumns.length > 0) {\n                        const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                        const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n                    }\n                }\n            }\n\n            if (newColumn.isUnique !== oldColumn.isUnique) {\n                if (newColumn.isUnique === true) {\n                    const uniqueConstraint = new TableUnique({\n                        name: this.connection.namingStrategy.uniqueConstraintName(table.name, [newColumn.name]),\n                        columnNames: [newColumn.name]\n                    });\n                    clonedTable.uniques.push(uniqueConstraint);\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${uniqueConstraint.name}\" UNIQUE (\"${newColumn.name}\")`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${uniqueConstraint.name}\"`));\n\n                } else {\n                    const uniqueConstraint = clonedTable.uniques.find(unique => {\n                        return unique.columnNames.length === 1 && !!unique.columnNames.find(columnName => columnName === newColumn.name);\n                    });\n                    clonedTable.uniques.splice(clonedTable.uniques.indexOf(uniqueConstraint!), 1);\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${uniqueConstraint!.name}\"`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${uniqueConstraint!.name}\" UNIQUE (\"${newColumn.name}\")`));\n                }\n            }\n\n            if (newColumn.default !== oldColumn.default) {\n                if (newColumn.default !== null && newColumn.default !== undefined) {\n                    const defaultName = this.connection.namingStrategy.defaultConstraintName(table.name, newColumn.name);\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${defaultName}\" DEFAULT ${newColumn.default} FOR \"${newColumn.name}\"`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${defaultName}\"`));\n\n                } else if (oldColumn.default !== null && oldColumn.default !== undefined) {\n                    const defaultName = this.connection.namingStrategy.defaultConstraintName(table.name, oldColumn.name);\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${defaultName}\"`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${defaultName}\" DEFAULT ${oldColumn.default} FOR \"${oldColumn.name}\"`));\n                }\n            }\n\n            await this.executeQueries(upQueries, downQueries);\n            this.replaceCachedTable(table, clonedTable);\n        }\n    }\n\n    /**\n     * Changes a column in the table.\n     */\n    async changeColumns(tableOrName: Table|string, changedColumns: { newColumn: TableColumn, oldColumn: TableColumn }[]): Promise<void> {\n        await PromiseUtils.runInSequence(changedColumns, changedColumn => this.changeColumn(tableOrName, changedColumn.oldColumn, changedColumn.newColumn));\n    }\n\n    /**\n     * Drops column in the table.\n     */\n    async dropColumn(tableOrName: Table|string, columnOrName: TableColumn|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const column = columnOrName instanceof TableColumn ? columnOrName : table.findColumnByName(columnOrName);\n        if (!column)\n            throw new Error(`Column \"${columnOrName}\" was not found in table \"${table.name}\"`);\n\n        const clonedTable = table.clone();\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        // drop primary key constraint\n        if (column.isPrimary) {\n            const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(column => column.name));\n            const columnNames = clonedTable.primaryColumns.map(primaryColumn => `\"${primaryColumn.name}\"`).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} DROP CONSTRAINT \"${pkName}\"`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n\n            // update column in table\n            const tableColumn = clonedTable.findColumnByName(column.name);\n            tableColumn!.isPrimary = false;\n\n            // if primary key have multiple columns, we must recreate it without dropped column\n            if (clonedTable.primaryColumns.length > 0) {\n                const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(column => column.name));\n                const columnNames = clonedTable.primaryColumns.map(primaryColumn => `\"${primaryColumn.name}\"`).join(\", \");\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} DROP CONSTRAINT \"${pkName}\"`));\n            }\n        }\n\n        // drop column index\n        const columnIndex = clonedTable.indices.find(index => index.columnNames.length === 1 && index.columnNames[0] === column.name);\n        if (columnIndex) {\n            clonedTable.indices.splice(clonedTable.indices.indexOf(columnIndex), 1);\n            upQueries.push(this.dropIndexSql(table, columnIndex));\n            downQueries.push(this.createIndexSql(table, columnIndex));\n        }\n\n        // drop column check\n        const columnCheck = clonedTable.checks.find(check => !!check.columnNames && check.columnNames.length === 1 && check.columnNames[0] === column.name);\n        if (columnCheck) {\n            clonedTable.checks.splice(clonedTable.checks.indexOf(columnCheck), 1);\n            upQueries.push(this.dropCheckConstraintSql(table, columnCheck));\n            downQueries.push(this.createCheckConstraintSql(table, columnCheck));\n        }\n\n        // drop column unique\n        const columnUnique = clonedTable.uniques.find(unique => unique.columnNames.length === 1 && unique.columnNames[0] === column.name);\n        if (columnUnique) {\n            clonedTable.uniques.splice(clonedTable.uniques.indexOf(columnUnique), 1);\n            upQueries.push(this.dropUniqueConstraintSql(table, columnUnique));\n            downQueries.push(this.createUniqueConstraintSql(table, columnUnique));\n        }\n\n        // drop default constraint\n        if (column.default !== null && column.default !== undefined) {\n            const defaultName = this.connection.namingStrategy.defaultConstraintName(table.name, column.name);\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${defaultName}\"`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${defaultName}\" DEFAULT ${column.default} FOR \"${column.name}\"`));\n        }\n\n        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN \"${column.name}\"`));\n        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(table, column, false, false)}`));\n\n        await this.executeQueries(upQueries, downQueries);\n\n        clonedTable.removeColumn(column);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Drops the columns in the table.\n     */\n    async dropColumns(tableOrName: Table|string, columns: TableColumn[]): Promise<void> {\n        await PromiseUtils.runInSequence(columns, column => this.dropColumn(tableOrName, column));\n    }\n\n    /**\n     * Creates a new primary key.\n     */\n    async createPrimaryKey(tableOrName: Table|string, columnNames: string[]): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const clonedTable = table.clone();\n\n        const up = this.createPrimaryKeySql(table, columnNames);\n\n        // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.\n        clonedTable.columns.forEach(column => {\n            if (columnNames.find(columnName => columnName === column.name))\n                column.isPrimary = true;\n        });\n        const down = this.dropPrimaryKeySql(clonedTable);\n\n        await this.executeQueries(up, down);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Updates composite primary keys.\n     */\n    async updatePrimaryKeys(tableOrName: Table|string, columns: TableColumn[]): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const clonedTable = table.clone();\n        const columnNames = columns.map(column => column.name);\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        // if table already have primary columns, we must drop them.\n        const primaryColumns = clonedTable.primaryColumns;\n        if (primaryColumns.length > 0) {\n            const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n            const columnNamesString = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNamesString})`));\n        }\n\n        // update columns in table.\n        clonedTable.columns\n            .filter(column => columnNames.indexOf(column.name) !== -1)\n            .forEach(column => column.isPrimary = true);\n\n        const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, columnNames);\n        const columnNamesString = columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNamesString})`));\n        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n\n        await this.executeQueries(upQueries, downQueries);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Drops a primary key.\n     */\n    async dropPrimaryKey(tableOrName: Table|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const up = this.dropPrimaryKeySql(table);\n        const down = this.createPrimaryKeySql(table, table.primaryColumns.map(column => column.name));\n        await this.executeQueries(up, down);\n        table.primaryColumns.forEach(column => {\n            column.isPrimary = false;\n        });\n    }\n\n    /**\n     * Creates a new unique constraint.\n     */\n    async createUniqueConstraint(tableOrName: Table|string, uniqueConstraint: TableUnique): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new unique constraint may be passed without name. In this case we generate unique name manually.\n        if (!uniqueConstraint.name)\n            uniqueConstraint.name = this.connection.namingStrategy.uniqueConstraintName(table.name, uniqueConstraint.columnNames);\n\n        const up = this.createUniqueConstraintSql(table, uniqueConstraint);\n        const down = this.dropUniqueConstraintSql(table, uniqueConstraint);\n        await this.executeQueries(up, down);\n        table.addUniqueConstraint(uniqueConstraint);\n    }\n\n    /**\n     * Creates a new unique constraints.\n     */\n    async createUniqueConstraints(tableOrName: Table|string, uniqueConstraints: TableUnique[]): Promise<void> {\n        const promises = uniqueConstraints.map(uniqueConstraint => this.createUniqueConstraint(tableOrName, uniqueConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Drops unique constraint.\n     */\n    async dropUniqueConstraint(tableOrName: Table|string, uniqueOrName: TableUnique|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const uniqueConstraint = uniqueOrName instanceof TableUnique ? uniqueOrName : table.uniques.find(u => u.name === uniqueOrName);\n        if (!uniqueConstraint)\n            throw new Error(`Supplied unique constraint was not found in table ${table.name}`);\n\n        const up = this.dropUniqueConstraintSql(table, uniqueConstraint);\n        const down = this.createUniqueConstraintSql(table, uniqueConstraint);\n        await this.executeQueries(up, down);\n        table.removeUniqueConstraint(uniqueConstraint);\n    }\n\n    /**\n     * Drops an unique constraints.\n     */\n    async dropUniqueConstraints(tableOrName: Table|string, uniqueConstraints: TableUnique[]): Promise<void> {\n        const promises = uniqueConstraints.map(uniqueConstraint => this.dropUniqueConstraint(tableOrName, uniqueConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Creates a new check constraint.\n     */\n    async createCheckConstraint(tableOrName: Table|string, checkConstraint: TableCheck): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new unique constraint may be passed without name. In this case we generate unique name manually.\n        if (!checkConstraint.name)\n            checkConstraint.name = this.connection.namingStrategy.checkConstraintName(table.name, checkConstraint.expression!);\n\n        const up = this.createCheckConstraintSql(table, checkConstraint);\n        const down = this.dropCheckConstraintSql(table, checkConstraint);\n        await this.executeQueries(up, down);\n        table.addCheckConstraint(checkConstraint);\n    }\n\n    /**\n     * Creates a new check constraints.\n     */\n    async createCheckConstraints(tableOrName: Table|string, checkConstraints: TableCheck[]): Promise<void> {\n        const promises = checkConstraints.map(checkConstraint => this.createCheckConstraint(tableOrName, checkConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Drops check constraint.\n     */\n    async dropCheckConstraint(tableOrName: Table|string, checkOrName: TableCheck|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const checkConstraint = checkOrName instanceof TableCheck ? checkOrName : table.checks.find(c => c.name === checkOrName);\n        if (!checkConstraint)\n            throw new Error(`Supplied check constraint was not found in table ${table.name}`);\n\n        const up = this.dropCheckConstraintSql(table, checkConstraint);\n        const down = this.createCheckConstraintSql(table, checkConstraint);\n        await this.executeQueries(up, down);\n        table.removeCheckConstraint(checkConstraint);\n    }\n\n    /**\n     * Drops check constraints.\n     */\n    async dropCheckConstraints(tableOrName: Table|string, checkConstraints: TableCheck[]): Promise<void> {\n        const promises = checkConstraints.map(checkConstraint => this.dropCheckConstraint(tableOrName, checkConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Creates a new exclusion constraint.\n     */\n    async createExclusionConstraint(tableOrName: Table|string, exclusionConstraint: TableExclusion): Promise<void> {\n        throw new Error(`SqlServer does not support exclusion constraints.`);\n    }\n\n    /**\n     * Creates a new exclusion constraints.\n     */\n    async createExclusionConstraints(tableOrName: Table|string, exclusionConstraints: TableExclusion[]): Promise<void> {\n        throw new Error(`SqlServer does not support exclusion constraints.`);\n    }\n\n    /**\n     * Drops exclusion constraint.\n     */\n    async dropExclusionConstraint(tableOrName: Table|string, exclusionOrName: TableExclusion|string): Promise<void> {\n        throw new Error(`SqlServer does not support exclusion constraints.`);\n    }\n\n    /**\n     * Drops exclusion constraints.\n     */\n    async dropExclusionConstraints(tableOrName: Table|string, exclusionConstraints: TableExclusion[]): Promise<void> {\n        throw new Error(`SqlServer does not support exclusion constraints.`);\n    }\n\n    /**\n     * Creates a new foreign key.\n     */\n    async createForeignKey(tableOrName: Table|string, foreignKey: TableForeignKey): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new FK may be passed without name. In this case we generate FK name manually.\n        if (!foreignKey.name)\n            foreignKey.name = this.connection.namingStrategy.foreignKeyName(table.name, foreignKey.columnNames);\n\n        const up = this.createForeignKeySql(table, foreignKey);\n        const down = this.dropForeignKeySql(table, foreignKey);\n        await this.executeQueries(up, down);\n        table.addForeignKey(foreignKey);\n    }\n\n    /**\n     * Creates a new foreign keys.\n     */\n    async createForeignKeys(tableOrName: Table|string, foreignKeys: TableForeignKey[]): Promise<void> {\n        const promises = foreignKeys.map(foreignKey => this.createForeignKey(tableOrName, foreignKey));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Drops a foreign key from the table.\n     */\n    async dropForeignKey(tableOrName: Table|string, foreignKeyOrName: TableForeignKey|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const foreignKey = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName : table.foreignKeys.find(fk => fk.name === foreignKeyOrName);\n        if (!foreignKey)\n            throw new Error(`Supplied foreign key was not found in table ${table.name}`);\n\n        const up = this.dropForeignKeySql(table, foreignKey);\n        const down = this.createForeignKeySql(table, foreignKey);\n        await this.executeQueries(up, down);\n        table.removeForeignKey(foreignKey);\n    }\n\n    /**\n     * Drops a foreign keys from the table.\n     */\n    async dropForeignKeys(tableOrName: Table|string, foreignKeys: TableForeignKey[]): Promise<void> {\n        const promises = foreignKeys.map(foreignKey => this.dropForeignKey(tableOrName, foreignKey));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Creates a new index.\n     */\n    async createIndex(tableOrName: Table|string, index: TableIndex): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new index may be passed without name. In this case we generate index name manually.\n        if (!index.name)\n            index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n\n        const up = this.createIndexSql(table, index);\n        const down = this.dropIndexSql(table, index);\n        await this.executeQueries(up, down);\n        table.addIndex(index);\n    }\n\n    /**\n     * Creates a new indices\n     */\n    async createIndices(tableOrName: Table|string, indices: TableIndex[]): Promise<void> {\n        const promises = indices.map(index => this.createIndex(tableOrName, index));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Drops an index.\n     */\n    async dropIndex(tableOrName: Table|string, indexOrName: TableIndex|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const index = indexOrName instanceof TableIndex ? indexOrName : table.indices.find(i => i.name === indexOrName);\n        if (!index)\n            throw new Error(`Supplied index was not found in table ${table.name}`);\n\n        const up = this.dropIndexSql(table, index);\n        const down = this.createIndexSql(table, index);\n        await this.executeQueries(up, down);\n        table.removeIndex(index);\n    }\n\n    /**\n     * Drops an indices from the table.\n     */\n    async dropIndices(tableOrName: Table|string, indices: TableIndex[]): Promise<void> {\n        const promises = indices.map(index => this.dropIndex(tableOrName, index));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Clears all table contents.\n     * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n     */\n    async clearTable(tablePath: string): Promise<void> {\n        await this.query(`TRUNCATE TABLE ${this.escapePath(tablePath)}`);\n    }\n\n    /**\n     * Removes all tables from the currently connected database.\n     */\n    async clearDatabase(database?: string): Promise<void> {\n        if (database) {\n            const isDatabaseExist = await this.hasDatabase(database);\n            if (!isDatabaseExist)\n                return Promise.resolve();\n        }\n\n        await this.startTransaction();\n        try {\n            let allViewsSql = database\n                ? `SELECT * FROM \"${database}\".\"INFORMATION_SCHEMA\".\"VIEWS\"`\n                : `SELECT * FROM \"INFORMATION_SCHEMA\".\"VIEWS\"`;\n            const allViewsResults: ObjectLiteral[] = await this.query(allViewsSql);\n\n            await Promise.all(allViewsResults.map(viewResult => {\n                // 'DROP VIEW' does not allow specifying the database name as a prefix to the object name.\n                const dropTableSql = `DROP VIEW \"${viewResult[\"TABLE_SCHEMA\"]}\".\"${viewResult[\"TABLE_NAME\"]}\"`;\n                return this.query(dropTableSql);\n            }));\n\n            let allTablesSql = database\n                ? `SELECT * FROM \"${database}\".\"INFORMATION_SCHEMA\".\"TABLES\" WHERE \"TABLE_TYPE\" = 'BASE TABLE'`\n                : `SELECT * FROM \"INFORMATION_SCHEMA\".\"TABLES\" WHERE \"TABLE_TYPE\" = 'BASE TABLE'`;\n            const allTablesResults: ObjectLiteral[] = await this.query(allTablesSql);\n            await Promise.all(allTablesResults.map(async tablesResult => {\n                // const tableName = database ? `\"${tablesResult[\"TABLE_CATALOG\"]}\".\"sys\".\"foreign_keys\"` : `\"sys\".\"foreign_keys\"`;\n                const dropForeignKeySql = `SELECT 'ALTER TABLE \"${tablesResult[\"TABLE_CATALOG\"]}\".\"' + OBJECT_SCHEMA_NAME(\"fk\".\"parent_object_id\", DB_ID('${tablesResult[\"TABLE_CATALOG\"]}')) + '\".\"' + OBJECT_NAME(\"fk\".\"parent_object_id\", DB_ID('${tablesResult[\"TABLE_CATALOG\"]}')) + '\" ` +\n                    `DROP CONSTRAINT \"' + \"fk\".\"name\" + '\"' as \"query\" FROM \"${tablesResult[\"TABLE_CATALOG\"]}\".\"sys\".\"foreign_keys\" AS \"fk\" ` +\n                    `WHERE \"fk\".\"referenced_object_id\" = OBJECT_ID('\"${tablesResult[\"TABLE_CATALOG\"]}\".\"${tablesResult[\"TABLE_SCHEMA\"]}\".\"${tablesResult[\"TABLE_NAME\"]}\"')`;\n                const dropFkQueries: ObjectLiteral[] = await this.query(dropForeignKeySql);\n                return Promise.all(dropFkQueries.map(result => result[\"query\"]).map(dropQuery => this.query(dropQuery)));\n            }));\n            await Promise.all(allTablesResults.map(tablesResult => {\n                const dropTableSql = `DROP TABLE \"${tablesResult[\"TABLE_CATALOG\"]}\".\"${tablesResult[\"TABLE_SCHEMA\"]}\".\"${tablesResult[\"TABLE_NAME\"]}\"`;\n                return this.query(dropTableSql);\n            }));\n\n            await this.commitTransaction();\n\n        } catch (error) {\n            try { // we throw original error even if rollback thrown an error\n                await this.rollbackTransaction();\n            } catch (rollbackError) { }\n            throw error;\n        }\n    }\n\n    // -------------------------------------------------------------------------\n    // Protected Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Return current database.\n     */\n    protected async getCurrentDatabase(): Promise<string> {\n        const currentDBQuery = await this.query(`SELECT DB_NAME() AS \"db_name\"`);\n        return currentDBQuery[0][\"db_name\"];\n    }\n\n    /**\n     * Return current schema.\n     */\n    protected async getCurrentSchema(): Promise<string> {\n        const currentSchemaQuery = await this.query(`SELECT SCHEMA_NAME() AS \"schema_name\"`);\n        return currentSchemaQuery[0][\"schema_name\"];\n    }\n\n    protected async loadViews(viewPaths: string[]): Promise<View[]> {\n        const hasTable = await this.hasTable(this.getTypeormMetadataTableName());\n        if (!hasTable)\n            return Promise.resolve([]);\n\n        const currentSchema = await this.getCurrentSchema();\n        const currentDatabase = await this.getCurrentDatabase();\n\n        const extractTableSchemaAndName = (tableName: string): string[] => {\n            let [database, schema, name] = tableName.split(\".\");\n            // if name is empty, it means that tableName have only schema name and table name or only table name\n            if (!name) {\n                // if schema is empty, it means tableName have only name of a table. Otherwise it means that we have \"schemaName\".\"tableName\" string.\n                if (!schema) {\n                    name = database;\n                    schema = this.driver.options.schema || currentSchema;\n\n                } else {\n                    name = schema;\n                    schema = database;\n                }\n            } else if (schema === \"\") {\n                schema = this.driver.options.schema || currentSchema;\n            }\n\n            return [schema, name];\n        };\n\n        const dbNames = viewPaths\n            .filter(viewPath => viewPath.split(\".\").length === 3)\n            .map(viewPath => viewPath.split(\".\")[0]);\n\n        if (this.driver.database && !dbNames.find(dbName => dbName === this.driver.database))\n            dbNames.push(this.driver.database);\n\n        const viewsCondition = viewPaths.map(viewPath => {\n            const [schema, name] = extractTableSchemaAndName(viewPath);\n            return `(\"T\".\"SCHEMA\" = '${schema}' AND \"T\".\"NAME\" = '${name}')`;\n        }).join(\" OR \");\n\n        const query = dbNames.map(dbName => {\n            return `SELECT \"T\".*, \"V\".\"CHECK_OPTION\" FROM ${this.escapePath(this.getTypeormMetadataTableName())} \"t\" ` +\n                `INNER JOIN \"${dbName}\".\"INFORMATION_SCHEMA\".\"VIEWS\" \"V\" ON \"V\".\"TABLE_SCHEMA\" = \"T\".\"SCHEMA\" AND \"v\".\"TABLE_NAME\" = \"T\".\"NAME\" WHERE \"T\".\"TYPE\" = 'VIEW' ${viewsCondition ? `AND (${viewsCondition})` : \"\"}`;\n        }).join(\" UNION ALL \");\n\n        const dbViews = await this.query(query);\n        return dbViews.map((dbView: any) => {\n            const view = new View();\n            const db = dbView[\"TABLE_CATALOG\"] === currentDatabase ? undefined : dbView[\"TABLE_CATALOG\"];\n            const schema = dbView[\"schema\"] === currentSchema && !this.driver.options.schema ? undefined : dbView[\"schema\"];\n            view.name = this.driver.buildTableName(dbView[\"name\"], schema, db);\n            view.expression = dbView[\"value\"];\n            return view;\n        });\n    }\n\n    /**\n     * Loads all tables (with given names) from the database and creates a Table from them.\n     */\n    protected async loadTables(tableNames: string[]): Promise<Table[]> {\n\n        // if no tables given then no need to proceed\n        if (!tableNames || !tableNames.length)\n            return [];\n\n        const schemaNames: string[] = [];\n        const currentSchema = await this.getCurrentSchema();\n        const currentDatabase = await this.getCurrentDatabase();\n\n        const extractTableSchemaAndName = (tableName: string): string[] => {\n            let [database, schema, name] = tableName.split(\".\");\n            // if name is empty, it means that tableName have only schema name and table name or only table name\n            if (!name) {\n                // if schema is empty, it means tableName have only name of a table. Otherwise it means that we have \"schemaName\".\"tableName\" string.\n                if (!schema) {\n                    name = database;\n                    schema = this.driver.options.schema || currentSchema;\n\n                } else {\n                    name = schema;\n                    schema = database;\n                }\n            } else if (schema === \"\") {\n                schema = this.driver.options.schema || currentSchema;\n            }\n\n            return [schema, name];\n        };\n\n        tableNames.filter(tablePath => tablePath.indexOf(\".\") !== -1)\n            .forEach(tablePath => {\n                if (tablePath.split(\".\").length === 3) {\n                    if (tablePath.split(\".\")[1] !== \"\")\n                        schemaNames.push(tablePath.split(\".\")[1]);\n                } else {\n                    schemaNames.push(tablePath.split(\".\")[0]);\n                }\n            });\n        schemaNames.push(this.driver.options.schema || currentSchema);\n\n        const dbNames = tableNames\n            .filter(tablePath => tablePath.split(\".\").length === 3)\n            .map(tablePath => tablePath.split(\".\")[0]);\n        if (this.driver.database && !dbNames.find(dbName => dbName === this.driver.database))\n            dbNames.push(this.driver.database);\n\n        // load tables, columns, indices and foreign keys\n        const schemaNamesString = schemaNames.map(name => \"'\" + name + \"'\").join(\", \");\n\n        const tablesCondition = tableNames.map(tableName => {\n            const [schema, name] = extractTableSchemaAndName(tableName);\n            return `(\"TABLE_SCHEMA\" = '${schema}' AND \"TABLE_NAME\" = '${name}')`;\n        }).join(\" OR \");\n\n        const tablesSql = dbNames.map(dbName => {\n            return `SELECT * FROM \"${dbName}\".\"INFORMATION_SCHEMA\".\"TABLES\" WHERE ` + tablesCondition;\n        }).join(\" UNION ALL \");\n\n        const columnsSql = dbNames.map(dbName => {\n            return `SELECT * FROM \"${dbName}\".\"INFORMATION_SCHEMA\".\"COLUMNS\" WHERE ` + tablesCondition;\n        }).join(\" UNION ALL \");\n\n        const constraintsCondition = tableNames.map(tableName => {\n            const [schema, name] = extractTableSchemaAndName(tableName);\n            return `(\"columnUsages\".\"TABLE_SCHEMA\" = '${schema}' AND \"columnUsages\".\"TABLE_NAME\" = '${name}' ` +\n             `AND \"tableConstraints\".\"TABLE_SCHEMA\" = '${schema}' AND \"tableConstraints\".\"TABLE_NAME\" = '${name}')`;\n        }).join(\" OR \");\n\n        const constraintsSql = dbNames.map(dbName => {\n            return `SELECT \"columnUsages\".*, \"tableConstraints\".\"CONSTRAINT_TYPE\", \"chk\".\"definition\" ` +\n                `FROM \"${dbName}\".\"INFORMATION_SCHEMA\".\"CONSTRAINT_COLUMN_USAGE\" \"columnUsages\" ` +\n                `INNER JOIN \"${dbName}\".\"INFORMATION_SCHEMA\".\"TABLE_CONSTRAINTS\" \"tableConstraints\" ON \"tableConstraints\".\"CONSTRAINT_NAME\" = \"columnUsages\".\"CONSTRAINT_NAME\" ` +\n                `LEFT JOIN \"${dbName}\".\"sys\".\"check_constraints\" \"chk\" ON \"chk\".\"name\" = \"columnUsages\".\"CONSTRAINT_NAME\" ` +\n                `WHERE (${constraintsCondition}) AND \"tableConstraints\".\"CONSTRAINT_TYPE\" IN ('PRIMARY KEY', 'UNIQUE', 'CHECK')`;\n        }).join(\" UNION ALL \");\n\n        const foreignKeysSql = dbNames.map(dbName => {\n            return `SELECT \"fk\".\"name\" AS \"FK_NAME\", '${dbName}' AS \"TABLE_CATALOG\", \"s1\".\"name\" AS \"TABLE_SCHEMA\", \"t1\".\"name\" AS \"TABLE_NAME\", ` +\n                `\"col1\".\"name\" AS \"COLUMN_NAME\", \"s2\".\"name\" AS \"REF_SCHEMA\", \"t2\".\"name\" AS \"REF_TABLE\", \"col2\".\"name\" AS \"REF_COLUMN\", ` +\n                `\"fk\".\"delete_referential_action_desc\" AS \"ON_DELETE\", \"fk\".\"update_referential_action_desc\" AS \"ON_UPDATE\" ` +\n                `FROM \"${dbName}\".\"sys\".\"foreign_keys\" \"fk\" ` +\n                `INNER JOIN \"${dbName}\".\"sys\".\"foreign_key_columns\" \"fkc\" ON \"fkc\".\"constraint_object_id\" = \"fk\".\"object_id\" ` +\n                `INNER JOIN \"${dbName}\".\"sys\".\"tables\" \"t1\" ON \"t1\".\"object_id\" = \"fk\".\"parent_object_id\" ` +\n                `INNER JOIN \"${dbName}\".\"sys\".\"schemas\" \"s1\" ON \"s1\".\"schema_id\" = \"t1\".\"schema_id\" ` +\n                `INNER JOIN \"${dbName}\".\"sys\".\"tables\" \"t2\" ON \"t2\".\"object_id\" = \"fk\".\"referenced_object_id\" ` +\n                `INNER JOIN \"${dbName}\".\"sys\".\"schemas\" \"s2\" ON \"s2\".\"schema_id\" = \"t2\".\"schema_id\" ` +\n                `INNER JOIN \"${dbName}\".\"sys\".\"columns\" \"col1\" ON \"col1\".\"column_id\" = \"fkc\".\"parent_column_id\" AND \"col1\".\"object_id\" = \"fk\".\"parent_object_id\" ` +\n                `INNER JOIN \"${dbName}\".\"sys\".\"columns\" \"col2\" ON \"col2\".\"column_id\" = \"fkc\".\"referenced_column_id\" AND \"col2\".\"object_id\" = \"fk\".\"referenced_object_id\"`;\n        }).join(\" UNION ALL \");\n\n        const identityColumnsSql = dbNames.map(dbName => {\n            return `SELECT \"TABLE_CATALOG\", \"TABLE_SCHEMA\", \"COLUMN_NAME\", \"TABLE_NAME\" ` +\n                `FROM \"${dbName}\".\"INFORMATION_SCHEMA\".\"COLUMNS\" ` +\n                `WHERE COLUMNPROPERTY(object_id(\"TABLE_CATALOG\" + '.' + \"TABLE_SCHEMA\" + '.' + \"TABLE_NAME\"), \"COLUMN_NAME\", 'IsIdentity') = 1 AND \"TABLE_SCHEMA\" IN (${schemaNamesString})`;\n        }).join(\" UNION ALL \");\n\n        const dbCollationsSql = `SELECT \"NAME\", \"COLLATION_NAME\" FROM \"sys\".\"databases\"`;\n\n        const indicesSql = dbNames.map(dbName => {\n            return `SELECT '${dbName}' AS \"TABLE_CATALOG\", \"s\".\"name\" AS \"TABLE_SCHEMA\", \"t\".\"name\" AS \"TABLE_NAME\", ` +\n                `\"ind\".\"name\" AS \"INDEX_NAME\", \"col\".\"name\" AS \"COLUMN_NAME\", \"ind\".\"is_unique\" AS \"IS_UNIQUE\", \"ind\".\"filter_definition\" as \"CONDITION\" ` +\n                `FROM \"${dbName}\".\"sys\".\"indexes\" \"ind\" ` +\n                `INNER JOIN \"${dbName}\".\"sys\".\"index_columns\" \"ic\" ON \"ic\".\"object_id\" = \"ind\".\"object_id\" AND \"ic\".\"index_id\" = \"ind\".\"index_id\" ` +\n                `INNER JOIN \"${dbName}\".\"sys\".\"columns\" \"col\" ON \"col\".\"object_id\" = \"ic\".\"object_id\" AND \"col\".\"column_id\" = \"ic\".\"column_id\" ` +\n                `INNER JOIN \"${dbName}\".\"sys\".\"tables\" \"t\" ON \"t\".\"object_id\" = \"ind\".\"object_id\" ` +\n                `INNER JOIN \"${dbName}\".\"sys\".\"schemas\" \"s\" ON \"s\".\"schema_id\" = \"t\".\"schema_id\" ` +\n                `WHERE \"ind\".\"is_primary_key\" = 0 AND \"ind\".\"is_unique_constraint\" = 0 AND \"t\".\"is_ms_shipped\" = 0`;\n        }).join(\" UNION ALL \");\n\n        const [\n            dbTables,\n            dbColumns,\n            dbConstraints,\n            dbForeignKeys,\n            dbIdentityColumns,\n            dbCollations,\n            dbIndices\n        ]: ObjectLiteral[][] = await Promise.all([\n            this.query(tablesSql),\n            this.query(columnsSql),\n            this.query(constraintsSql),\n            this.query(foreignKeysSql),\n            this.query(identityColumnsSql),\n            this.query(dbCollationsSql),\n            this.query(indicesSql),\n        ]);\n\n        // if tables were not found in the db, no need to proceed\n        if (!dbTables.length)\n            return [];\n\n        // create table schemas for loaded tables\n        return await Promise.all(dbTables.map(async dbTable => {\n            const table = new Table();\n\n            // We do not need to join schema and database names, when db or schema is by default.\n            // In this case we need local variable `tableFullName` for below comparision.\n            const db = dbTable[\"TABLE_CATALOG\"] === currentDatabase ? undefined : dbTable[\"TABLE_CATALOG\"];\n            const schema = dbTable[\"TABLE_SCHEMA\"] === currentSchema && !this.driver.options.schema ? undefined : dbTable[\"TABLE_SCHEMA\"];\n            table.name = this.driver.buildTableName(dbTable[\"TABLE_NAME\"], schema, db);\n            const tableFullName = this.driver.buildTableName(dbTable[\"TABLE_NAME\"], dbTable[\"TABLE_SCHEMA\"], dbTable[\"TABLE_CATALOG\"]);\n            const defaultCollation = dbCollations.find(dbCollation => dbCollation[\"NAME\"] === dbTable[\"TABLE_CATALOG\"])!;\n\n            // create columns from the loaded columns\n            table.columns = dbColumns\n                .filter(dbColumn => this.driver.buildTableName(dbColumn[\"TABLE_NAME\"], dbColumn[\"TABLE_SCHEMA\"], dbColumn[\"TABLE_CATALOG\"]) === tableFullName)\n                .map(dbColumn => {\n                    const columnConstraints = dbConstraints.filter(dbConstraint => {\n                        return this.driver.buildTableName(dbConstraint[\"TABLE_NAME\"], dbConstraint[\"CONSTRAINT_SCHEMA\"], dbConstraint[\"CONSTRAINT_CATALOG\"]) === tableFullName\n                            && dbConstraint[\"COLUMN_NAME\"] === dbColumn[\"COLUMN_NAME\"];\n                    });\n\n                    const uniqueConstraint = columnConstraints.find(constraint => constraint[\"CONSTRAINT_TYPE\"] === \"UNIQUE\");\n                    const isConstraintComposite = uniqueConstraint\n                        ? !!dbConstraints.find(dbConstraint => dbConstraint[\"CONSTRAINT_TYPE\"] === \"UNIQUE\"\n                            && dbConstraint[\"CONSTRAINT_NAME\"] === uniqueConstraint[\"CONSTRAINT_NAME\"]\n                            && dbConstraint[\"COLUMN_NAME\"] !== dbColumn[\"COLUMN_NAME\"])\n                        : false;\n\n                    const isPrimary = !!columnConstraints.find(constraint =>  constraint[\"CONSTRAINT_TYPE\"] === \"PRIMARY KEY\");\n                    const isGenerated = !!dbIdentityColumns.find(column => {\n                        return this.driver.buildTableName(column[\"TABLE_NAME\"], column[\"TABLE_SCHEMA\"], column[\"TABLE_CATALOG\"]) === tableFullName\n                            && column[\"COLUMN_NAME\"] === dbColumn[\"COLUMN_NAME\"];\n                    });\n\n                    const tableColumn = new TableColumn();\n                    tableColumn.name = dbColumn[\"COLUMN_NAME\"];\n                    tableColumn.type = dbColumn[\"DATA_TYPE\"].toLowerCase();\n\n                    // check only columns that have length property\n                    if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type as ColumnType) !== -1 && dbColumn[\"CHARACTER_MAXIMUM_LENGTH\"]) {\n                        const length = dbColumn[\"CHARACTER_MAXIMUM_LENGTH\"].toString();\n                        if (length === \"-1\") {\n                            tableColumn.length = \"MAX\";\n                        } else {\n                            tableColumn.length = !this.isDefaultColumnLength(table, tableColumn, length) ? length : \"\";\n                        }\n                    }\n\n                    if (tableColumn.type === \"decimal\" || tableColumn.type === \"numeric\") {\n                        if (dbColumn[\"NUMERIC_PRECISION\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"NUMERIC_PRECISION\"]))\n                            tableColumn.precision = dbColumn[\"NUMERIC_PRECISION\"];\n                        if (dbColumn[\"NUMERIC_SCALE\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"NUMERIC_SCALE\"]))\n                            tableColumn.scale = dbColumn[\"NUMERIC_SCALE\"];\n                    }\n\n                    if (tableColumn.type === \"nvarchar\") {\n                        // Check if this is an enum\n                        const columnCheckConstraints = columnConstraints.filter(constraint => constraint[\"CONSTRAINT_TYPE\"] === \"CHECK\");\n                        if (columnCheckConstraints.length) {\n                            const isEnumRegexp = new RegExp(\"^\\\\(\\\\[\" + tableColumn.name + \"\\\\]='[^']+'(?: OR \\\\[\" + tableColumn.name + \"\\\\]='[^']+')*\\\\)$\");\n                            for (const checkConstraint of columnCheckConstraints) {\n                                if (isEnumRegexp.test(checkConstraint[\"definition\"])) {\n                                    // This is an enum constraint, make column into an enum\n                                    tableColumn.type = \"simple-enum\";\n                                    tableColumn.enum = [];\n                                    const enumValueRegexp = new RegExp(\"\\\\[\" + tableColumn.name + \"\\\\]='([^']+)'\", \"g\");\n                                    let result;\n                                    while ((result = enumValueRegexp.exec(checkConstraint[\"definition\"])) !== null) {\n                                        tableColumn.enum.unshift(result[1]);\n                                    }\n                                    // Skip other column constraints\n                                    break;\n                                }\n                            }\n                        }\n                    }\n\n                    tableColumn.default = dbColumn[\"COLUMN_DEFAULT\"] !== null && dbColumn[\"COLUMN_DEFAULT\"] !== undefined\n                        ? this.removeParenthesisFromDefault(dbColumn[\"COLUMN_DEFAULT\"])\n                        : undefined;\n                    tableColumn.isNullable = dbColumn[\"IS_NULLABLE\"] === \"YES\";\n                    tableColumn.isPrimary = isPrimary;\n                    tableColumn.isUnique = !!uniqueConstraint && !isConstraintComposite;\n                    tableColumn.isGenerated = isGenerated;\n                    if (isGenerated)\n                        tableColumn.generationStrategy = \"increment\";\n                    if (tableColumn.default === \"newsequentialid()\") {\n                        tableColumn.isGenerated = true;\n                        tableColumn.generationStrategy = \"uuid\";\n                        tableColumn.default = undefined;\n                    }\n\n                    // todo: unable to get default charset\n                    // tableColumn.charset = dbColumn[\"CHARACTER_SET_NAME\"];\n                    tableColumn.collation = dbColumn[\"COLLATION_NAME\"] === defaultCollation[\"COLLATION_NAME\"] ? undefined : dbColumn[\"COLLATION_NAME\"];\n\n                    if (tableColumn.type === \"datetime2\" || tableColumn.type === \"time\" || tableColumn.type === \"datetimeoffset\") {\n                        tableColumn.precision = !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"DATETIME_PRECISION\"]) ? dbColumn[\"DATETIME_PRECISION\"] : undefined;\n                    }\n\n                    return tableColumn;\n                });\n\n            // find unique constraints of table, group them by constraint name and build TableUnique.\n            const tableUniqueConstraints = OrmUtils.uniq(dbConstraints.filter(dbConstraint => {\n                return this.driver.buildTableName(dbConstraint[\"TABLE_NAME\"], dbConstraint[\"CONSTRAINT_SCHEMA\"], dbConstraint[\"CONSTRAINT_CATALOG\"]) === tableFullName\n                    && dbConstraint[\"CONSTRAINT_TYPE\"] === \"UNIQUE\";\n            }), dbConstraint => dbConstraint[\"CONSTRAINT_NAME\"]);\n\n            table.uniques = tableUniqueConstraints.map(constraint => {\n                const uniques = dbConstraints.filter(dbC => dbC[\"CONSTRAINT_NAME\"] === constraint[\"CONSTRAINT_NAME\"]);\n                return new TableUnique({\n                    name: constraint[\"CONSTRAINT_NAME\"],\n                    columnNames: uniques.map(u => u[\"COLUMN_NAME\"])\n                });\n            });\n\n            // find check constraints of table, group them by constraint name and build TableCheck.\n            const tableCheckConstraints = OrmUtils.uniq(dbConstraints.filter(dbConstraint => {\n                return this.driver.buildTableName(dbConstraint[\"TABLE_NAME\"], dbConstraint[\"CONSTRAINT_SCHEMA\"], dbConstraint[\"CONSTRAINT_CATALOG\"]) === tableFullName\n                    && dbConstraint[\"CONSTRAINT_TYPE\"] === \"CHECK\";\n            }), dbConstraint => dbConstraint[\"CONSTRAINT_NAME\"]);\n\n            table.checks = tableCheckConstraints.map(constraint => {\n                const checks = dbConstraints.filter(dbC => dbC[\"CONSTRAINT_NAME\"] === constraint[\"CONSTRAINT_NAME\"]);\n                return new TableCheck({\n                    name: constraint[\"CONSTRAINT_NAME\"],\n                    columnNames: checks.map(c => c[\"COLUMN_NAME\"]),\n                    expression: constraint[\"definition\"]\n                });\n            });\n\n            // find foreign key constraints of table, group them by constraint name and build TableForeignKey.\n            const tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys.filter(dbForeignKey => {\n                return this.driver.buildTableName(dbForeignKey[\"TABLE_NAME\"], dbForeignKey[\"TABLE_SCHEMA\"], dbForeignKey[\"TABLE_CATALOG\"]) === tableFullName;\n            }), dbForeignKey => dbForeignKey[\"FK_NAME\"]);\n\n            table.foreignKeys = tableForeignKeyConstraints.map(dbForeignKey => {\n                const foreignKeys = dbForeignKeys.filter(dbFk => dbFk[\"FK_NAME\"] === dbForeignKey[\"FK_NAME\"]);\n\n                // if referenced table located in currently used db and schema, we don't need to concat db and schema names to table name.\n                const db = dbForeignKey[\"TABLE_CATALOG\"] === currentDatabase ? undefined : dbForeignKey[\"TABLE_CATALOG\"];\n                const schema = dbForeignKey[\"REF_SCHEMA\"] === currentSchema ? undefined : dbForeignKey[\"REF_SCHEMA\"];\n                const referencedTableName = this.driver.buildTableName(dbForeignKey[\"REF_TABLE\"], schema, db);\n\n                return new TableForeignKey({\n                    name: dbForeignKey[\"FK_NAME\"],\n                    columnNames: foreignKeys.map(dbFk => dbFk[\"COLUMN_NAME\"]),\n                    referencedTableName: referencedTableName,\n                    referencedColumnNames: foreignKeys.map(dbFk => dbFk[\"REF_COLUMN\"]),\n                    onDelete: dbForeignKey[\"ON_DELETE\"].replace(\"_\", \" \"), // SqlServer returns NO_ACTION, instead of NO ACTION\n                    onUpdate: dbForeignKey[\"ON_UPDATE\"].replace(\"_\", \" \") // SqlServer returns NO_ACTION, instead of NO ACTION\n                });\n            });\n\n            // find index constraints of table, group them by constraint name and build TableIndex.\n            const tableIndexConstraints = OrmUtils.uniq(dbIndices.filter(dbIndex => {\n                return this.driver.buildTableName(dbIndex[\"TABLE_NAME\"], dbIndex[\"TABLE_SCHEMA\"], dbIndex[\"TABLE_CATALOG\"]) === tableFullName;\n            }), dbIndex => dbIndex[\"INDEX_NAME\"]);\n\n            table.indices = tableIndexConstraints.map(constraint => {\n                const indices = dbIndices.filter(index => {\n                    return index[\"TABLE_CATALOG\"] === constraint[\"TABLE_CATALOG\"]\n                        && index[\"TABLE_SCHEMA\"] === constraint[\"TABLE_SCHEMA\"]\n                        && index[\"TABLE_NAME\"] === constraint[\"TABLE_NAME\"]\n                        && index[\"INDEX_NAME\"] === constraint[\"INDEX_NAME\"];\n                });\n                return new TableIndex(<TableIndexOptions>{\n                    table: table,\n                    name: constraint[\"INDEX_NAME\"],\n                    columnNames: indices.map(i => i[\"COLUMN_NAME\"]),\n                    isUnique: constraint[\"IS_UNIQUE\"],\n                    where: constraint[\"CONDITION\"]\n                });\n            });\n\n            return table;\n        }));\n    }\n\n    /**\n     * Builds and returns SQL for create table.\n     */\n    protected createTableSql(table: Table, createForeignKeys?: boolean): Query {\n        const columnDefinitions = table.columns.map(column => this.buildCreateColumnSql(table, column, false, true)).join(\", \");\n        let sql = `CREATE TABLE ${this.escapePath(table)} (${columnDefinitions}`;\n\n        table.columns\n            .filter(column => column.isUnique)\n            .forEach(column => {\n                const isUniqueExist = table.uniques.some(unique => unique.columnNames.length === 1 && unique.columnNames[0] === column.name);\n                if (!isUniqueExist)\n                    table.uniques.push(new TableUnique({\n                        name: this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n                        columnNames: [column.name]\n                    }));\n            });\n\n        if (table.uniques.length > 0) {\n            const uniquesSql = table.uniques.map(unique => {\n                const uniqueName = unique.name ? unique.name : this.connection.namingStrategy.uniqueConstraintName(table.name, unique.columnNames);\n                const columnNames = unique.columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n                return `CONSTRAINT \"${uniqueName}\" UNIQUE (${columnNames})`;\n            }).join(\", \");\n\n            sql += `, ${uniquesSql}`;\n        }\n\n        if (table.checks.length > 0) {\n            const checksSql = table.checks.map(check => {\n                const checkName = check.name ? check.name : this.connection.namingStrategy.checkConstraintName(table.name, check.expression!);\n                return `CONSTRAINT \"${checkName}\" CHECK (${check.expression})`;\n            }).join(\", \");\n\n            sql += `, ${checksSql}`;\n        }\n\n        if (table.foreignKeys.length > 0 && createForeignKeys) {\n            const foreignKeysSql = table.foreignKeys.map(fk => {\n                const columnNames = fk.columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n                if (!fk.name)\n                    fk.name = this.connection.namingStrategy.foreignKeyName(table.name, fk.columnNames);\n                const referencedColumnNames = fk.referencedColumnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n\n                let constraint = `CONSTRAINT \"${fk.name}\" FOREIGN KEY (${columnNames}) REFERENCES ${this.escapePath(fk.referencedTableName)} (${referencedColumnNames})`;\n                if (fk.onDelete)\n                    constraint += ` ON DELETE ${fk.onDelete}`;\n                if (fk.onUpdate)\n                    constraint += ` ON UPDATE ${fk.onUpdate}`;\n\n                return constraint;\n            }).join(\", \");\n\n            sql += `, ${foreignKeysSql}`;\n        }\n\n        const primaryColumns = table.columns.filter(column => column.isPrimary);\n        if (primaryColumns.length > 0) {\n            const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, primaryColumns.map(column => column.name));\n            const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n            sql += `, CONSTRAINT \"${primaryKeyName}\" PRIMARY KEY (${columnNames})`;\n        }\n\n        sql += `)`;\n\n        return new Query(sql);\n    }\n\n    /**\n     * Builds drop table sql.\n     */\n    protected dropTableSql(tableOrName: Table|string, ifExist?: boolean): Query {\n        const query = ifExist ? `DROP TABLE IF EXISTS ${this.escapePath(tableOrName)}` : `DROP TABLE ${this.escapePath(tableOrName)}`;\n        return new Query(query);\n    }\n\n    protected createViewSql(view: View): Query {\n        if (typeof view.expression === \"string\") {\n            return new Query(`CREATE VIEW ${this.escapePath(view)} AS ${view.expression}`);\n        } else {\n            return new Query(`CREATE VIEW ${this.escapePath(view)} AS ${view.expression(this.connection).getQuery()}`);\n        }\n    }\n\n    protected async insertViewDefinitionSql(view: View): Promise<Query> {\n        const currentSchema = await this.getCurrentSchema();\n        const parsedTableName = this.parseTableName(view, currentSchema);\n        const expression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(this.connection).getQuery();\n        const [query, parameters] = this.connection.createQueryBuilder()\n            .insert()\n            .into(this.getTypeormMetadataTableName())\n            .values({ type: \"VIEW\", database: parsedTableName.database, schema: parsedTableName.schema, name: parsedTableName.name, value: expression })\n            .getQueryAndParameters();\n\n        return new Query(query, parameters);\n    }\n\n    /**\n     * Builds drop view sql.\n     */\n    protected dropViewSql(viewOrPath: View|string): Query {\n        return new Query(`DROP VIEW ${this.escapePath(viewOrPath)}`);\n    }\n\n    /**\n     * Builds remove view sql.\n     */\n    protected async deleteViewDefinitionSql(viewOrPath: View|string): Promise<Query> {\n        const currentSchema = await this.getCurrentSchema();\n        const parsedTableName = this.parseTableName(viewOrPath, currentSchema);\n\n        const qb = this.connection.createQueryBuilder();\n        const [query, parameters] = qb.delete()\n            .from(this.getTypeormMetadataTableName())\n            .where(`${qb.escape(\"type\")} = 'VIEW'`)\n            .andWhere(`${qb.escape(\"database\")} = :database`, { database: parsedTableName.database })\n            .andWhere(`${qb.escape(\"schema\")} = :schema`, { schema: parsedTableName.schema })\n            .andWhere(`${qb.escape(\"name\")} = :name`, { name: parsedTableName.name })\n            .getQueryAndParameters();\n\n        return new Query(query, parameters);\n    }\n\n    /**\n     * Builds create index sql.\n     */\n    protected createIndexSql(table: Table, index: TableIndex): Query {\n        const columns = index.columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n        return new Query(`CREATE ${index.isUnique ? \"UNIQUE \" : \"\"}INDEX \"${index.name}\" ON ${this.escapePath(table)} (${columns}) ${index.where ? \"WHERE \" + index.where : \"\"}`);\n    }\n\n    /**\n     * Builds drop index sql.\n     */\n    protected dropIndexSql(table: Table, indexOrName: TableIndex|string): Query {\n        let indexName = indexOrName instanceof TableIndex ? indexOrName.name : indexOrName;\n        return new Query(`DROP INDEX \"${indexName}\" ON ${this.escapePath(table)}`);\n    }\n\n    /**\n     * Builds create primary key sql.\n     */\n    protected createPrimaryKeySql(table: Table, columnNames: string[]): Query {\n        const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n        const columnNamesString = columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n        return new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${primaryKeyName}\" PRIMARY KEY (${columnNamesString})`);\n    }\n\n    /**\n     * Builds drop primary key sql.\n     */\n    protected dropPrimaryKeySql(table: Table): Query {\n        const columnNames = table.primaryColumns.map(column => column.name);\n        const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n        return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${primaryKeyName}\"`);\n    }\n\n    /**\n     * Builds create unique constraint sql.\n     */\n    protected createUniqueConstraintSql(table: Table, uniqueConstraint: TableUnique): Query {\n        const columnNames = uniqueConstraint.columnNames.map(column => `\"` + column + `\"`).join(\", \");\n        return new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${uniqueConstraint.name}\" UNIQUE (${columnNames})`);\n    }\n\n    /**\n     * Builds drop unique constraint sql.\n     */\n    protected dropUniqueConstraintSql(table: Table, uniqueOrName: TableUnique|string): Query {\n        const uniqueName = uniqueOrName instanceof TableUnique ? uniqueOrName.name : uniqueOrName;\n        return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${uniqueName}\"`);\n    }\n\n    /**\n     * Builds create check constraint sql.\n     */\n    protected createCheckConstraintSql(table: Table, checkConstraint: TableCheck): Query {\n        return new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${checkConstraint.name}\" CHECK (${checkConstraint.expression})`);\n    }\n\n    /**\n     * Builds drop check constraint sql.\n     */\n    protected dropCheckConstraintSql(table: Table, checkOrName: TableCheck|string): Query {\n        const checkName = checkOrName instanceof TableCheck ? checkOrName.name : checkOrName;\n        return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${checkName}\"`);\n    }\n\n    /**\n     * Builds create foreign key sql.\n     */\n    protected createForeignKeySql(table: Table, foreignKey: TableForeignKey): Query {\n        const columnNames = foreignKey.columnNames.map(column => `\"` + column + `\"`).join(\", \");\n        const referencedColumnNames = foreignKey.referencedColumnNames.map(column => `\"` + column + `\"`).join(\",\");\n        let sql = `ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${foreignKey.name}\" FOREIGN KEY (${columnNames}) ` +\n            `REFERENCES ${this.escapePath(foreignKey.referencedTableName)}(${referencedColumnNames})`;\n        if (foreignKey.onDelete)\n            sql += ` ON DELETE ${foreignKey.onDelete}`;\n        if (foreignKey.onUpdate)\n            sql += ` ON UPDATE ${foreignKey.onUpdate}`;\n\n        return new Query(sql);\n    }\n\n    /**\n     * Builds drop foreign key sql.\n     */\n    protected dropForeignKeySql(table: Table, foreignKeyOrName: TableForeignKey|string): Query {\n        const foreignKeyName = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName.name : foreignKeyOrName;\n        return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${foreignKeyName}\"`);\n    }\n\n    /**\n     * Escapes given table or View path.\n     */\n    protected escapePath(target: Table|View|string, disableEscape?: boolean): string {\n        let name = target instanceof Table || target instanceof View ? target.name : target;\n        if (this.driver.options.schema) {\n            if (name.indexOf(\".\") === -1) {\n                name = `${this.driver.options.schema}.${name}`;\n            } else if (name.split(\".\").length === 3) {\n                const splittedName = name.split(\".\");\n                const dbName = splittedName[0];\n                const tableName = splittedName[2];\n                name = `${dbName}.${this.driver.options.schema}.${tableName}`;\n            }\n        }\n\n        return name.split(\".\").map(i => {\n            // this condition need because 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 disableEscape ? i : `\"${i}\"`;\n        }).join(\".\");\n    }\n\n    protected parseTableName(target: Table|View|string, schema?: string) {\n        const tableName = (target instanceof Table || target instanceof View) ? target.name : target;\n        if (tableName.split(\".\").length === 3) {\n            return {\n                database: tableName.split(\".\")[0],\n                schema: tableName.split(\".\")[1] === \"\" ? schema || \"SCHEMA_NAME()\" : tableName.split(\".\")[1],\n                name: tableName.split(\".\")[2]\n            };\n        } else if (tableName.split(\".\").length === 2) {\n            return {\n                database: this.driver.database,\n                schema: tableName.split(\".\")[0],\n                name: tableName.split(\".\")[1]\n            };\n        } else {\n            return {\n                database: this.driver.database,\n                schema: this.driver.options.schema ? this.driver.options.schema : schema || \"SCHEMA_NAME()\",\n                name: tableName\n            };\n        }\n    }\n\n    /**\n     * Concat database name and schema name to the foreign key name.\n     * Needs because FK name is relevant to the schema and database.\n     */\n    protected buildForeignKeyName(fkName: string, schemaName: string|undefined, dbName: string|undefined): string {\n        let joinedFkName = fkName;\n        if (schemaName)\n            joinedFkName = schemaName + \".\" + joinedFkName;\n        if (dbName)\n            joinedFkName = dbName + \".\" + joinedFkName;\n\n        return joinedFkName;\n    }\n\n    /**\n     * Removes parenthesis around default value.\n     * Sql server returns default value with parenthesis around, e.g.\n     *  ('My text') - for string\n     *  ((1)) - for number\n     *  (newsequentialId()) - for function\n     */\n    protected removeParenthesisFromDefault(defaultValue: any): any {\n        if (defaultValue.substr(0, 1) !== \"(\")\n            return defaultValue;\n        const normalizedDefault = defaultValue.substr(1, defaultValue.lastIndexOf(\")\") - 1);\n        return this.removeParenthesisFromDefault(normalizedDefault);\n    }\n\n    /**\n     * Builds a query for create column.\n     */\n    protected buildCreateColumnSql(table: Table, column: TableColumn, skipIdentity: boolean, createDefault: boolean) {\n        let c = `\"${column.name}\" ${this.connection.driver.createFullType(column)}`;\n\n        if (column.enum)\n            c += \" CHECK( \" + column.name + \" IN (\" + column.enum.map(val => \"'\" + val + \"'\").join(\",\") + \") )\";\n\n        if (column.collation)\n            c += \" COLLATE \" + column.collation;\n\n        if (column.isNullable !== true)\n            c += \" NOT NULL\";\n\n        if (column.isGenerated === true && column.generationStrategy === \"increment\" && !skipIdentity) // don't use skipPrimary here since updates can update already exist primary without auto inc.\n            c += \" IDENTITY(1,1)\";\n\n        if (column.default !== undefined && column.default !== null && createDefault) {\n            // we create named constraint to be able to delete this constraint when column been dropped\n            const defaultName = this.connection.namingStrategy.defaultConstraintName(table.name, column.name);\n            c += ` CONSTRAINT \"${defaultName}\" DEFAULT ${column.default}`;\n        }\n\n        if (column.isGenerated && column.generationStrategy === \"uuid\" && !column.default) {\n            // we create named constraint to be able to delete this constraint when column been dropped\n            const defaultName = this.connection.namingStrategy.defaultConstraintName(table.name, column.name);\n            c += ` CONSTRAINT \"${defaultName}\" DEFAULT NEWSEQUENTIALID()`;\n        }\n        return c;\n    }\n\n    /**\n     * Converts MssqlParameter into real mssql parameter type.\n     */\n    protected mssqlParameterToNativeParameter(parameter: MssqlParameter): any {\n        switch (this.driver.normalizeType({ type: parameter.type as any })) {\n            case \"bit\":\n                return this.driver.mssql.Bit;\n            case \"bigint\":\n                return this.driver.mssql.BigInt;\n            case \"decimal\":\n                return this.driver.mssql.Decimal(...parameter.params);\n            case \"float\":\n                return this.driver.mssql.Float;\n            case \"int\":\n                return this.driver.mssql.Int;\n            case \"money\":\n                return this.driver.mssql.Money;\n            case \"numeric\":\n                return this.driver.mssql.Numeric(...parameter.params);\n            case \"smallint\":\n                return this.driver.mssql.SmallInt;\n            case \"smallmoney\":\n                return this.driver.mssql.SmallMoney;\n            case \"real\":\n                return this.driver.mssql.Real;\n            case \"tinyint\":\n                return this.driver.mssql.TinyInt;\n            case \"char\":\n                return this.driver.mssql.Char(...parameter.params);\n            case \"nchar\":\n                return this.driver.mssql.NChar(...parameter.params);\n            case \"text\":\n                return this.driver.mssql.Text;\n            case \"ntext\":\n                return this.driver.mssql.Ntext;\n            case \"varchar\":\n                return this.driver.mssql.VarChar(...parameter.params);\n            case \"nvarchar\":\n                return this.driver.mssql.NVarChar(...parameter.params);\n            case \"xml\":\n                return this.driver.mssql.Xml;\n            case \"time\":\n                return this.driver.mssql.Time(...parameter.params);\n            case \"date\":\n                return this.driver.mssql.Date;\n            case \"datetime\":\n                return this.driver.mssql.DateTime;\n            case \"datetime2\":\n                return this.driver.mssql.DateTime2(...parameter.params);\n            case \"datetimeoffset\":\n                return this.driver.mssql.DateTimeOffset(...parameter.params);\n            case \"smalldatetime\":\n                return this.driver.mssql.SmallDateTime;\n            case \"uniqueidentifier\":\n                return this.driver.mssql.UniqueIdentifier;\n            case \"variant\":\n                return this.driver.mssql.Variant;\n            case \"binary\":\n                return this.driver.mssql.Binary;\n            case \"varbinary\":\n                return this.driver.mssql.VarBinary(...parameter.params);\n            case \"image\":\n                return this.driver.mssql.Image;\n            case \"udt\":\n                return this.driver.mssql.UDT;\n            case \"rowversion\":\n                return this.driver.mssql.RowVersion;\n        }\n    }\n\n    /**\n     * Converts string literal of isolation level to enum.\n     * The underlying mssql driver requires an enum for the isolation level.\n     */\n    convertIsolationLevel(isolation: IsolationLevel) {\n        const ISOLATION_LEVEL = this.driver.mssql.ISOLATION_LEVEL;\n        switch (isolation) {\n            case \"READ UNCOMMITTED\":\n                return ISOLATION_LEVEL.READ_UNCOMMITTED;\n            case \"REPEATABLE READ\":\n                return ISOLATION_LEVEL.REPEATABLE_READ;\n            case \"SERIALIZABLE\":\n                return ISOLATION_LEVEL.SERIALIZABLE;\n\n            case \"READ COMMITTED\":\n            default:\n                return ISOLATION_LEVEL.READ_COMMITTED;\n        }\n    }\n\n}\n"],"sourceRoot":"../.."}