typeorm 0.3.6-dev.62518ae → 0.3.6-dev.78df84c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/browser/cache/RedisQueryResultCache.js +3 -0
- package/browser/cache/RedisQueryResultCache.js.map +1 -1
- package/browser/decorator/options/ColumnOptions.d.ts +10 -2
- package/browser/decorator/options/ColumnOptions.js.map +1 -1
- package/browser/decorator/options/JoinColumnOptions.d.ts +4 -0
- package/browser/decorator/options/JoinColumnOptions.js.map +1 -1
- package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
- package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
- package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
- package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
- package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
- package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
- package/browser/decorator/relations/JoinColumn.js +1 -0
- package/browser/decorator/relations/JoinColumn.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachDriver.js +4 -1
- package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +233 -33
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.d.ts +1 -0
- package/browser/driver/mysql/MysqlDriver.js +94 -23
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.js +219 -24
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleDriver.js +79 -15
- package/browser/driver/oracle/OracleDriver.js.map +1 -1
- package/browser/driver/oracle/OracleQueryRunner.d.ts +3 -3
- package/browser/driver/oracle/OracleQueryRunner.js +216 -42
- package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.js +95 -18
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.d.ts +3 -3
- package/browser/driver/postgres/PostgresQueryRunner.js +159 -59
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/spanner/SpannerDriver.d.ts +1 -0
- package/browser/driver/spanner/SpannerDriver.js +52 -13
- package/browser/driver/spanner/SpannerDriver.js.map +1 -1
- package/browser/driver/spanner/SpannerQueryRunner.js +129 -43
- package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +65 -16
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +218 -32
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.d.ts +3 -1
- package/browser/driver/sqlserver/SqlServerDriver.js +99 -26
- package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +251 -37
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/entity-schema/EntitySchemaColumnOptions.d.ts +2 -2
- package/browser/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
- package/browser/entity-schema/EntitySchemaTransformer.js +1 -0
- package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/browser/metadata/ColumnMetadata.d.ts +10 -2
- package/browser/metadata/ColumnMetadata.js +8 -0
- package/browser/metadata/ColumnMetadata.js.map +1 -1
- package/browser/metadata/ForeignKeyMetadata.d.ts +7 -0
- package/browser/metadata/ForeignKeyMetadata.js +4 -1
- package/browser/metadata/ForeignKeyMetadata.js.map +1 -1
- package/browser/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
- package/browser/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js +17 -0
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -0
- package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
- package/browser/query-runner/BaseQueryRunner.d.ts +10 -0
- package/browser/query-runner/BaseQueryRunner.js +25 -1
- package/browser/query-runner/BaseQueryRunner.js.map +1 -1
- package/browser/query-runner/QueryRunner.d.ts +2 -2
- package/browser/query-runner/QueryRunner.js.map +1 -1
- package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
- package/browser/schema-builder/RdbmsSchemaBuilder.js +11 -5
- package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/browser/schema-builder/options/TableColumnOptions.d.ts +10 -2
- package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
- package/browser/schema-builder/table/TableColumn.d.ts +6 -2
- package/browser/schema-builder/table/TableColumn.js +2 -0
- package/browser/schema-builder/table/TableColumn.js.map +1 -1
- package/browser/schema-builder/util/TableUtils.js +1 -0
- package/browser/schema-builder/util/TableUtils.js.map +1 -1
- package/cache/RedisQueryResultCache.js +3 -0
- package/cache/RedisQueryResultCache.js.map +1 -1
- package/commands/InitCommand.js +1 -1
- package/commands/InitCommand.js.map +1 -1
- package/commands/MigrationGenerateCommand.js +3 -2
- package/commands/MigrationGenerateCommand.js.map +1 -1
- package/decorator/options/ColumnOptions.d.ts +10 -2
- package/decorator/options/ColumnOptions.js.map +1 -1
- package/decorator/options/JoinColumnOptions.d.ts +4 -0
- package/decorator/options/JoinColumnOptions.js.map +1 -1
- package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
- package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
- package/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
- package/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
- package/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
- package/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
- package/decorator/relations/JoinColumn.js +1 -0
- package/decorator/relations/JoinColumn.js.map +1 -1
- package/driver/cockroachdb/CockroachDriver.js +4 -1
- package/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
- package/driver/cockroachdb/CockroachQueryRunner.js +233 -33
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/mysql/MysqlDriver.d.ts +1 -0
- package/driver/mysql/MysqlDriver.js +94 -23
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.js +219 -24
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/oracle/OracleDriver.js +79 -15
- package/driver/oracle/OracleDriver.js.map +1 -1
- package/driver/oracle/OracleQueryRunner.d.ts +3 -3
- package/driver/oracle/OracleQueryRunner.js +216 -42
- package/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresDriver.js +95 -18
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.d.ts +3 -3
- package/driver/postgres/PostgresQueryRunner.js +159 -59
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/spanner/SpannerDriver.d.ts +1 -0
- package/driver/spanner/SpannerDriver.js +52 -13
- package/driver/spanner/SpannerDriver.js.map +1 -1
- package/driver/spanner/SpannerQueryRunner.js +129 -43
- package/driver/spanner/SpannerQueryRunner.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +65 -16
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +218 -32
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqlserver/SqlServerDriver.d.ts +3 -1
- package/driver/sqlserver/SqlServerDriver.js +99 -26
- package/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
- package/driver/sqlserver/SqlServerQueryRunner.js +251 -37
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/entity-schema/EntitySchemaColumnOptions.d.ts +2 -2
- package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
- package/entity-schema/EntitySchemaTransformer.js +1 -0
- package/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/metadata/ColumnMetadata.d.ts +10 -2
- package/metadata/ColumnMetadata.js +8 -0
- package/metadata/ColumnMetadata.js.map +1 -1
- package/metadata/ForeignKeyMetadata.d.ts +7 -0
- package/metadata/ForeignKeyMetadata.js +4 -1
- package/metadata/ForeignKeyMetadata.js.map +1 -1
- package/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
- package/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js +17 -0
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
- package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/RelationJoinColumnBuilder.js +2 -0
- package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
- package/package.json +1 -1
- package/query-runner/BaseQueryRunner.d.ts +10 -0
- package/query-runner/BaseQueryRunner.js +25 -1
- package/query-runner/BaseQueryRunner.js.map +1 -1
- package/query-runner/QueryRunner.d.ts +2 -2
- package/query-runner/QueryRunner.js.map +1 -1
- package/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
- package/schema-builder/RdbmsSchemaBuilder.js +11 -5
- package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/schema-builder/options/TableColumnOptions.d.ts +10 -2
- package/schema-builder/options/TableColumnOptions.js.map +1 -1
- package/schema-builder/table/TableColumn.d.ts +6 -2
- package/schema-builder/table/TableColumn.js +2 -0
- package/schema-builder/table/TableColumn.js.map +1 -1
- package/schema-builder/util/TableUtils.js +1 -0
- package/schema-builder/util/TableUtils.js.map +1 -1
|
@@ -180,7 +180,7 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
180
180
|
const tableName = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
|
|
181
181
|
? tableOrName.name
|
|
182
182
|
: tableOrName;
|
|
183
|
-
const sql = `PRAGMA
|
|
183
|
+
const sql = `PRAGMA table_xinfo(${this.escapePath(tableName)})`;
|
|
184
184
|
const columns = await this.query(sql);
|
|
185
185
|
return !!columns.find((column) => column["name"] === columnName);
|
|
186
186
|
}
|
|
@@ -230,6 +230,23 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
230
230
|
downQueries.push(this.dropIndexSql(index));
|
|
231
231
|
});
|
|
232
232
|
}
|
|
233
|
+
// if table have column with generated type, we must add the expression to the metadata table
|
|
234
|
+
const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
|
|
235
|
+
for (const column of generatedColumns) {
|
|
236
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
237
|
+
table: table.name,
|
|
238
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
239
|
+
name: column.name,
|
|
240
|
+
value: column.asExpression,
|
|
241
|
+
});
|
|
242
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
243
|
+
table: table.name,
|
|
244
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
245
|
+
name: column.name,
|
|
246
|
+
});
|
|
247
|
+
upQueries.push(insertQuery);
|
|
248
|
+
downQueries.push(deleteQuery);
|
|
249
|
+
}
|
|
233
250
|
await this.executeQueries(upQueries, downQueries);
|
|
234
251
|
}
|
|
235
252
|
/**
|
|
@@ -256,6 +273,23 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
256
273
|
}
|
|
257
274
|
upQueries.push(this.dropTableSql(table, ifExist));
|
|
258
275
|
downQueries.push(this.createTableSql(table, createForeignKeys));
|
|
276
|
+
// if table had columns with generated type, we must remove the expression from the metadata table
|
|
277
|
+
const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
|
|
278
|
+
for (const column of generatedColumns) {
|
|
279
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
280
|
+
table: table.name,
|
|
281
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
282
|
+
name: column.name,
|
|
283
|
+
});
|
|
284
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
285
|
+
table: table.name,
|
|
286
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
287
|
+
name: column.name,
|
|
288
|
+
value: column.asExpression,
|
|
289
|
+
});
|
|
290
|
+
upQueries.push(deleteQuery);
|
|
291
|
+
downQueries.push(insertQuery);
|
|
292
|
+
}
|
|
259
293
|
await this.executeQueries(upQueries, downQueries);
|
|
260
294
|
}
|
|
261
295
|
/**
|
|
@@ -297,20 +331,32 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
297
331
|
const up = new Query_1.Query(`ALTER TABLE ${this.escapePath(oldTable.name)} RENAME TO ${this.escapePath(newTableName)}`);
|
|
298
332
|
const down = new Query_1.Query(`ALTER TABLE ${this.escapePath(newTableName)} RENAME TO ${this.escapePath(oldTable.name)}`);
|
|
299
333
|
await this.executeQueries(up, down);
|
|
300
|
-
// rename old table;
|
|
301
|
-
oldTable.name = newTable.name;
|
|
302
334
|
// rename unique constraints
|
|
303
335
|
newTable.uniques.forEach((unique) => {
|
|
336
|
+
const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
|
|
337
|
+
// Skip renaming if Unique has user defined constraint name
|
|
338
|
+
if (unique.name !== oldUniqueName)
|
|
339
|
+
return;
|
|
304
340
|
unique.name = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
|
|
305
341
|
});
|
|
306
342
|
// rename foreign key constraints
|
|
307
343
|
newTable.foreignKeys.forEach((foreignKey) => {
|
|
344
|
+
const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
345
|
+
// Skip renaming if foreign key has user defined constraint name
|
|
346
|
+
if (foreignKey.name !== oldForeignKeyName)
|
|
347
|
+
return;
|
|
308
348
|
foreignKey.name = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
309
349
|
});
|
|
310
350
|
// rename indices
|
|
311
351
|
newTable.indices.forEach((index) => {
|
|
352
|
+
const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
|
|
353
|
+
// Skip renaming if Index has user defined constraint name
|
|
354
|
+
if (index.name !== oldIndexName)
|
|
355
|
+
return;
|
|
312
356
|
index.name = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
|
|
313
357
|
});
|
|
358
|
+
// rename old table;
|
|
359
|
+
oldTable.name = newTable.name;
|
|
314
360
|
// recreate table with new constraint names
|
|
315
361
|
await this.recreateTable(newTable, oldTable);
|
|
316
362
|
}
|
|
@@ -385,24 +431,38 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
385
431
|
changedTable
|
|
386
432
|
.findColumnUniques(changedColumnSet.oldColumn)
|
|
387
433
|
.forEach((unique) => {
|
|
434
|
+
const uniqueName = this.connection.namingStrategy.uniqueConstraintName(table, unique.columnNames);
|
|
388
435
|
unique.columnNames.splice(unique.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
|
|
389
436
|
unique.columnNames.push(changedColumnSet.newColumn.name);
|
|
390
|
-
|
|
391
|
-
|
|
437
|
+
// rename Unique only if it has default constraint name
|
|
438
|
+
if (unique.name === uniqueName) {
|
|
439
|
+
unique.name =
|
|
440
|
+
this.connection.namingStrategy.uniqueConstraintName(changedTable, unique.columnNames);
|
|
441
|
+
}
|
|
392
442
|
});
|
|
393
443
|
changedTable
|
|
394
444
|
.findColumnForeignKeys(changedColumnSet.oldColumn)
|
|
395
|
-
.forEach((
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
445
|
+
.forEach((foreignKey) => {
|
|
446
|
+
const foreignKeyName = this.connection.namingStrategy.foreignKeyName(table, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
447
|
+
foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
|
|
448
|
+
foreignKey.columnNames.push(changedColumnSet.newColumn.name);
|
|
449
|
+
// rename FK only if it has default constraint name
|
|
450
|
+
if (foreignKey.name === foreignKeyName) {
|
|
451
|
+
foreignKey.name =
|
|
452
|
+
this.connection.namingStrategy.foreignKeyName(changedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
453
|
+
}
|
|
399
454
|
});
|
|
400
455
|
changedTable
|
|
401
456
|
.findColumnIndices(changedColumnSet.oldColumn)
|
|
402
457
|
.forEach((index) => {
|
|
458
|
+
const indexName = this.connection.namingStrategy.indexName(table, index.columnNames, index.where);
|
|
403
459
|
index.columnNames.splice(index.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
|
|
404
460
|
index.columnNames.push(changedColumnSet.newColumn.name);
|
|
405
|
-
|
|
461
|
+
// rename Index only if it has default constraint name
|
|
462
|
+
if (index.name === indexName) {
|
|
463
|
+
index.name =
|
|
464
|
+
this.connection.namingStrategy.indexName(changedTable, index.columnNames, index.where);
|
|
465
|
+
}
|
|
406
466
|
});
|
|
407
467
|
}
|
|
408
468
|
const originalColumn = changedTable.columns.find((column) => column.name === changedColumnSet.oldColumn.name);
|
|
@@ -828,7 +888,7 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
828
888
|
const sql = dbTable["sql"];
|
|
829
889
|
// load columns and indices
|
|
830
890
|
const [dbColumns, dbIndices, dbForeignKeys] = await Promise.all([
|
|
831
|
-
this.loadPragmaRecords(tablePath, `
|
|
891
|
+
this.loadPragmaRecords(tablePath, `table_xinfo`),
|
|
832
892
|
this.loadPragmaRecords(tablePath, `index_list`),
|
|
833
893
|
this.loadPragmaRecords(tablePath, `foreign_key_list`),
|
|
834
894
|
]);
|
|
@@ -860,7 +920,7 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
860
920
|
}
|
|
861
921
|
}
|
|
862
922
|
// create columns from the loaded columns
|
|
863
|
-
table.columns = dbColumns.map((dbColumn) => {
|
|
923
|
+
table.columns = await Promise.all(dbColumns.map(async (dbColumn) => {
|
|
864
924
|
const tableColumn = new TableColumn_1.TableColumn();
|
|
865
925
|
tableColumn.name = dbColumn["name"];
|
|
866
926
|
tableColumn.type = dbColumn["type"].toLowerCase();
|
|
@@ -878,6 +938,23 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
878
938
|
if (tableColumn.isGenerated) {
|
|
879
939
|
tableColumn.generationStrategy = "increment";
|
|
880
940
|
}
|
|
941
|
+
if (dbColumn["hidden"] === 2 ||
|
|
942
|
+
dbColumn["hidden"] === 3) {
|
|
943
|
+
tableColumn.generatedType =
|
|
944
|
+
dbColumn["hidden"] === 2 ? "VIRTUAL" : "STORED";
|
|
945
|
+
const asExpressionQuery = await this.selectTypeormMetadataSql({
|
|
946
|
+
table: table.name,
|
|
947
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
948
|
+
name: tableColumn.name,
|
|
949
|
+
});
|
|
950
|
+
const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
|
|
951
|
+
if (results[0] && results[0].value) {
|
|
952
|
+
tableColumn.asExpression = results[0].value;
|
|
953
|
+
}
|
|
954
|
+
else {
|
|
955
|
+
tableColumn.asExpression = "";
|
|
956
|
+
}
|
|
957
|
+
}
|
|
881
958
|
if (tableColumn.type === "varchar") {
|
|
882
959
|
// Check if this is an enum
|
|
883
960
|
const enumMatch = sql.match(new RegExp('"(' +
|
|
@@ -917,7 +994,20 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
917
994
|
}
|
|
918
995
|
}
|
|
919
996
|
return tableColumn;
|
|
920
|
-
});
|
|
997
|
+
}));
|
|
998
|
+
// find unique constraints from CREATE TABLE sql
|
|
999
|
+
let fkResult;
|
|
1000
|
+
const fkMappings = [];
|
|
1001
|
+
const fkRegex = /CONSTRAINT "([^"]*)" FOREIGN KEY \((.*?)\) REFERENCES "([^"]*)" /g;
|
|
1002
|
+
while ((fkResult = fkRegex.exec(sql)) !== null) {
|
|
1003
|
+
fkMappings.push({
|
|
1004
|
+
name: fkResult[1],
|
|
1005
|
+
columns: fkResult[2]
|
|
1006
|
+
.substr(1, fkResult[2].length - 2)
|
|
1007
|
+
.split(`", "`),
|
|
1008
|
+
referencedTableName: fkResult[3],
|
|
1009
|
+
});
|
|
1010
|
+
}
|
|
921
1011
|
// build foreign keys
|
|
922
1012
|
const tableForeignKeyConstraints = OrmUtils_1.OrmUtils.uniq(dbForeignKeys, (dbForeignKey) => dbForeignKey["id"]);
|
|
923
1013
|
table.foreignKeys = tableForeignKeyConstraints.map((foreignKey) => {
|
|
@@ -925,10 +1015,12 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
925
1015
|
dbForeignKey["table"] === foreignKey["table"]);
|
|
926
1016
|
const columnNames = ownForeignKeys.map((dbForeignKey) => dbForeignKey["from"]);
|
|
927
1017
|
const referencedColumnNames = ownForeignKeys.map((dbForeignKey) => dbForeignKey["to"]);
|
|
928
|
-
//
|
|
929
|
-
const
|
|
1018
|
+
// find related foreign key mapping
|
|
1019
|
+
const fkMapping = fkMappings.find((it) => it.referencedTableName ===
|
|
1020
|
+
foreignKey["table"] &&
|
|
1021
|
+
it.columns.every((column) => columnNames.indexOf(column) !== -1));
|
|
930
1022
|
return new TableForeignKey_1.TableForeignKey({
|
|
931
|
-
name:
|
|
1023
|
+
name: fkMapping.name,
|
|
932
1024
|
columnNames: columnNames,
|
|
933
1025
|
referencedTableName: foreignKey["table"],
|
|
934
1026
|
referencedColumnNames: referencedColumnNames,
|
|
@@ -1211,8 +1303,13 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1211
1303
|
c += " COLLATE " + column.collation;
|
|
1212
1304
|
if (column.isNullable !== true)
|
|
1213
1305
|
c += " NOT NULL";
|
|
1214
|
-
if (column.
|
|
1215
|
-
c +=
|
|
1306
|
+
if (column.asExpression) {
|
|
1307
|
+
c += ` AS (${column.asExpression}) ${column.generatedType ? column.generatedType : "VIRTUAL"}`;
|
|
1308
|
+
}
|
|
1309
|
+
else {
|
|
1310
|
+
if (column.default !== undefined && column.default !== null)
|
|
1311
|
+
c += " DEFAULT (" + column.default + ")";
|
|
1312
|
+
}
|
|
1216
1313
|
return c;
|
|
1217
1314
|
}
|
|
1218
1315
|
async recreateTable(newTable, oldTable, migrateData = true) {
|
|
@@ -1233,29 +1330,31 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1233
1330
|
// migrate all data from the old table into new table
|
|
1234
1331
|
if (migrateData) {
|
|
1235
1332
|
let newColumnNames = newTable.columns
|
|
1236
|
-
.
|
|
1237
|
-
.
|
|
1333
|
+
.filter((column) => !column.generatedType)
|
|
1334
|
+
.map((column) => `"${column.name}"`);
|
|
1238
1335
|
let oldColumnNames = oldTable.columns
|
|
1239
|
-
.
|
|
1240
|
-
.
|
|
1241
|
-
if (
|
|
1336
|
+
.filter((column) => !column.generatedType)
|
|
1337
|
+
.map((column) => `"${column.name}"`);
|
|
1338
|
+
if (oldColumnNames.length < newColumnNames.length) {
|
|
1242
1339
|
newColumnNames = newTable.columns
|
|
1243
1340
|
.filter((column) => {
|
|
1244
|
-
|
|
1341
|
+
const oldColumn = oldTable.columns.find((c) => c.name === column.name);
|
|
1342
|
+
if (oldColumn && oldColumn.generatedType)
|
|
1343
|
+
return false;
|
|
1344
|
+
return !column.generatedType && oldColumn;
|
|
1245
1345
|
})
|
|
1246
|
-
.map((column) => `"${column.name}"`)
|
|
1247
|
-
.join(", ");
|
|
1346
|
+
.map((column) => `"${column.name}"`);
|
|
1248
1347
|
}
|
|
1249
|
-
else if (
|
|
1348
|
+
else if (oldColumnNames.length > newColumnNames.length) {
|
|
1250
1349
|
oldColumnNames = oldTable.columns
|
|
1251
1350
|
.filter((column) => {
|
|
1252
|
-
return
|
|
1351
|
+
return (!column.generatedType &&
|
|
1352
|
+
newTable.columns.find((c) => c.name === column.name));
|
|
1253
1353
|
})
|
|
1254
|
-
.map((column) => `"${column.name}"`)
|
|
1255
|
-
.join(", ");
|
|
1354
|
+
.map((column) => `"${column.name}"`);
|
|
1256
1355
|
}
|
|
1257
|
-
upQueries.push(new Query_1.Query(`INSERT INTO ${this.escapePath(newTable.name)}(${newColumnNames}) SELECT ${oldColumnNames} FROM ${this.escapePath(oldTable.name)}`));
|
|
1258
|
-
downQueries.push(new Query_1.Query(`INSERT INTO ${this.escapePath(oldTable.name)}(${oldColumnNames}) SELECT ${newColumnNames} FROM ${this.escapePath(newTable.name)}`));
|
|
1356
|
+
upQueries.push(new Query_1.Query(`INSERT INTO ${this.escapePath(newTable.name)}(${newColumnNames.join(", ")}) SELECT ${oldColumnNames.join(", ")} FROM ${this.escapePath(oldTable.name)}`));
|
|
1357
|
+
downQueries.push(new Query_1.Query(`INSERT INTO ${this.escapePath(oldTable.name)}(${oldColumnNames.join(", ")}) SELECT ${newColumnNames.join(", ")} FROM ${this.escapePath(newTable.name)}`));
|
|
1259
1358
|
}
|
|
1260
1359
|
// drop old table
|
|
1261
1360
|
upQueries.push(this.dropTableSql(oldTable));
|
|
@@ -1272,6 +1371,93 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1272
1371
|
upQueries.push(this.createIndexSql(newTable, index));
|
|
1273
1372
|
downQueries.push(this.dropIndexSql(index));
|
|
1274
1373
|
});
|
|
1374
|
+
// update generated columns in "typeorm_metadata" table
|
|
1375
|
+
// Step 1: clear data for removed generated columns
|
|
1376
|
+
oldTable.columns
|
|
1377
|
+
.filter((column) => {
|
|
1378
|
+
const newTableColumn = newTable.columns.find((c) => c.name === column.name);
|
|
1379
|
+
// we should delete record from "typeorm_metadata" if generated column was removed
|
|
1380
|
+
// or it was changed to non-generated
|
|
1381
|
+
return (column.generatedType &&
|
|
1382
|
+
column.asExpression &&
|
|
1383
|
+
(!newTableColumn ||
|
|
1384
|
+
(!newTableColumn.generatedType &&
|
|
1385
|
+
!newTableColumn.asExpression)));
|
|
1386
|
+
})
|
|
1387
|
+
.forEach((column) => {
|
|
1388
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1389
|
+
table: oldTable.name,
|
|
1390
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
1391
|
+
name: column.name,
|
|
1392
|
+
});
|
|
1393
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
1394
|
+
table: oldTable.name,
|
|
1395
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
1396
|
+
name: column.name,
|
|
1397
|
+
value: column.asExpression,
|
|
1398
|
+
});
|
|
1399
|
+
upQueries.push(deleteQuery);
|
|
1400
|
+
downQueries.push(insertQuery);
|
|
1401
|
+
});
|
|
1402
|
+
// Step 2: add data for new generated columns
|
|
1403
|
+
newTable.columns
|
|
1404
|
+
.filter((column) => column.generatedType &&
|
|
1405
|
+
column.asExpression &&
|
|
1406
|
+
!oldTable.columns.some((c) => c.name === column.name))
|
|
1407
|
+
.forEach((column) => {
|
|
1408
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
1409
|
+
table: newTable.name,
|
|
1410
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
1411
|
+
name: column.name,
|
|
1412
|
+
value: column.asExpression,
|
|
1413
|
+
});
|
|
1414
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1415
|
+
table: newTable.name,
|
|
1416
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
1417
|
+
name: column.name,
|
|
1418
|
+
});
|
|
1419
|
+
upQueries.push(insertQuery);
|
|
1420
|
+
downQueries.push(deleteQuery);
|
|
1421
|
+
});
|
|
1422
|
+
// Step 3: update changed expressions
|
|
1423
|
+
newTable.columns
|
|
1424
|
+
.filter((column) => column.generatedType && column.asExpression)
|
|
1425
|
+
.forEach((column) => {
|
|
1426
|
+
const oldColumn = oldTable.columns.find((c) => c.name === column.name &&
|
|
1427
|
+
c.generatedType &&
|
|
1428
|
+
column.generatedType &&
|
|
1429
|
+
c.asExpression !== column.asExpression);
|
|
1430
|
+
if (!oldColumn)
|
|
1431
|
+
return;
|
|
1432
|
+
// update expression
|
|
1433
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1434
|
+
table: oldTable.name,
|
|
1435
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
1436
|
+
name: oldColumn.name,
|
|
1437
|
+
});
|
|
1438
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
1439
|
+
table: newTable.name,
|
|
1440
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
1441
|
+
name: column.name,
|
|
1442
|
+
value: column.asExpression,
|
|
1443
|
+
});
|
|
1444
|
+
upQueries.push(deleteQuery);
|
|
1445
|
+
upQueries.push(insertQuery);
|
|
1446
|
+
// revert update
|
|
1447
|
+
const revertInsertQuery = this.insertTypeormMetadataSql({
|
|
1448
|
+
table: newTable.name,
|
|
1449
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
1450
|
+
name: oldColumn.name,
|
|
1451
|
+
value: oldColumn.asExpression,
|
|
1452
|
+
});
|
|
1453
|
+
const revertDeleteQuery = this.deleteTypeormMetadataSql({
|
|
1454
|
+
table: oldTable.name,
|
|
1455
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
1456
|
+
name: column.name,
|
|
1457
|
+
});
|
|
1458
|
+
downQueries.push(revertInsertQuery);
|
|
1459
|
+
downQueries.push(revertDeleteQuery);
|
|
1460
|
+
});
|
|
1275
1461
|
await this.executeQueries(upQueries, downQueries);
|
|
1276
1462
|
this.replaceCachedTable(oldTable, newTable);
|
|
1277
1463
|
}
|