typeorm
Version:
Data-Mapper ORM for TypeScript, ES7, ES6, ES5. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, MongoDB databases.
1,034 lines • 99.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AbstractSqliteQueryRunner = void 0;
var tslib_1 = require("tslib");
var TransactionAlreadyStartedError_1 = require("../../error/TransactionAlreadyStartedError");
var TransactionNotStartedError_1 = require("../../error/TransactionNotStartedError");
var TableColumn_1 = require("../../schema-builder/table/TableColumn");
var ColumnMetadata_1 = require("../../metadata/ColumnMetadata");
var Table_1 = require("../../schema-builder/table/Table");
var TableIndex_1 = require("../../schema-builder/table/TableIndex");
var TableForeignKey_1 = require("../../schema-builder/table/TableForeignKey");
var View_1 = require("../../schema-builder/view/View");
var BroadcasterResult_1 = require("../../subscriber/BroadcasterResult");
var Query_1 = require("../Query");
var TableUnique_1 = require("../../schema-builder/table/TableUnique");
var BaseQueryRunner_1 = require("../../query-runner/BaseQueryRunner");
var OrmUtils_1 = require("../../util/OrmUtils");
var TableCheck_1 = require("../../schema-builder/table/TableCheck");
var error_1 = require("../../error");
/**
* Runs queries on a single sqlite database connection.
*/
var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
tslib_1.__extends(AbstractSqliteQueryRunner, _super);
// -------------------------------------------------------------------------
// Constructor
// -------------------------------------------------------------------------
function AbstractSqliteQueryRunner() {
return _super.call(this) || this;
}
// -------------------------------------------------------------------------
// Public Methods
// -------------------------------------------------------------------------
/**
* Creates/uses database connection from the connection pool to perform further operations.
* Returns obtained database connection.
*/
AbstractSqliteQueryRunner.prototype.connect = function () {
return Promise.resolve(this.driver.databaseConnection);
};
/**
* Releases used database connection.
* We just clear loaded tables and sql in memory, because sqlite do not support multiple connections thus query runners.
*/
AbstractSqliteQueryRunner.prototype.release = function () {
this.loadedTables = [];
this.clearSqlMemory();
return Promise.resolve();
};
/**
* Starts transaction.
*/
AbstractSqliteQueryRunner.prototype.startTransaction = function (isolationLevel) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var beforeBroadcastResult, afterBroadcastResult;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this.isTransactionActive)
throw new TransactionAlreadyStartedError_1.TransactionAlreadyStartedError();
if (!isolationLevel) return [3 /*break*/, 4];
if (isolationLevel !== "READ UNCOMMITTED" && isolationLevel !== "SERIALIZABLE") {
throw new error_1.TypeORMError("SQLite only supports SERIALIZABLE and READ UNCOMMITTED isolation");
}
if (!(isolationLevel === "READ UNCOMMITTED")) return [3 /*break*/, 2];
return [4 /*yield*/, this.query("PRAGMA read_uncommitted = true")];
case 1:
_a.sent();
return [3 /*break*/, 4];
case 2: return [4 /*yield*/, this.query("PRAGMA read_uncommitted = false")];
case 3:
_a.sent();
_a.label = 4;
case 4:
beforeBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);
if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 6];
return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];
case 5:
_a.sent();
_a.label = 6;
case 6:
this.isTransactionActive = true;
return [4 /*yield*/, this.query("BEGIN TRANSACTION")];
case 7:
_a.sent();
afterBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);
if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 9];
return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];
case 8:
_a.sent();
_a.label = 9;
case 9: return [2 /*return*/];
}
});
});
};
/**
* Commits transaction.
* Error will be thrown if transaction was not started.
*/
AbstractSqliteQueryRunner.prototype.commitTransaction = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var beforeBroadcastResult, afterBroadcastResult;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.isTransactionActive)
throw new TransactionNotStartedError_1.TransactionNotStartedError();
beforeBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);
if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];
return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];
case 1:
_a.sent();
_a.label = 2;
case 2: return [4 /*yield*/, this.query("COMMIT")];
case 3:
_a.sent();
this.isTransactionActive = false;
afterBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);
if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];
return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];
case 4:
_a.sent();
_a.label = 5;
case 5: return [2 /*return*/];
}
});
});
};
/**
* Rollbacks transaction.
* Error will be thrown if transaction was not started.
*/
AbstractSqliteQueryRunner.prototype.rollbackTransaction = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var beforeBroadcastResult, afterBroadcastResult;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.isTransactionActive)
throw new TransactionNotStartedError_1.TransactionNotStartedError();
beforeBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);
if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];
return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];
case 1:
_a.sent();
_a.label = 2;
case 2: return [4 /*yield*/, this.query("ROLLBACK")];
case 3:
_a.sent();
this.isTransactionActive = false;
afterBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);
if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];
return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];
case 4:
_a.sent();
_a.label = 5;
case 5: return [2 /*return*/];
}
});
});
};
/**
* Returns raw data stream.
*/
AbstractSqliteQueryRunner.prototype.stream = function (query, parameters, onEnd, onError) {
throw new error_1.TypeORMError("Stream is not supported by sqlite driver.");
};
/**
* Returns all available database names including system databases.
*/
AbstractSqliteQueryRunner.prototype.getDatabases = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, Promise.resolve([])];
});
});
};
/**
* Returns all available schema names including system schemas.
* If database parameter specified, returns schemas of that database.
*/
AbstractSqliteQueryRunner.prototype.getSchemas = function (database) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, Promise.resolve([])];
});
});
};
/**
* Checks if database with the given name exist.
*/
AbstractSqliteQueryRunner.prototype.hasDatabase = function (database) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, Promise.resolve(false)];
});
});
};
/**
* Loads currently using database
*/
AbstractSqliteQueryRunner.prototype.getCurrentDatabase = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, Promise.resolve(undefined)];
});
});
};
/**
* Checks if schema with the given name exist.
*/
AbstractSqliteQueryRunner.prototype.hasSchema = function (schema) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
throw new error_1.TypeORMError("This driver does not support table schemas");
});
});
};
/**
* Loads currently using database schema
*/
AbstractSqliteQueryRunner.prototype.getCurrentSchema = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, Promise.resolve(undefined)];
});
});
};
/**
* Checks if table with the given name exist in the database.
*/
AbstractSqliteQueryRunner.prototype.hasTable = function (tableOrName) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var tableName, sql, result;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
tableName = tableOrName instanceof Table_1.Table ? tableOrName.name : tableOrName;
sql = "SELECT * FROM \"sqlite_master\" WHERE \"type\" = 'table' AND \"name\" = '" + tableName + "'";
return [4 /*yield*/, this.query(sql)];
case 1:
result = _a.sent();
return [2 /*return*/, result.length ? true : false];
}
});
});
};
/**
* Checks if column with the given name exist in the given table.
*/
AbstractSqliteQueryRunner.prototype.hasColumn = function (tableOrName, columnName) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var tableName, sql, columns;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
tableName = tableOrName instanceof Table_1.Table ? tableOrName.name : tableOrName;
sql = "PRAGMA table_info(\"" + tableName + "\")";
return [4 /*yield*/, this.query(sql)];
case 1:
columns = _a.sent();
return [2 /*return*/, !!columns.find(function (column) { return column["name"] === columnName; })];
}
});
});
};
/**
* Creates a new database.
*/
AbstractSqliteQueryRunner.prototype.createDatabase = function (database, ifNotExist) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, Promise.resolve()];
});
});
};
/**
* Drops database.
*/
AbstractSqliteQueryRunner.prototype.dropDatabase = function (database, ifExist) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, Promise.resolve()];
});
});
};
/**
* Creates a new table schema.
*/
AbstractSqliteQueryRunner.prototype.createSchema = function (schemaPath, ifNotExist) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, Promise.resolve()];
});
});
};
/**
* Drops table schema.
*/
AbstractSqliteQueryRunner.prototype.dropSchema = function (schemaPath, ifExist) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, Promise.resolve()];
});
});
};
/**
* Creates a new table.
*/
AbstractSqliteQueryRunner.prototype.createTable = function (table, ifNotExist, createForeignKeys, createIndices) {
if (ifNotExist === void 0) { ifNotExist = false; }
if (createForeignKeys === void 0) { createForeignKeys = true; }
if (createIndices === void 0) { createIndices = true; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var upQueries, downQueries, isTableExist;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
upQueries = [];
downQueries = [];
if (!ifNotExist) return [3 /*break*/, 2];
return [4 /*yield*/, this.hasTable(table)];
case 1:
isTableExist = _a.sent();
if (isTableExist)
return [2 /*return*/, Promise.resolve()];
_a.label = 2;
case 2:
upQueries.push(this.createTableSql(table, createForeignKeys));
downQueries.push(this.dropTableSql(table));
if (createIndices) {
table.indices.forEach(function (index) {
// new index may be passed without name. In this case we generate index name manually.
if (!index.name)
index.name = _this.connection.namingStrategy.indexName(table, index.columnNames, index.where);
upQueries.push(_this.createIndexSql(table, index));
downQueries.push(_this.dropIndexSql(index));
});
}
return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
case 3:
_a.sent();
return [2 /*return*/];
}
});
});
};
/**
* Drops the table.
*/
AbstractSqliteQueryRunner.prototype.dropTable = function (tableOrName, ifExist, dropForeignKeys, dropIndices) {
if (dropForeignKeys === void 0) { dropForeignKeys = true; }
if (dropIndices === void 0) { dropIndices = true; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var isTableExist, createForeignKeys, table, _a, upQueries, downQueries;
var _this = this;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!ifExist) return [3 /*break*/, 2];
return [4 /*yield*/, this.hasTable(tableOrName)];
case 1:
isTableExist = _b.sent();
if (!isTableExist)
return [2 /*return*/, Promise.resolve()];
_b.label = 2;
case 2:
createForeignKeys = dropForeignKeys;
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 3];
_a = tableOrName;
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 4:
_a = _b.sent();
_b.label = 5;
case 5:
table = _a;
upQueries = [];
downQueries = [];
if (dropIndices) {
table.indices.forEach(function (index) {
upQueries.push(_this.dropIndexSql(index));
downQueries.push(_this.createIndexSql(table, index));
});
}
upQueries.push(this.dropTableSql(table, ifExist));
downQueries.push(this.createTableSql(table, createForeignKeys));
return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
case 6:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Creates a new view.
*/
AbstractSqliteQueryRunner.prototype.createView = function (view) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var upQueries, downQueries;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
upQueries = [];
downQueries = [];
upQueries.push(this.createViewSql(view));
upQueries.push(this.insertViewDefinitionSql(view));
downQueries.push(this.dropViewSql(view));
downQueries.push(this.deleteViewDefinitionSql(view));
return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
/**
* Drops the view.
*/
AbstractSqliteQueryRunner.prototype.dropView = function (target) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var viewName, view, upQueries, downQueries;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
viewName = target instanceof View_1.View ? target.name : target;
return [4 /*yield*/, this.getCachedView(viewName)];
case 1:
view = _a.sent();
upQueries = [];
downQueries = [];
upQueries.push(this.deleteViewDefinitionSql(view));
upQueries.push(this.dropViewSql(view));
downQueries.push(this.insertViewDefinitionSql(view));
downQueries.push(this.createViewSql(view));
return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
case 2:
_a.sent();
return [2 /*return*/];
}
});
});
};
/**
* Renames the given table.
*/
AbstractSqliteQueryRunner.prototype.renameTable = function (oldTableOrName, newTableName) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var oldTable, _a, newTable, up, down;
var _this = this;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(oldTableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = oldTableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(oldTableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
oldTable = _a;
newTable = oldTable.clone();
newTable.name = newTableName;
up = new Query_1.Query("ALTER TABLE \"" + oldTable.name + "\" RENAME TO \"" + newTableName + "\"");
down = new Query_1.Query("ALTER TABLE \"" + newTableName + "\" RENAME TO \"" + oldTable.name + "\"");
return [4 /*yield*/, this.executeQueries(up, down)];
case 4:
_b.sent();
// rename old table;
oldTable.name = newTable.name;
// rename unique constraints
newTable.uniques.forEach(function (unique) {
unique.name = _this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
});
// rename foreign key constraints
newTable.foreignKeys.forEach(function (foreignKey) {
foreignKey.name = _this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, _this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
});
// rename indices
newTable.indices.forEach(function (index) {
index.name = _this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
});
// recreate table with new constraint names
return [4 /*yield*/, this.recreateTable(newTable, oldTable)];
case 5:
// recreate table with new constraint names
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Creates a new column from the column in the table.
*/
AbstractSqliteQueryRunner.prototype.addColumn = function (tableOrName, column) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
return [2 /*return*/, this.addColumns(table, [column])];
}
});
});
};
/**
* Creates a new columns from the column in the table.
*/
AbstractSqliteQueryRunner.prototype.addColumns = function (tableOrName, columns) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, changedTable;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
changedTable = table.clone();
columns.forEach(function (column) { return changedTable.addColumn(column); });
return [4 /*yield*/, this.recreateTable(changedTable, table)];
case 4:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Renames column in the given table.
*/
AbstractSqliteQueryRunner.prototype.renameColumn = function (tableOrName, oldTableColumnOrName, newTableColumnOrName) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, oldColumn, newColumn;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
oldColumn = oldTableColumnOrName instanceof TableColumn_1.TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });
if (!oldColumn)
throw new error_1.TypeORMError("Column \"" + oldTableColumnOrName + "\" was not found in the \"" + table.name + "\" table.");
newColumn = undefined;
if (newTableColumnOrName instanceof TableColumn_1.TableColumn) {
newColumn = newTableColumnOrName;
}
else {
newColumn = oldColumn.clone();
newColumn.name = newTableColumnOrName;
}
return [2 /*return*/, this.changeColumn(table, oldColumn, newColumn)];
}
});
});
};
/**
* Changes a column in the table.
*/
AbstractSqliteQueryRunner.prototype.changeColumn = function (tableOrName, oldTableColumnOrName, newColumn) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, oldColumn;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
oldColumn = oldTableColumnOrName instanceof TableColumn_1.TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });
if (!oldColumn)
throw new error_1.TypeORMError("Column \"" + oldTableColumnOrName + "\" was not found in the \"" + table.name + "\" table.");
return [4 /*yield*/, this.changeColumns(table, [{ oldColumn: oldColumn, newColumn: newColumn }])];
case 4:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Changes a column in the table.
* Changed column looses all its keys in the db.
*/
AbstractSqliteQueryRunner.prototype.changeColumns = function (tableOrName, changedColumns) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, changedTable;
var _this = this;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
changedTable = table.clone();
changedColumns.forEach(function (changedColumnSet) {
if (changedColumnSet.newColumn.name !== changedColumnSet.oldColumn.name) {
changedTable.findColumnUniques(changedColumnSet.oldColumn).forEach(function (unique) {
unique.columnNames.splice(unique.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
unique.columnNames.push(changedColumnSet.newColumn.name);
unique.name = _this.connection.namingStrategy.uniqueConstraintName(changedTable, unique.columnNames);
});
changedTable.findColumnForeignKeys(changedColumnSet.oldColumn).forEach(function (fk) {
fk.columnNames.splice(fk.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
fk.columnNames.push(changedColumnSet.newColumn.name);
fk.name = _this.connection.namingStrategy.foreignKeyName(changedTable, fk.columnNames, _this.getTablePath(fk), fk.referencedColumnNames);
});
changedTable.findColumnIndices(changedColumnSet.oldColumn).forEach(function (index) {
index.columnNames.splice(index.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
index.columnNames.push(changedColumnSet.newColumn.name);
index.name = _this.connection.namingStrategy.indexName(changedTable, index.columnNames, index.where);
});
}
var originalColumn = changedTable.columns.find(function (column) { return column.name === changedColumnSet.oldColumn.name; });
if (originalColumn)
changedTable.columns[changedTable.columns.indexOf(originalColumn)] = changedColumnSet.newColumn;
});
return [4 /*yield*/, this.recreateTable(changedTable, table)];
case 4:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Drops column in the table.
*/
AbstractSqliteQueryRunner.prototype.dropColumn = function (tableOrName, columnOrName) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, column;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
column = columnOrName instanceof TableColumn_1.TableColumn ? columnOrName : table.findColumnByName(columnOrName);
if (!column)
throw new error_1.TypeORMError("Column \"" + columnOrName + "\" was not found in table \"" + table.name + "\"");
return [4 /*yield*/, this.dropColumns(table, [column])];
case 4:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Drops the columns in the table.
*/
AbstractSqliteQueryRunner.prototype.dropColumns = function (tableOrName, columns) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, changedTable;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
changedTable = table.clone();
columns.forEach(function (column) {
var columnInstance = column instanceof TableColumn_1.TableColumn ? column : table.findColumnByName(column);
if (!columnInstance)
throw new Error("Column \"" + column + "\" was not found in table \"" + table.name + "\"");
changedTable.removeColumn(columnInstance);
changedTable.findColumnUniques(columnInstance).forEach(function (unique) { return changedTable.removeUniqueConstraint(unique); });
changedTable.findColumnIndices(columnInstance).forEach(function (index) { return changedTable.removeIndex(index); });
changedTable.findColumnForeignKeys(columnInstance).forEach(function (fk) { return changedTable.removeForeignKey(fk); });
});
return [4 /*yield*/, this.recreateTable(changedTable, table)];
case 4:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Creates a new primary key.
*/
AbstractSqliteQueryRunner.prototype.createPrimaryKey = function (tableOrName, columnNames) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, changedTable;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
changedTable = table.clone();
changedTable.columns.forEach(function (column) {
if (columnNames.find(function (columnName) { return columnName === column.name; }))
column.isPrimary = true;
});
return [4 /*yield*/, this.recreateTable(changedTable, table)];
case 4:
_b.sent();
// mark columns as primary in original table
table.columns.forEach(function (column) {
if (columnNames.find(function (columnName) { return columnName === column.name; }))
column.isPrimary = true;
});
return [2 /*return*/];
}
});
});
};
/**
* Updates composite primary keys.
*/
AbstractSqliteQueryRunner.prototype.updatePrimaryKeys = function (tableOrName, columns) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Promise.resolve()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
/**
* Drops a primary key.
*/
AbstractSqliteQueryRunner.prototype.dropPrimaryKey = function (tableOrName) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, changedTable;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
changedTable = table.clone();
changedTable.primaryColumns.forEach(function (column) {
column.isPrimary = false;
});
return [4 /*yield*/, this.recreateTable(changedTable, table)];
case 4:
_b.sent();
// mark primary columns as non-primary in original table
table.primaryColumns.forEach(function (column) {
column.isPrimary = false;
});
return [2 /*return*/];
}
});
});
};
/**
* Creates a new unique constraint.
*/
AbstractSqliteQueryRunner.prototype.createUniqueConstraint = function (tableOrName, uniqueConstraint) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.createUniqueConstraints(tableOrName, [uniqueConstraint])];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
/**
* Creates a new unique constraints.
*/
AbstractSqliteQueryRunner.prototype.createUniqueConstraints = function (tableOrName, uniqueConstraints) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, changedTable;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
changedTable = table.clone();
uniqueConstraints.forEach(function (uniqueConstraint) { return changedTable.addUniqueConstraint(uniqueConstraint); });
return [4 /*yield*/, this.recreateTable(changedTable, table)];
case 4:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Drops an unique constraint.
*/
AbstractSqliteQueryRunner.prototype.dropUniqueConstraint = function (tableOrName, uniqueOrName) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, uniqueConstraint;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
uniqueConstraint = uniqueOrName instanceof TableUnique_1.TableUnique ? uniqueOrName : table.uniques.find(function (u) { return u.name === uniqueOrName; });
if (!uniqueConstraint)
throw new error_1.TypeORMError("Supplied unique constraint was not found in table " + table.name);
return [4 /*yield*/, this.dropUniqueConstraints(table, [uniqueConstraint])];
case 4:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Creates an unique constraints.
*/
AbstractSqliteQueryRunner.prototype.dropUniqueConstraints = function (tableOrName, uniqueConstraints) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, changedTable;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
changedTable = table.clone();
uniqueConstraints.forEach(function (uniqueConstraint) { return changedTable.removeUniqueConstraint(uniqueConstraint); });
return [4 /*yield*/, this.recreateTable(changedTable, table)];
case 4:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Creates new check constraint.
*/
AbstractSqliteQueryRunner.prototype.createCheckConstraint = function (tableOrName, checkConstraint) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.createCheckConstraints(tableOrName, [checkConstraint])];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
/**
* Creates new check constraints.
*/
AbstractSqliteQueryRunner.prototype.createCheckConstraints = function (tableOrName, checkConstraints) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, changedTable;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
changedTable = table.clone();
checkConstraints.forEach(function (checkConstraint) { return changedTable.addCheckConstraint(checkConstraint); });
return [4 /*yield*/, this.recreateTable(changedTable, table)];
case 4:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Drops check constraint.
*/
AbstractSqliteQueryRunner.prototype.dropCheckConstraint = function (tableOrName, checkOrName) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, checkConstraint;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
checkConstraint = checkOrName instanceof TableCheck_1.TableCheck ? checkOrName : table.checks.find(function (c) { return c.name === checkOrName; });
if (!checkConstraint)
throw new error_1.TypeORMError("Supplied check constraint was not found in table " + table.name);
return [4 /*yield*/, this.dropCheckConstraints(table, [checkConstraint])];
case 4:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Drops check constraints.
*/
AbstractSqliteQueryRunner.prototype.dropCheckConstraints = function (tableOrName, checkConstraints) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var table, _a, changedTable;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!(tableOrName instanceof Table_1.Table)) return [3 /*break*/, 1];
_a = tableOrName;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];
case 2:
_a = _b.sent();
_b.label = 3;
case 3:
table = _a;
changedTable = table.clone();
checkConstraints.forEach(function (checkConstraint) { return changedTable.removeCheckConstraint(checkConstraint); });
return [4 /*yield*/, this.recreateTable(changedTable, table)];
case 4:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* Creates a new exclusion constraint.
*/
AbstractSqliteQueryRunner.prototype.createExclusionConstraint = function (tableOrName, exclusionConstraint) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
throw new error_1.TypeORMError("Sqlite does not support exclusion constraints.");
});
});
};
/**
* Creates a new exclusion constraints.
*/
AbstractSqliteQueryRunner.prototype.createExclusionConstraints = function (tableOrName, exclusionConstraints) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib