333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../browser/src/driver/mysql/MysqlQueryRunner.ts"],"names":[],"mappings":"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","file":"MysqlQueryRunner.js","sourcesContent":["import {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {TransactionAlreadyStartedError} from \"../../error/TransactionAlreadyStartedError\";\nimport {TransactionNotStartedError} from \"../../error/TransactionNotStartedError\";\nimport {TableColumn} from \"../../schema-builder/table/TableColumn\";\nimport {Table} from \"../../schema-builder/table/Table\";\nimport {TableForeignKey} from \"../../schema-builder/table/TableForeignKey\";\nimport {TableIndex} from \"../../schema-builder/table/TableIndex\";\nimport {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {View} from \"../../schema-builder/view/View\";\nimport {Query} from \"../Query\";\nimport {MysqlDriver} from \"./MysqlDriver\";\nimport {ReadStream} from \"../../platform/PlatformTools\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport {TableIndexOptions} from \"../../schema-builder/options/TableIndexOptions\";\nimport {TableUnique} from \"../../schema-builder/table/TableUnique\";\nimport {BaseQueryRunner} from \"../../query-runner/BaseQueryRunner\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport {ColumnType, PromiseUtils} from \"../../index\";\nimport {TableCheck} from \"../../schema-builder/table/TableCheck\";\nimport {IsolationLevel} from \"../types/IsolationLevel\";\nimport {TableExclusion} from \"../../schema-builder/table/TableExclusion\";\n\n/**\n * Runs queries on a single mysql database connection.\n */\nexport class MysqlQueryRunner extends BaseQueryRunner implements QueryRunner {\n\n    // -------------------------------------------------------------------------\n    // Public Implemented Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Database driver used by connection.\n     */\n    driver: MysqlDriver;\n\n    // -------------------------------------------------------------------------\n    // Protected Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Promise used to obtain a database connection from a pool for a first time.\n     */\n    protected databaseConnectionPromise: Promise<any>;\n\n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n\n    constructor(driver: MysqlDriver, 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<any> {\n        if (this.databaseConnection)\n            return Promise.resolve(this.databaseConnection);\n\n        if (this.databaseConnectionPromise)\n            return this.databaseConnectionPromise;\n\n        if (this.mode === \"slave\" && this.driver.isReplicated) {\n\n            this.databaseConnectionPromise = this.driver.obtainSlaveConnection().then(connection => {\n                this.databaseConnection = connection;\n                return this.databaseConnection;\n            });\n\n        } else { // master\n            this.databaseConnectionPromise = this.driver.obtainMasterConnection().then(connection => {\n                this.databaseConnection = connection;\n                return this.databaseConnection;\n            });\n        }\n\n        return this.databaseConnectionPromise;\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        if (this.databaseConnection)\n            this.databaseConnection.release();\n        return Promise.resolve();\n    }\n\n    /**\n     * Starts transaction on the current connection.\n     */\n    async startTransaction(isolationLevel?: IsolationLevel): Promise<void> {\n        if (this.isTransactionActive)\n            throw new TransactionAlreadyStartedError();\n\n        this.isTransactionActive = true;\n        if (isolationLevel) {\n            await this.query(\"SET TRANSACTION ISOLATION LEVEL \" + isolationLevel);\n            await this.query(\"START TRANSACTION\");\n        } else {\n            await this.query(\"START TRANSACTION\");\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.isTransactionActive)\n            throw new TransactionNotStartedError();\n\n        await this.query(\"COMMIT\");\n        this.isTransactionActive = false;\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.isTransactionActive)\n            throw new TransactionNotStartedError();\n\n        await this.query(\"ROLLBACK\");\n        this.isTransactionActive = false;\n    }\n\n    /**\n     * Executes a raw SQL query.\n     */\n    query(query: string, parameters?: any[]): Promise<any> {\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        return new Promise(async (ok, fail) => {\n            try {\n                const databaseConnection = await this.connect();\n                this.driver.connection.logger.logQuery(query, parameters, this);\n                const queryStartTime = +new Date();\n                databaseConnection.query(query, parameters, (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                    if (err) {\n                        this.driver.connection.logger.logQueryError(err, query, parameters, this);\n                        return fail(new QueryFailedError(query, parameters, err));\n                    }\n\n                    ok(result);\n                });\n\n            } catch (err) {\n                fail(err);\n            }\n        });\n    }\n\n    /**\n     * Returns raw data stream.\n     */\n    stream(query: string, parameters?: any[], onEnd?: Function, onError?: Function): Promise<ReadStream> {\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        return new Promise(async (ok, fail) => {\n            try {\n                const databaseConnection = await this.connect();\n                this.driver.connection.logger.logQuery(query, parameters, this);\n                const stream = databaseConnection.query(query, parameters);\n                if (onEnd) stream.on(\"end\", onEnd);\n                if (onError) stream.on(\"error\", onError);\n                ok(stream);\n\n            } catch (err) {\n                fail(err);\n            }\n        });\n    }\n\n    /**\n     * Returns all available database names including system databases.\n     */\n    async getDatabases(): Promise<string[]> {\n        return Promise.resolve([]);\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        throw new Error(`MySql driver does not support table schemas`);\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 * FROM \\`INFORMATION_SCHEMA\\`.\\`SCHEMATA\\` WHERE \\`SCHEMA_NAME\\` = '${database}'`);\n        return result.length ? true : false;\n    }\n\n    /**\n     * Checks if schema with the given name exist.\n     */\n    async hasSchema(schema: string): Promise<boolean> {\n        throw new Error(`MySql driver does not support table schemas`);\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 sql = `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`COLUMNS\\` WHERE \\`TABLE_SCHEMA\\` = '${parsedTableName.database}' AND \\`TABLE_NAME\\` = '${parsedTableName.tableName}'`;\n        const result = await this.query(sql);\n        return result.length ? true : false;\n    }\n\n    /**\n     * Checks if column with the given name exist in the given table.\n     */\n    async hasColumn(tableOrName: Table|string, column: TableColumn|string): Promise<boolean> {\n        const parsedTableName = this.parseTableName(tableOrName);\n        const columnName = column instanceof TableColumn ? column.name : column;\n        const sql = `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`COLUMNS\\` WHERE \\`TABLE_SCHEMA\\` = '${parsedTableName.database}' AND \\`TABLE_NAME\\` = '${parsedTableName.tableName}' AND \\`COLUMN_NAME\\` = '${columnName}'`;\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 ? `CREATE DATABASE IF NOT EXISTS \\`${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 ? `DROP DATABASE IF EXISTS \\`${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 a new table schema.\n     */\n    async createSchema(schema: string, ifNotExist?: boolean): Promise<void> {\n        throw new Error(`Schema create queries are not supported by MySql driver.`);\n    }\n\n    /**\n     * Drops table schema.\n     */\n    async dropSchema(schemaPath: string, ifExist?: boolean): Promise<void> {\n        throw new Error(`Schema drop queries are not supported by MySql driver.`);\n    }\n\n    /**\n     * Creates a new table.\n     */\n    async createTable(table: Table, ifNotExist: boolean = false, createForeignKeys: 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        // we must first drop indices, than drop foreign keys, because drop queries runs in reversed order\n        // and foreign keys will be dropped first as indices. This order is very important, because we can't drop index\n        // if it related to the foreign key.\n\n        // createTable does not need separate method to create indices, because it create indices in the same query with table creation.\n        table.indices.forEach(index => downQueries.push(this.dropIndexSql(table, index)));\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        return this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Drop the table.\n     */\n    async dropTable(target: Table|string, ifExist?: boolean, dropForeignKeys: boolean = true): Promise<void> {\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        if (ifExist) {\n            const isTableExist = await this.hasTable(target);\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 tableName = target instanceof Table ? target.name : target;\n        const table = await this.getCachedTable(tableName);\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        if (dropForeignKeys)\n            table.foreignKeys.forEach(foreignKey => upQueries.push(this.dropForeignKeySql(table, foreignKey)));\n\n        table.indices.forEach(index => upQueries.push(this.dropIndexSql(table, index)));\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        const newTable = oldTable.clone();\n        const dbName = oldTable.name.indexOf(\".\") === -1 ? undefined : oldTable.name.split(\".\")[0];\n        newTable.name = dbName ? `${dbName}.${newTableName}` : newTableName;\n\n        // rename table\n        upQueries.push(new Query(`RENAME TABLE ${this.escapePath(oldTable.name)} TO ${this.escapePath(newTable.name)}`));\n        downQueries.push(new Query(`RENAME TABLE ${this.escapePath(newTable.name)} TO ${this.escapePath(oldTable.name)}`));\n\n        // rename index constraints\n        newTable.indices.forEach(index => {\n            // build new constraint name\n            const columnNames = index.columnNames.map(column => `\\`${column}\\``).join(\", \");\n            const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n\n            // build queries\n            let indexType = \"\";\n            if (index.isUnique)\n                indexType += \"UNIQUE \";\n            if (index.isSpatial)\n                indexType += \"SPATIAL \";\n            if (index.isFulltext)\n                indexType += \"FULLTEXT \";\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} DROP INDEX \\`${index.name}\\`, ADD ${indexType}INDEX \\`${newIndexName}\\` (${columnNames})`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} DROP INDEX \\`${newIndexName}\\`, ADD ${indexType}INDEX \\`${index.name}\\` (${columnNames})`));\n\n            // replace constraint name\n            index.name = newIndexName;\n        });\n\n        // rename foreign key constraint\n        newTable.foreignKeys.forEach(foreignKey => {\n            // build new constraint name\n            const columnNames = foreignKey.columnNames.map(column => `\\`${column}\\``).join(\", \");\n            const referencedColumnNames = foreignKey.referencedColumnNames.map(column => `\\`${column}\\``).join(\",\");\n            const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames);\n\n            // build queries\n            let up = `ALTER TABLE ${this.escapePath(newTable)} DROP FOREIGN KEY \\`${foreignKey.name}\\`, ADD CONSTRAINT \\`${newForeignKeyName}\\` FOREIGN KEY (${columnNames}) ` +\n                `REFERENCES ${this.escapePath(foreignKey.referencedTableName)}(${referencedColumnNames})`;\n            if (foreignKey.onDelete)\n                up += ` ON DELETE ${foreignKey.onDelete}`;\n            if (foreignKey.onUpdate)\n                up += ` ON UPDATE ${foreignKey.onUpdate}`;\n\n            let down = `ALTER TABLE ${this.escapePath(newTable)} DROP FOREIGN KEY \\`${newForeignKeyName}\\`, ADD CONSTRAINT \\`${foreignKey.name}\\` FOREIGN KEY (${columnNames}) ` +\n                `REFERENCES ${this.escapePath(foreignKey.referencedTableName)}(${referencedColumnNames})`;\n            if (foreignKey.onDelete)\n                down += ` ON DELETE ${foreignKey.onDelete}`;\n            if (foreignKey.onUpdate)\n                down += ` ON UPDATE ${foreignKey.onUpdate}`;\n\n            upQueries.push(new Query(up));\n            downQueries.push(new Query(down));\n\n            // replace constraint name\n            foreignKey.name = newForeignKeyName;\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        const skipColumnLevelPrimary = clonedTable.primaryColumns.length > 0;\n\n        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(column, skipColumnLevelPrimary, 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 && skipColumnLevelPrimary) {\n            // if we already have generated column, we must temporary drop AUTO_INCREMENT property.\n            const generatedColumn = clonedTable.columns.find(column => column.isGenerated && column.generationStrategy === \"increment\");\n            if (generatedColumn) {\n                const nonGeneratedColumn = generatedColumn.clone();\n                nonGeneratedColumn.isGenerated = false;\n                nonGeneratedColumn.generationStrategy = undefined;\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${column.name}\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${nonGeneratedColumn.name}\\` ${this.buildCreateColumnSql(column, true)}`));\n            }\n\n            const primaryColumns = clonedTable.primaryColumns;\n            let columnNames = primaryColumns.map(column => `\\`${column.name}\\``).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD PRIMARY KEY (${columnNames})`));\n\n            primaryColumns.push(column);\n            columnNames = primaryColumns.map(column => `\\`${column.name}\\``).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD PRIMARY KEY (${columnNames})`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`));\n\n            // if we previously dropped AUTO_INCREMENT property, we must bring it back\n            if (generatedColumn) {\n                const nonGeneratedColumn = generatedColumn.clone();\n                nonGeneratedColumn.isGenerated = false;\n                nonGeneratedColumn.generationStrategy = undefined;\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${nonGeneratedColumn.name}\\` ${this.buildCreateColumnSql(column, true)}`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${column.name}\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`));\n            }\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        } else if (column.isUnique) {\n            const uniqueIndex = new TableIndex({\n                name: this.connection.namingStrategy.indexName(table.name, [column.name]),\n                columnNames: [column.name],\n                isUnique: true\n            });\n            clonedTable.indices.push(uniqueIndex);\n            clonedTable.uniques.push(new TableUnique({\n                name: uniqueIndex.name,\n                columnNames: uniqueIndex.columnNames\n            }));\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD UNIQUE INDEX \\`${uniqueIndex.name}\\` (\\`${column.name}\\`)`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP INDEX \\`${uniqueIndex.name}\\``));\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, oldColumnOrName: 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 = oldColumnOrName instanceof TableColumn\n            ? oldColumnOrName\n            : table.columns.find(column => column.name === oldColumnOrName);\n        if (!oldColumn)\n            throw new Error(`Column \"${oldColumnOrName}\" was not found in the \"${table.name}\" table.`);\n\n        if ((newColumn.isGenerated !== oldColumn.isGenerated && newColumn.generationStrategy !== \"uuid\")\n            || oldColumn.type !== newColumn.type\n            || oldColumn.length !== newColumn.length\n            || oldColumn.generatedType !== newColumn.generatedType) {\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                // We don't change any column properties, just rename it.\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${oldColumn.name}\\` \\`${newColumn.name}\\` ${this.buildCreateColumnSql(oldColumn, true, true)}`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${newColumn.name}\\` \\`${oldColumn.name}\\` ${this.buildCreateColumnSql(oldColumn, true, true)}`));\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 columnNames = index.columnNames.map(column => `\\`${column}\\``).join(\", \");\n                    const newIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);\n\n                    // build queries\n                    let indexType = \"\";\n                    if (index.isUnique)\n                        indexType += \"UNIQUE \";\n                    if (index.isSpatial)\n                        indexType += \"SPATIAL \";\n                    if (index.isFulltext)\n                        indexType += \"FULLTEXT \";\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP INDEX \\`${index.name}\\`, ADD ${indexType}INDEX \\`${newIndexName}\\` (${columnNames})`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP INDEX \\`${newIndexName}\\`, ADD ${indexType}INDEX \\`${index.name}\\` (${columnNames})`));\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 columnNames = foreignKey.columnNames.map(column => `\\`${column}\\``).join(\", \");\n                    const referencedColumnNames = foreignKey.referencedColumnNames.map(column => `\\`${column}\\``).join(\",\");\n                    const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames);\n\n                    // build queries\n                    let up = `ALTER TABLE ${this.escapePath(table)} DROP FOREIGN KEY \\`${foreignKey.name}\\`, ADD CONSTRAINT \\`${newForeignKeyName}\\` FOREIGN KEY (${columnNames}) ` +\n                        `REFERENCES ${this.escapePath(foreignKey.referencedTableName)}(${referencedColumnNames})`;\n                    if (foreignKey.onDelete)\n                        up += ` ON DELETE ${foreignKey.onDelete}`;\n                    if (foreignKey.onUpdate)\n                        up += ` ON UPDATE ${foreignKey.onUpdate}`;\n\n                    let down = `ALTER TABLE ${this.escapePath(table)} DROP FOREIGN KEY \\`${newForeignKeyName}\\`, ADD CONSTRAINT \\`${foreignKey.name}\\` FOREIGN KEY (${columnNames}) ` +\n                        `REFERENCES ${this.escapePath(foreignKey.referencedTableName)}(${referencedColumnNames})`;\n                    if (foreignKey.onDelete)\n                        down += ` ON DELETE ${foreignKey.onDelete}`;\n                    if (foreignKey.onUpdate)\n                        down += ` ON UPDATE ${foreignKey.onUpdate}`;\n\n                    upQueries.push(new Query(up));\n                    downQueries.push(new Query(down));\n\n                    // replace constraint name\n                    foreignKey.name = newForeignKeyName;\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, true)) {\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${oldColumn.name}\\` ${this.buildCreateColumnSql(newColumn, true)}`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${newColumn.name}\\` ${this.buildCreateColumnSql(oldColumn, true)}`));\n            }\n\n            if (newColumn.isPrimary !== oldColumn.isPrimary) {\n                // if table have generated column, we must drop AUTO_INCREMENT before changing primary constraints.\n                const generatedColumn = clonedTable.columns.find(column => column.isGenerated && column.generationStrategy === \"increment\");\n                if (generatedColumn) {\n                    const nonGeneratedColumn = generatedColumn.clone();\n                    nonGeneratedColumn.isGenerated = false;\n                    nonGeneratedColumn.generationStrategy = undefined;\n\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${generatedColumn.name}\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${nonGeneratedColumn.name}\\` ${this.buildCreateColumnSql(generatedColumn, true)}`));\n                }\n\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 columnNames = primaryColumns.map(column => `\\`${column.name}\\``).join(\", \");\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD 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 columnNames = primaryColumns.map(column => `\\`${column.name}\\``).join(\", \");\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD PRIMARY KEY (${columnNames})`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`));\n\n                } else {\n                    const primaryColumn = primaryColumns.find(c => c.name === newColumn.name);\n                    primaryColumns.splice(primaryColumns.indexOf(primaryColumn!), 1);\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 columnNames = primaryColumns.map(column => `\\`${column.name}\\``).join(\", \");\n                        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD PRIMARY KEY (${columnNames})`));\n                        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`));\n                    }\n                }\n\n                // if we have generated column, and we dropped AUTO_INCREMENT property before, we must bring it back\n                if (generatedColumn) {\n                    const nonGeneratedColumn = generatedColumn.clone();\n                    nonGeneratedColumn.isGenerated = false;\n                    nonGeneratedColumn.generationStrategy = undefined;\n\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${nonGeneratedColumn.name}\\` ${this.buildCreateColumnSql(generatedColumn, true)}`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${generatedColumn.name}\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`));\n                }\n            }\n\n            if (newColumn.isUnique !== oldColumn.isUnique) {\n                if (newColumn.isUnique === true) {\n                    const uniqueIndex = new TableIndex({\n                        name: this.connection.namingStrategy.indexName(table.name, [newColumn.name]),\n                        columnNames: [newColumn.name],\n                        isUnique: true\n                    });\n                    clonedTable.indices.push(uniqueIndex);\n                    clonedTable.uniques.push(new TableUnique({\n                        name: uniqueIndex.name,\n                        columnNames: uniqueIndex.columnNames\n                    }));\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD UNIQUE INDEX \\`${uniqueIndex.name}\\` (\\`${newColumn.name}\\`)`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP INDEX \\`${uniqueIndex.name}\\``));\n\n                } else {\n                    const uniqueIndex = clonedTable.indices.find(index => {\n                        return index.columnNames.length === 1 && index.isUnique === true && !!index.columnNames.find(columnName => columnName === newColumn.name);\n                    });\n                    clonedTable.indices.splice(clonedTable.indices.indexOf(uniqueIndex!), 1);\n\n                    const tableUnique = clonedTable.uniques.find(unique => unique.name === uniqueIndex!.name);\n                    clonedTable.uniques.splice(clonedTable.uniques.indexOf(tableUnique!), 1);\n\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP INDEX \\`${uniqueIndex!.name}\\``));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD UNIQUE INDEX \\`${uniqueIndex!.name}\\` (\\`${newColumn.name}\\`)`));\n                }\n            }\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n        this.replaceCachedTable(table, clonedTable);\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            // if table have generated column, we must drop AUTO_INCREMENT before changing primary constraints.\n            const generatedColumn = clonedTable.columns.find(column => column.isGenerated && column.generationStrategy === \"increment\");\n            if (generatedColumn) {\n                const nonGeneratedColumn = generatedColumn.clone();\n                nonGeneratedColumn.isGenerated = false;\n                nonGeneratedColumn.generationStrategy = undefined;\n\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${generatedColumn.name}\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${nonGeneratedColumn.name}\\` ${this.buildCreateColumnSql(generatedColumn, true)}`));\n            }\n\n            // dropping primary key constraint\n            const columnNames = clonedTable.primaryColumns.map(primaryColumn => `\\`${primaryColumn.name}\\``).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} DROP PRIMARY KEY`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} ADD 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 columnNames = clonedTable.primaryColumns.map(primaryColumn => `\\`${primaryColumn.name}\\``).join(\", \");\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} ADD PRIMARY KEY (${columnNames})`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} DROP PRIMARY KEY`));\n            }\n\n            // if we have generated column, and we dropped AUTO_INCREMENT property before, and this column is not current dropping column, we must bring it back\n            if (generatedColumn && generatedColumn.name !== column.name) {\n                const nonGeneratedColumn = generatedColumn.clone();\n                nonGeneratedColumn.isGenerated = false;\n                nonGeneratedColumn.generationStrategy = undefined;\n\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${nonGeneratedColumn.name}\\` ${this.buildCreateColumnSql(generatedColumn, true)}`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${generatedColumn.name}\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`));\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        } else if (column.isUnique) {\n            // we splice constraints both from table uniques and indices.\n            const uniqueName = this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]);\n            const foundUnique = clonedTable.uniques.find(unique => unique.name === uniqueName);\n            if (foundUnique)\n                clonedTable.uniques.splice(clonedTable.uniques.indexOf(foundUnique), 1);\n\n            const indexName = this.connection.namingStrategy.indexName(table.name, [column.name]);\n            const foundIndex = clonedTable.indices.find(index => index.name === indexName);\n            if (foundIndex)\n                clonedTable.indices.splice(clonedTable.indices.indexOf(foundIndex), 1);\n\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP INDEX \\`${indexName}\\``));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD UNIQUE INDEX \\`${indexName}\\` (\\`${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(column, true)}`));\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        const down = this.dropPrimaryKeySql(table);\n\n        await this.executeQueries(up, down);\n        clonedTable.columns.forEach(column => {\n            if (columnNames.find(columnName => columnName === column.name))\n                column.isPrimary = true;\n        });\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 have generated column, we must drop AUTO_INCREMENT before changing primary constraints.\n        const generatedColumn = clonedTable.columns.find(column => column.isGenerated && column.generationStrategy === \"increment\");\n        if (generatedColumn) {\n            const nonGeneratedColumn = generatedColumn.clone();\n            nonGeneratedColumn.isGenerated = false;\n            nonGeneratedColumn.generationStrategy = undefined;\n\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${generatedColumn.name}\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${nonGeneratedColumn.name}\\` ${this.buildCreateColumnSql(generatedColumn, true)}`));\n        }\n\n        // if table already have primary columns, we must drop them.\n        const primaryColumns = clonedTable.primaryColumns;\n        if (primaryColumns.length > 0) {\n            const columnNames = primaryColumns.map(column => `\\`${column.name}\\``).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD PRIMARY KEY (${columnNames})`));\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 columnNamesString = columnNames.map(columnName => `\\`${columnName}\\``).join(\", \");\n        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD PRIMARY KEY (${columnNamesString})`));\n        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`));\n\n        // if we already have generated column or column is changed to generated, and we dropped AUTO_INCREMENT property before, we must bring it back\n        const newOrExistGeneratedColumn = generatedColumn ? generatedColumn : columns.find(column => column.isGenerated && column.generationStrategy === \"increment\");\n        if (newOrExistGeneratedColumn) {\n            const nonGeneratedColumn = newOrExistGeneratedColumn.clone();\n            nonGeneratedColumn.isGenerated = false;\n            nonGeneratedColumn.generationStrategy = undefined;\n\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${nonGeneratedColumn.name}\\` ${this.buildCreateColumnSql(newOrExistGeneratedColumn, true)}`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \\`${newOrExistGeneratedColumn.name}\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`));\n\n            // if column changed to generated, we must update it in table\n            const changedGeneratedColumn = clonedTable.columns.find(column => column.name === newOrExistGeneratedColumn.name);\n            changedGeneratedColumn!.isGenerated = true;\n            changedGeneratedColumn!.generationStrategy = \"increment\";\n        }\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        throw new Error(`MySql does not support unique constraints. Use unique index instead.`);\n    }\n\n    /**\n     * Creates a new unique constraints.\n     */\n    async createUniqueConstraints(tableOrName: Table|string, uniqueConstraints: TableUnique[]): Promise<void> {\n        throw new Error(`MySql does not support unique constraints. Use unique index instead.`);\n    }\n\n    /**\n     * Drops an unique constraint.\n     */\n    async dropUniqueConstraint(tableOrName: Table|string, uniqueOrName: TableUnique|string): Promise<void> {\n        throw new Error(`MySql does not support unique constraints. Use unique index instead.`);\n    }\n\n    /**\n     * Drops an unique constraints.\n     */\n    async dropUniqueConstraints(tableOrName: Table|string, uniqueConstraints: TableUnique[]): Promise<void> {\n        throw new Error(`MySql does not support unique constraints. Use unique index instead.`);\n    }\n\n    /**\n     * Creates a new check constraint.\n     */\n    async createCheckConstraint(tableOrName: Table|string, checkConstraint: TableCheck): Promise<void> {\n        throw new Error(`MySql does not support check constraints.`);\n    }\n\n    /**\n     * Creates a new check constraints.\n     */\n    async createCheckConstraints(tableOrName: Table|string, checkConstraints: TableCheck[]): Promise<void> {\n        throw new Error(`MySql does not support check constraints.`);\n    }\n\n    /**\n     * Drops check constraint.\n     */\n    async dropCheckConstraint(tableOrName: Table|string, checkOrName: TableCheck|string): Promise<void> {\n        throw new Error(`MySql does not support check constraints.`);\n    }\n\n    /**\n     * Drops check constraints.\n     */\n    async dropCheckConstraints(tableOrName: Table|string, checkConstraints: TableCheck[]): Promise<void> {\n        throw new Error(`MySql does not support check constraints.`);\n    }\n\n    /**\n     * Creates a new exclusion constraint.\n     */\n    async createExclusionConstraint(tableOrName: Table|string, exclusionConstraint: TableExclusion): Promise<void> {\n        throw new Error(`MySql 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(`MySql 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(`MySql 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(`MySql 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.\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, true);\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, true);\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(tableOrName: Table|string): Promise<void> {\n        await this.query(`TRUNCATE TABLE ${this.escapePath(tableOrName)}`);\n    }\n\n    /**\n     * Removes all tables from the currently connected database.\n     * Be careful using this method and avoid using it in production or migrations\n     * (because it can clear all your database).\n     */\n    async clearDatabase(database?: string): Promise<void> {\n        const dbName = database ? database : this.driver.database;\n        if (dbName) {\n            const isDatabaseExist = await this.hasDatabase(dbName);\n            if (!isDatabaseExist)\n                return Promise.resolve();\n        } else {\n            throw new Error(`Can not clear database. No database is specified`);\n        }\n\n        await this.startTransaction();\n        try {\n\n            const selectViewDropsQuery = `SELECT concat('DROP VIEW IF EXISTS \\`', table_schema, '\\`.\\`', table_name, '\\`') AS \\`query\\` FROM \\`INFORMATION_SCHEMA\\`.\\`VIEWS\\` WHERE \\`TABLE_SCHEMA\\` = '${dbName}'`;\n            const dropViewQueries: ObjectLiteral[] = await this.query(selectViewDropsQuery);\n            await Promise.all(dropViewQueries.map(q => this.query(q[\"query\"])));\n\n            const disableForeignKeysCheckQuery = `SET FOREIGN_KEY_CHECKS = 0;`;\n            const dropTablesQuery = `SELECT concat('DROP TABLE IF EXISTS \\`', table_schema, '\\`.\\`', table_name, '\\`') AS \\`query\\` FROM \\`INFORMATION_SCHEMA\\`.\\`TABLES\\` WHERE \\`TABLE_SCHEMA\\` = '${dbName}'`;\n            const enableForeignKeysCheckQuery = `SET FOREIGN_KEY_CHECKS = 1;`;\n\n            await this.query(disableForeignKeysCheckQuery);\n            const dropQueries: ObjectLiteral[] = await this.query(dropTablesQuery);\n            await Promise.all(dropQueries.map(query => this.query(query[\"query\"])));\n            await this.query(enableForeignKeysCheckQuery);\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     * Returns current database.\n     */\n    protected async getCurrentDatabase(): Promise<string> {\n        const currentDBQuery = await this.query(`SELECT DATABASE() AS \\`db_name\\``);\n        return currentDBQuery[0][\"db_name\"];\n    }\n\n    protected async loadViews(viewNames: string[]): Promise<View[]> {\n        const hasTable = await this.hasTable(this.getTypeormMetadataTableName());\n        if (!hasTable)\n            return Promise.resolve([]);\n\n        const currentDatabase = await this.getCurrentDatabase();\n        const viewsCondition = viewNames.map(tableName => {\n            let [database, name] = tableName.split(\".\");\n            if (!name) {\n                name = database;\n                database = this.driver.database || currentDatabase;\n            }\n            return `(\\`t\\`.\\`schema\\` = '${database}' AND \\`t\\`.\\`name\\` = '${name}')`;\n        }).join(\" OR \");\n\n        const query = `SELECT \\`t\\`.*, \\`v\\`.\\`check_option\\` FROM ${this.escapePath(this.getTypeormMetadataTableName())} \\`t\\` ` +\n            `INNER JOIN \\`information_schema\\`.\\`views\\` \\`v\\` ON \\`v\\`.\\`table_schema\\` = \\`t\\`.\\`schema\\` AND \\`v\\`.\\`table_name\\` = \\`t\\`.\\`name\\` WHERE \\`t\\`.\\`type\\` = 'VIEW' ${viewsCondition ? `AND (${viewsCondition})` : \"\"}`;\n        const dbViews = await this.query(query);\n        return dbViews.map((dbView: any) => {\n            const view = new View();\n            const db = dbView[\"schema\"] === currentDatabase ? undefined : dbView[\"schema\"];\n            view.name = this.driver.buildTableName(dbView[\"name\"], undefined, 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 currentDatabase = await this.getCurrentDatabase();\n        const tablesCondition = tableNames.map(tableName => {\n            let [database, name] = tableName.split(\".\");\n            if (!name) {\n                name = database;\n                database = this.driver.database || currentDatabase;\n            }\n            return `(\\`TABLE_SCHEMA\\` = '${database}' AND \\`TABLE_NAME\\` = '${name}')`;\n        }).join(\" OR \");\n        const tablesSql = `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`TABLES\\` WHERE ` + tablesCondition;\n\n        const columnsSql = `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`COLUMNS\\` WHERE ` + tablesCondition;\n\n        const primaryKeySql = `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`KEY_COLUMN_USAGE\\` WHERE \\`CONSTRAINT_NAME\\` = 'PRIMARY' AND (${tablesCondition})`;\n\n        const collationsSql = `SELECT \\`SCHEMA_NAME\\`, \\`DEFAULT_CHARACTER_SET_NAME\\` as \\`CHARSET\\`, \\`DEFAULT_COLLATION_NAME\\` AS \\`COLLATION\\` FROM \\`INFORMATION_SCHEMA\\`.\\`SCHEMATA\\``;\n\n        const indicesCondition = tableNames.map(tableName => {\n            let [database, name] = tableName.split(\".\");\n            if (!name) {\n                name = database;\n                database = this.driver.database || currentDatabase;\n            }\n            return `(\\`s\\`.\\`TABLE_SCHEMA\\` = '${database}' AND \\`s\\`.\\`TABLE_NAME\\` = '${name}')`;\n        }).join(\" OR \");\n        const indicesSql = `SELECT \\`s\\`.* FROM \\`INFORMATION_SCHEMA\\`.\\`STATISTICS\\` \\`s\\` ` +\n            `LEFT JOIN \\`INFORMATION_SCHEMA\\`.\\`REFERENTIAL_CONSTRAINTS\\` \\`rc\\` ON \\`s\\`.\\`INDEX_NAME\\` = \\`rc\\`.\\`CONSTRAINT_NAME\\` ` +\n            `WHERE (${indicesCondition}) AND \\`s\\`.\\`INDEX_NAME\\` != 'PRIMARY' AND \\`rc\\`.\\`CONSTRAINT_NAME\\` IS NULL`;\n\n        const foreignKeysCondition = tableNames.map(tableName => {\n            let [database, name] = tableName.split(\".\");\n            if (!name) {\n                name = database;\n                database = this.driver.database || currentDatabase;\n            }\n            return `(\\`kcu\\`.\\`TABLE_SCHEMA\\` = '${database}' AND \\`kcu\\`.\\`TABLE_NAME\\` = '${name}')`;\n        }).join(\" OR \");\n        const foreignKeysSql = `SELECT \\`kcu\\`.\\`TABLE_SCHEMA\\`, \\`kcu\\`.\\`TABLE_NAME\\`, \\`kcu\\`.\\`CONSTRAINT_NAME\\`, \\`kcu\\`.\\`COLUMN_NAME\\`, \\`kcu\\`.\\`REFERENCED_TABLE_SCHEMA\\`, ` +\n            `\\`kcu\\`.\\`REFERENCED_TABLE_NAME\\`, \\`kcu\\`.\\`REFERENCED_COLUMN_NAME\\`, \\`rc\\`.\\`DELETE_RULE\\` \\`ON_DELETE\\`, \\`rc\\`.\\`UPDATE_RULE\\` \\`ON_UPDATE\\` ` +\n            `FROM \\`INFORMATION_SCHEMA\\`.\\`KEY_COLUMN_USAGE\\` \\`kcu\\` ` +\n            `INNER JOIN \\`INFORMATION_SCHEMA\\`.\\`REFERENTIAL_CONSTRAINTS\\` \\`rc\\` ON \\`rc\\`.\\`constraint_name\\` = \\`kcu\\`.\\`constraint_name\\` ` +\n            `WHERE ` + foreignKeysCondition;\n        const [dbTables, dbColumns, dbPrimaryKeys, dbCollations, dbIndices, dbForeignKeys]: ObjectLiteral[][] = await Promise.all([\n            this.query(tablesSql),\n            this.query(columnsSql),\n            this.query(primaryKeySql),\n            this.query(collationsSql),\n            this.query(indicesSql),\n            this.query(foreignKeysSql)\n        ]);\n\n        // if tables were not found in the db, no need to proceed\n        if (!dbTables.length)\n            return [];\n\n        const isMariaDb = this.driver.options.type === \"mariadb\";\n\n        // create tables for loaded tables\n        return Promise.all(dbTables.map(async dbTable => {\n            const table = new Table();\n\n            const dbCollation = dbCollations.find(coll => coll[\"SCHEMA_NAME\"] === dbTable[\"TABLE_SCHEMA\"])!;\n            const defaultCollation = dbCollation[\"COLLATION\"];\n            const defaultCharset = dbCollation[\"CHARSET\"];\n\n            // We do not need to join database name, when database is by default.\n            // In this case we need local variable `tableFullName` for below comparision.\n            const db = dbTable[\"TABLE_SCHEMA\"] === currentDatabase ? undefined : dbTable[\"TABLE_SCHEMA\"];\n            table.name = this.driver.buildTableName(dbTable[\"TABLE_NAME\"], undefined, db);\n            const tableFullName = this.driver.buildTableName(dbTable[\"TABLE_NAME\"], undefined, dbTable[\"TABLE_SCHEMA\"]);\n\n            // create columns from the loaded columns\n            table.columns = dbColumns\n                .filter(dbColumn => this.driver.buildTableName(dbColumn[\"TABLE_NAME\"], undefined, dbColumn[\"TABLE_SCHEMA\"]) === tableFullName)\n                .map(dbColumn => {\n\n                    const columnUniqueIndex = dbIndices.find(dbIndex => {\n                        return this.driver.buildTableName(dbIndex[\"TABLE_NAME\"], undefined, dbIndex[\"TABLE_SCHEMA\"]) === tableFullName\n                            && dbIndex[\"COLUMN_NAME\"] === dbColumn[\"COLUMN_NAME\"] && dbIndex[\"NON_UNIQUE\"] === \"0\";\n                    });\n\n                    const tableMetadata = this.connection.entityMetadatas.find(metadata => metadata.tablePath === table.name);\n                    const hasIgnoredIndex = columnUniqueIndex && tableMetadata && tableMetadata.indices\n                        .some(index => index.name === columnUniqueIndex[\"INDEX_NAME\"] && index.synchronize === false);\n\n                    const isConstraintComposite = columnUniqueIndex\n                        ? !!dbIndices.find(dbIndex => dbIndex[\"INDEX_NAME\"] === columnUniqueIndex[\"INDEX_NAME\"] && dbIndex[\"COLUMN_NAME\"] !== dbColumn[\"COLUMN_NAME\"])\n                        : false;\n\n                    const tableColumn = new TableColumn();\n                    tableColumn.name = dbColumn[\"COLUMN_NAME\"];\n                    tableColumn.type = dbColumn[\"DATA_TYPE\"].toLowerCase();\n\n                    if (this.driver.withWidthColumnTypes.indexOf(tableColumn.type as ColumnType) !== -1) {\n                        const width = dbColumn[\"COLUMN_TYPE\"].substring(dbColumn[\"COLUMN_TYPE\"].indexOf(\"(\") + 1, dbColumn[\"COLUMN_TYPE\"].indexOf(\")\"));\n                        tableColumn.width = width && !this.isDefaultColumnWidth(table, tableColumn, parseInt(width)) ? parseInt(width) : undefined;\n                    }\n\n                    if (dbColumn[\"COLUMN_DEFAULT\"] === null\n                        || dbColumn[\"COLUMN_DEFAULT\"] === undefined\n                        || (isMariaDb && dbColumn[\"COLUMN_DEFAULT\"] === \"NULL\")) {\n                        tableColumn.default = undefined;\n\n                    } else {\n                        tableColumn.default = dbColumn[\"COLUMN_DEFAULT\"] === \"CURRENT_TIMESTAMP\" ? dbColumn[\"COLUMN_DEFAULT\"] : `'${dbColumn[\"COLUMN_DEFAULT\"]}'`;\n                    }\n\n                    if (dbColumn[\"EXTRA\"].indexOf(\"on update\") !== -1) {\n                        tableColumn.onUpdate = dbColumn[\"EXTRA\"].substring(dbColumn[\"EXTRA\"].indexOf(\"on update\") + 10);\n                    }\n\n                    if (dbColumn[\"GENERATION_EXPRESSION\"]) {\n                        tableColumn.asExpression = dbColumn[\"GENERATION_EXPRESSION\"];\n                        tableColumn.generatedType = dbColumn[\"EXTRA\"].indexOf(\"VIRTUAL\") !== -1 ? \"VIRTUAL\" : \"STORED\";\n                    }\n\n                    tableColumn.isUnique = !!columnUniqueIndex && !hasIgnoredIndex && !isConstraintComposite;\n                    tableColumn.isNullable = dbColumn[\"IS_NULLABLE\"] === \"YES\";\n                    tableColumn.isPrimary = dbPrimaryKeys.some(dbPrimaryKey => {\n                        return this.driver.buildTableName(dbPrimaryKey[\"TABLE_NAME\"], undefined, dbPrimaryKey[\"TABLE_SCHEMA\"]) === tableFullName && dbPrimaryKey[\"COLUMN_NAME\"] === tableColumn.name;\n                    });\n                    tableColumn.zerofill = dbColumn[\"COLUMN_TYPE\"].indexOf(\"zerofill\") !== -1;\n                    tableColumn.unsigned = tableColumn.zerofill ? true : dbColumn[\"COLUMN_TYPE\"].indexOf(\"unsigned\") !== -1;\n                    tableColumn.isGenerated = dbColumn[\"EXTRA\"].indexOf(\"auto_increment\") !== -1;\n                    if (tableColumn.isGenerated)\n                        tableColumn.generationStrategy = \"increment\";\n\n                    tableColumn.comment = dbColumn[\"COLUMN_COMMENT\"];\n                    if (dbColumn[\"CHARACTER_SET_NAME\"])\n                        tableColumn.charset = dbColumn[\"CHARACTER_SET_NAME\"] === defaultCharset ? undefined : dbColumn[\"CHARACTER_SET_NAME\"];\n                    if (dbColumn[\"COLLATION_NAME\"])\n                        tableColumn.collation = dbColumn[\"COLLATION_NAME\"] === defaultCollation ? undefined : dbColumn[\"COLLATION_NAME\"];\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                        tableColumn.length = !this.isDefaultColumnLength(table, tableColumn, length) ? length : \"\";\n                    }\n\n                    if (tableColumn.type === \"decimal\" || tableColumn.type === \"double\" || tableColumn.type === \"float\") {\n                        if (dbColumn[\"NUMERIC_PRECISION\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"NUMERIC_PRECISION\"]))\n                            tableColumn.precision = parseInt(dbColumn[\"NUMERIC_PRECISION\"]);\n                        if (dbColumn[\"NUMERIC_SCALE\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"NUMERIC_SCALE\"]))\n                            tableColumn.scale = parseInt(dbColumn[\"NUMERIC_SCALE\"]);\n                    }\n\n                    if (tableColumn.type === \"enum\" || tableColumn.type === \"simple-enum\") {\n                        const colType = dbColumn[\"COLUMN_TYPE\"];\n                        const items = colType.substring(colType.indexOf(\"(\") + 1, colType.indexOf(\")\")).split(\",\");\n                        tableColumn.enum = (items as string[]).map(item => {\n                            return item.substring(1, item.length - 1);\n                        });\n                        tableColumn.length = \"\";\n                    }\n\n                    if ((tableColumn.type === \"datetime\" || tableColumn.type === \"time\" || tableColumn.type === \"timestamp\")\n                        && dbColumn[\"DATETIME_PRECISION\"] !== null && dbColumn[\"DATETIME_PRECISION\"] !== undefined\n                        && !this.isDefaultColumnPrecision(table, tableColumn, parseInt(dbColumn[\"DATETIME_PRECISION\"]))) {\n                        tableColumn.precision = parseInt(dbColumn[\"DATETIME_PRECISION\"]);\n                    }\n\n                    return tableColumn;\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\"], undefined, dbForeignKey[\"TABLE_SCHEMA\"]) === tableFullName;\n            }), dbForeignKey => dbForeignKey[\"CONSTRAINT_NAME\"]);\n\n            table.foreignKeys = tableForeignKeyConstraints.map(dbForeignKey => {\n                const foreignKeys = dbForeignKeys.filter(dbFk => dbFk[\"CONSTRAINT_NAME\"] === dbForeignKey[\"CONSTRAINT_NAME\"]);\n\n                // if referenced table located in currently used db, we don't need to concat db name to table name.\n                const database = dbForeignKey[\"REFERENCED_TABLE_SCHEMA\"] === currentDatabase ? undefined : dbForeignKey[\"REFERENCED_TABLE_SCHEMA\"];\n                const referencedTableName = this.driver.buildTableName(dbForeignKey[\"REFERENCED_TABLE_NAME\"], undefined, database);\n\n                return new TableForeignKey({\n                    name: dbForeignKey[\"CONSTRAINT_NAME\"],\n                    columnNames: foreignKeys.map(dbFk => dbFk[\"COLUMN_NAME\"]),\n                    referencedTableName: referencedTableName,\n                    referencedColumnNames: foreignKeys.map(dbFk => dbFk[\"REFERENCED_COLUMN_NAME\"]),\n                    onDelete: dbForeignKey[\"ON_DELETE\"],\n                    onUpdate: dbForeignKey[\"ON_UPDATE\"]\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\"], undefined, dbIndex[\"TABLE_SCHEMA\"]) === tableFullName;\n            }), dbIndex => dbIndex[\"INDEX_NAME\"]);\n\n            table.indices = tableIndexConstraints.map(constraint => {\n                const indices = dbIndices.filter(index => {\n                    return 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[\"NON_UNIQUE\"] === \"0\",\n                    isSpatial: constraint[\"INDEX_TYPE\"] === \"SPATIAL\",\n                    isFulltext: constraint[\"INDEX_TYPE\"] === \"FULLTEXT\"\n                });\n            });\n\n            return table;\n        }));\n    }\n\n    /**\n     * Builds create table sql\n     */\n    protected createTableSql(table: Table, createForeignKeys?: boolean): Query {\n        const columnDefinitions = table.columns.map(column => this.buildCreateColumnSql(column, true)).join(\", \");\n        let sql = `CREATE TABLE ${this.escapePath(table)} (${columnDefinitions}`;\n\n        // we create unique indexes instead of unique constraints, because MySql does not have unique constraints.\n        // if we mark column as Unique, it means that we create UNIQUE INDEX.\n        table.columns\n            .filter(column => column.isUnique)\n            .forEach(column => {\n                const isUniqueIndexExist = table.indices.some(index => {\n                    return index.columnNames.length === 1 && !!index.isUnique && index.columnNames.indexOf(column.name) !== -1;\n                });\n                const isUniqueConstraintExist = table.uniques.some(unique => {\n                    return unique.columnNames.length === 1 && unique.columnNames.indexOf(column.name) !== -1;\n                });\n                if (!isUniqueIndexExist && !isUniqueConstraintExist)\n                    table.indices.push(new TableIndex({\n                        name: this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n                        columnNames: [column.name],\n                        isUnique: true\n                    }));\n            });\n\n        // as MySql does not have unique constraints, we must create table indices from table uniques and mark them as unique.\n        if (table.uniques.length > 0) {\n            table.uniques.forEach(unique => {\n                const uniqueExist = table.indices.some(index => index.name === unique.name);\n                if (!uniqueExist) {\n                    table.indices.push(new TableIndex({\n                        name: unique.name,\n                        columnNames: unique.columnNames,\n                        isUnique: true\n                    }));\n                }\n            });\n        }\n\n        if (table.indices.length > 0) {\n            const indicesSql = table.indices.map(index => {\n                const columnNames = index.columnNames.map(columnName => `\\`${columnName}\\``).join(\", \");\n                if (!index.name)\n                    index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n\n                let indexType = \"\";\n                if (index.isUnique)\n                    indexType += \"UNIQUE \";\n                if (index.isSpatial)\n                    indexType += \"SPATIAL \";\n                if (index.isFulltext)\n                    indexType += \"FULLTEXT \";\n\n                return `${indexType}INDEX \\`${index.name}\\` (${columnNames})`;\n            }).join(\", \");\n\n            sql += `, ${indicesSql}`;\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        if (table.primaryColumns.length > 0) {\n            const columnNames = table.primaryColumns.map(column => `\\`${column.name}\\``).join(\", \");\n            sql += `, PRIMARY KEY (${columnNames})`;\n        }\n\n        sql += `) ENGINE=${table.engine || \"InnoDB\"}`;\n\n        return new Query(sql);\n    }\n\n    /**\n     * Builds drop table sql\n     */\n    protected dropTableSql(tableOrName: Table|string): Query {\n        return new Query(`DROP TABLE ${this.escapePath(tableOrName)}`);\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 currentDatabase = await this.getCurrentDatabase();\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\", schema: currentDatabase, name: view.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 currentDatabase = await this.getCurrentDatabase();\n        const viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\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(\"schema\")} = :schema`, { schema: currentDatabase })\n            .andWhere(`${qb.escape(\"name\")} = :name`, { name: viewName })\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        let indexType = \"\";\n        if (index.isUnique)\n            indexType += \"UNIQUE \";\n        if (index.isSpatial)\n            indexType += \"SPATIAL \";\n        if (index.isFulltext)\n            indexType += \"FULLTEXT \";\n        return new Query(`CREATE ${indexType}INDEX \\`${index.name}\\` ON ${this.escapePath(table)} (${columns})`);\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 columnNamesString = columnNames.map(columnName => `\\`${columnName}\\``).join(\", \");\n        return new Query(`ALTER TABLE ${this.escapePath(table)} ADD PRIMARY KEY (${columnNamesString})`);\n    }\n\n    /**\n     * Builds drop primary key sql.\n     */\n    protected dropPrimaryKeySql(table: Table): Query {\n        return new Query(`ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`);\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 FOREIGN KEY \\`${foreignKeyName}\\``);\n    }\n\n    protected parseTableName(target: Table|string) {\n        const tableName = target instanceof Table ? target.name : target;\n        return {\n            database: tableName.indexOf(\".\") !== -1 ? tableName.split(\".\")[0] : this.driver.database,\n            tableName: tableName.indexOf(\".\") !== -1 ? tableName.split(\".\")[1] : tableName\n        };\n    }\n\n    /**\n     * Escapes given table or view path.\n     */\n    protected escapePath(target: Table|View|string, disableEscape?: boolean): string {\n        const tableName = target instanceof Table || target instanceof View ? target.name : target;\n        return tableName.split(\".\").map(i => disableEscape ? i : `\\`${i}\\``).join(\".\");\n    }\n\n    /**\n     * Builds a part of query to create/change a column.\n     */\n    protected buildCreateColumnSql(column: TableColumn, skipPrimary: boolean, skipName: boolean = false) {\n        let c = \"\";\n        if (skipName) {\n            c = this.connection.driver.createFullType(column);\n        } else {\n            c = `\\`${column.name}\\` ${this.connection.driver.createFullType(column)}`;\n        }\n        if (column.asExpression)\n            c += ` AS (${column.asExpression}) ${column.generatedType ? column.generatedType : \"VIRTUAL\"}`;\n\n        // if you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to that column.\n        if (column.zerofill) {\n            c += \" ZEROFILL\";\n        } else if (column.unsigned) {\n            c += \" UNSIGNED\";\n        }\n        if (column.enum)\n            c += ` (${column.enum.map(value => \"'\" + value + \"'\").join(\", \")})`;\n        if (column.charset)\n            c += ` CHARACTER SET \"${column.charset}\"`;\n        if (column.collation)\n            c += ` COLLATE \"${column.collation}\"`;\n        if (!column.isNullable)\n            c += \" NOT NULL\";\n        if (column.isNullable)\n            c += \" NULL\";\n        if (column.isPrimary && !skipPrimary)\n            c += \" PRIMARY KEY\";\n        if (column.isGenerated && column.generationStrategy === \"increment\") // don't use skipPrimary here since updates can update already exist primary without auto inc.\n            c += \" AUTO_INCREMENT\";\n        if (column.comment)\n            c += ` COMMENT '${column.comment}'`;\n        if (column.default !== undefined && column.default !== null)\n            c += ` DEFAULT ${column.default}`;\n        if (column.onUpdate)\n            c += ` ON UPDATE ${column.onUpdate}`;\n\n        return c;\n    }\n\n}\n"],"sourceRoot":"../.."}