typeorm 0.3.5 → 0.3.6-dev.0418ebc
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 +33 -13
- package/browser/cache/DbQueryResultCache.js +9 -1
- package/browser/cache/DbQueryResultCache.js.map +1 -1
- package/browser/cli-ts-node-commonjs.js +0 -0
- package/browser/cli-ts-node-esm.js +0 -0
- package/browser/data-source/BaseDataSourceOptions.d.ts +1 -2
- package/browser/data-source/BaseDataSourceOptions.js.map +1 -1
- package/browser/data-source/DataSourceOptions.d.ts +2 -1
- package/browser/data-source/DataSourceOptions.js.map +1 -1
- package/browser/decorator/Index.js +1 -0
- package/browser/decorator/Index.js.map +1 -1
- package/browser/decorator/columns/PrimaryColumn.js +4 -1
- package/browser/decorator/columns/PrimaryColumn.js.map +1 -1
- package/browser/decorator/options/ColumnOptions.d.ts +3 -2
- package/browser/decorator/options/ColumnOptions.js.map +1 -1
- package/browser/decorator/options/IndexOptions.d.ts +8 -0
- package/browser/decorator/options/IndexOptions.js.map +1 -1
- package/browser/driver/DriverFactory.js +4 -0
- package/browser/driver/DriverFactory.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.js +133 -11
- 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 +203 -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.js +118 -21
- 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.js +60 -38
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +17 -0
- package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js +3 -0
- package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -0
- package/browser/driver/spanner/SpannerConnectionOptions.d.ts +120 -0
- package/browser/driver/spanner/SpannerConnectionOptions.js +3 -0
- package/browser/driver/spanner/SpannerConnectionOptions.js.map +1 -0
- package/browser/driver/spanner/SpannerDriver.d.ts +241 -0
- package/browser/driver/spanner/SpannerDriver.js +604 -0
- package/browser/driver/spanner/SpannerDriver.js.map +1 -0
- package/browser/driver/spanner/SpannerQueryRunner.d.ts +350 -0
- package/browser/driver/spanner/SpannerQueryRunner.js +1445 -0
- package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -0
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +21 -16
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +165 -20
- 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.js +153 -17
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/driver/types/ColumnTypes.d.ts +1 -1
- package/browser/driver/types/ColumnTypes.js.map +1 -1
- package/browser/driver/types/DatabaseType.d.ts +1 -1
- package/browser/driver/types/DatabaseType.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/EntitySchemaIndexOptions.d.ts +8 -0
- package/browser/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
- package/browser/entity-schema/EntitySchemaTransformer.js +1 -0
- package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/browser/find-options/FindOneOptions.d.ts +1 -1
- package/browser/find-options/FindOneOptions.js.map +1 -1
- package/browser/find-options/FindOptionsUtils.d.ts +2 -1
- package/browser/find-options/FindOptionsUtils.js +2 -1
- package/browser/find-options/FindOptionsUtils.js.map +1 -1
- package/browser/logger/AdvancedConsoleLogger.d.ts +1 -1
- package/browser/logger/AdvancedConsoleLogger.js +1 -1
- package/browser/logger/AdvancedConsoleLogger.js.map +1 -1
- package/browser/metadata/ColumnMetadata.d.ts +2 -2
- package/browser/metadata/ColumnMetadata.js.map +1 -1
- package/browser/metadata/IndexMetadata.d.ts +8 -0
- package/browser/metadata/IndexMetadata.js +9 -0
- package/browser/metadata/IndexMetadata.js.map +1 -1
- package/browser/metadata-args/IndexMetadataArgs.d.ts +8 -0
- package/browser/metadata-args/IndexMetadataArgs.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataBuilder.js +13 -6
- package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js +8 -0
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +13 -6
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/browser/platform/PlatformTools.js +5 -0
- package/browser/platform/PlatformTools.js.map +1 -1
- package/browser/query-builder/InsertQueryBuilder.js +15 -3
- package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
- package/browser/query-builder/QueryExpressionMap.d.ts +1 -1
- package/browser/query-builder/QueryExpressionMap.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
- package/browser/query-builder/SelectQueryBuilder.js +25 -4
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.js +18 -7
- package/browser/query-builder/UpdateQueryBuilder.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/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
- package/browser/schema-builder/RdbmsSchemaBuilder.js +26 -6
- package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/browser/schema-builder/options/TableColumnOptions.d.ts +2 -2
- package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
- package/browser/schema-builder/options/TableIndexOptions.d.ts +8 -0
- package/browser/schema-builder/options/TableIndexOptions.js.map +1 -1
- package/browser/schema-builder/table/TableColumn.d.ts +2 -2
- package/browser/schema-builder/table/TableColumn.js.map +1 -1
- package/browser/schema-builder/table/TableIndex.d.ts +8 -0
- package/browser/schema-builder/table/TableIndex.js +3 -0
- package/browser/schema-builder/table/TableIndex.js.map +1 -1
- package/cache/DbQueryResultCache.js +9 -1
- package/cache/DbQueryResultCache.js.map +1 -1
- package/cli-ts-node-commonjs.js +0 -0
- package/cli-ts-node-esm.js +0 -0
- package/cli.js +0 -0
- package/data-source/BaseDataSourceOptions.d.ts +1 -2
- package/data-source/BaseDataSourceOptions.js.map +1 -1
- package/data-source/DataSourceOptions.d.ts +2 -1
- package/data-source/DataSourceOptions.js.map +1 -1
- package/decorator/Index.js +1 -0
- package/decorator/Index.js.map +1 -1
- package/decorator/columns/PrimaryColumn.js +4 -1
- package/decorator/columns/PrimaryColumn.js.map +1 -1
- package/decorator/options/ColumnOptions.d.ts +3 -2
- package/decorator/options/ColumnOptions.js.map +1 -1
- package/decorator/options/IndexOptions.d.ts +8 -0
- package/decorator/options/IndexOptions.js.map +1 -1
- package/driver/DriverFactory.js +4 -0
- package/driver/DriverFactory.js.map +1 -1
- package/driver/cockroachdb/CockroachDriver.js +4 -1
- package/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +133 -11
- 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 +203 -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.js +118 -21
- 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.js +60 -38
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +17 -0
- package/driver/spanner/SpannerConnectionCredentialsOptions.js +4 -0
- package/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -0
- package/driver/spanner/SpannerConnectionOptions.d.ts +120 -0
- package/driver/spanner/SpannerConnectionOptions.js +4 -0
- package/driver/spanner/SpannerConnectionOptions.js.map +1 -0
- package/driver/spanner/SpannerDriver.d.ts +241 -0
- package/driver/spanner/SpannerDriver.js +608 -0
- package/driver/spanner/SpannerDriver.js.map +1 -0
- package/driver/spanner/SpannerQueryRunner.d.ts +350 -0
- package/driver/spanner/SpannerQueryRunner.js +1449 -0
- package/driver/spanner/SpannerQueryRunner.js.map +1 -0
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +21 -16
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +165 -20
- 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.js +153 -17
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/driver/types/ColumnTypes.d.ts +1 -1
- package/driver/types/ColumnTypes.js.map +1 -1
- package/driver/types/DatabaseType.d.ts +1 -1
- package/driver/types/DatabaseType.js.map +1 -1
- package/entity-schema/EntitySchemaColumnOptions.d.ts +2 -2
- package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
- package/entity-schema/EntitySchemaIndexOptions.d.ts +8 -0
- package/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
- package/entity-schema/EntitySchemaTransformer.js +1 -0
- package/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/find-options/FindOneOptions.d.ts +1 -1
- package/find-options/FindOneOptions.js.map +1 -1
- package/find-options/FindOptionsUtils.d.ts +2 -1
- package/find-options/FindOptionsUtils.js +2 -1
- package/find-options/FindOptionsUtils.js.map +1 -1
- package/logger/AdvancedConsoleLogger.d.ts +1 -1
- package/logger/AdvancedConsoleLogger.js +1 -1
- package/logger/AdvancedConsoleLogger.js.map +1 -1
- package/metadata/ColumnMetadata.d.ts +2 -2
- package/metadata/ColumnMetadata.js.map +1 -1
- package/metadata/IndexMetadata.d.ts +8 -0
- package/metadata/IndexMetadata.js +9 -0
- package/metadata/IndexMetadata.js.map +1 -1
- package/metadata-args/IndexMetadataArgs.d.ts +8 -0
- package/metadata-args/IndexMetadataArgs.js.map +1 -1
- package/metadata-builder/EntityMetadataBuilder.js +13 -6
- package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js +8 -0
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/metadata-builder/JunctionEntityMetadataBuilder.js +13 -6
- package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/package.json +1 -261
- package/platform/PlatformTools.js +5 -0
- package/platform/PlatformTools.js.map +1 -1
- package/query-builder/InsertQueryBuilder.js +15 -3
- package/query-builder/InsertQueryBuilder.js.map +1 -1
- package/query-builder/QueryExpressionMap.d.ts +1 -1
- package/query-builder/QueryExpressionMap.js.map +1 -1
- package/query-builder/SelectQueryBuilder.d.ts +1 -1
- package/query-builder/SelectQueryBuilder.js +25 -4
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/query-builder/UpdateQueryBuilder.js +18 -7
- package/query-builder/UpdateQueryBuilder.js.map +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/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
- package/schema-builder/RdbmsSchemaBuilder.js +26 -6
- package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/schema-builder/options/TableColumnOptions.d.ts +2 -2
- package/schema-builder/options/TableColumnOptions.js.map +1 -1
- package/schema-builder/options/TableIndexOptions.d.ts +8 -0
- package/schema-builder/options/TableIndexOptions.js.map +1 -1
- package/schema-builder/table/TableColumn.d.ts +2 -2
- package/schema-builder/table/TableColumn.js.map +1 -1
- package/schema-builder/table/TableIndex.d.ts +8 -0
- package/schema-builder/table/TableIndex.js +3 -0
- package/schema-builder/table/TableIndex.js.map +1 -1
|
@@ -177,7 +177,7 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
177
177
|
const tableName = InstanceChecker.isTable(tableOrName)
|
|
178
178
|
? tableOrName.name
|
|
179
179
|
: tableOrName;
|
|
180
|
-
const sql = `PRAGMA
|
|
180
|
+
const sql = `PRAGMA table_xinfo(${this.escapePath(tableName)})`;
|
|
181
181
|
const columns = await this.query(sql);
|
|
182
182
|
return !!columns.find((column) => column["name"] === columnName);
|
|
183
183
|
}
|
|
@@ -227,6 +227,23 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
227
227
|
downQueries.push(this.dropIndexSql(index));
|
|
228
228
|
});
|
|
229
229
|
}
|
|
230
|
+
// if table have column with generated type, we must add the expression to the metadata table
|
|
231
|
+
const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
|
|
232
|
+
for (const column of generatedColumns) {
|
|
233
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
234
|
+
table: table.name,
|
|
235
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
236
|
+
name: column.name,
|
|
237
|
+
value: column.asExpression,
|
|
238
|
+
});
|
|
239
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
240
|
+
table: table.name,
|
|
241
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
242
|
+
name: column.name,
|
|
243
|
+
});
|
|
244
|
+
upQueries.push(insertQuery);
|
|
245
|
+
downQueries.push(deleteQuery);
|
|
246
|
+
}
|
|
230
247
|
await this.executeQueries(upQueries, downQueries);
|
|
231
248
|
}
|
|
232
249
|
/**
|
|
@@ -253,6 +270,23 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
253
270
|
}
|
|
254
271
|
upQueries.push(this.dropTableSql(table, ifExist));
|
|
255
272
|
downQueries.push(this.createTableSql(table, createForeignKeys));
|
|
273
|
+
// if table had columns with generated type, we must remove the expression from the metadata table
|
|
274
|
+
const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
|
|
275
|
+
for (const column of generatedColumns) {
|
|
276
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
277
|
+
table: table.name,
|
|
278
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
279
|
+
name: column.name,
|
|
280
|
+
});
|
|
281
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
282
|
+
table: table.name,
|
|
283
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
284
|
+
name: column.name,
|
|
285
|
+
value: column.asExpression,
|
|
286
|
+
});
|
|
287
|
+
upQueries.push(deleteQuery);
|
|
288
|
+
downQueries.push(insertQuery);
|
|
289
|
+
}
|
|
256
290
|
await this.executeQueries(upQueries, downQueries);
|
|
257
291
|
}
|
|
258
292
|
/**
|
|
@@ -825,7 +859,7 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
825
859
|
const sql = dbTable["sql"];
|
|
826
860
|
// load columns and indices
|
|
827
861
|
const [dbColumns, dbIndices, dbForeignKeys] = await Promise.all([
|
|
828
|
-
this.loadPragmaRecords(tablePath, `
|
|
862
|
+
this.loadPragmaRecords(tablePath, `table_xinfo`),
|
|
829
863
|
this.loadPragmaRecords(tablePath, `index_list`),
|
|
830
864
|
this.loadPragmaRecords(tablePath, `foreign_key_list`),
|
|
831
865
|
]);
|
|
@@ -857,7 +891,7 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
857
891
|
}
|
|
858
892
|
}
|
|
859
893
|
// create columns from the loaded columns
|
|
860
|
-
table.columns = dbColumns.map((dbColumn) => {
|
|
894
|
+
table.columns = await Promise.all(dbColumns.map(async (dbColumn) => {
|
|
861
895
|
const tableColumn = new TableColumn();
|
|
862
896
|
tableColumn.name = dbColumn["name"];
|
|
863
897
|
tableColumn.type = dbColumn["type"].toLowerCase();
|
|
@@ -875,6 +909,23 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
875
909
|
if (tableColumn.isGenerated) {
|
|
876
910
|
tableColumn.generationStrategy = "increment";
|
|
877
911
|
}
|
|
912
|
+
if (dbColumn["hidden"] === 2 ||
|
|
913
|
+
dbColumn["hidden"] === 3) {
|
|
914
|
+
tableColumn.generatedType =
|
|
915
|
+
dbColumn["hidden"] === 2 ? "VIRTUAL" : "STORED";
|
|
916
|
+
const asExpressionQuery = await this.selectTypeormMetadataSql({
|
|
917
|
+
table: table.name,
|
|
918
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
919
|
+
name: tableColumn.name,
|
|
920
|
+
});
|
|
921
|
+
const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
|
|
922
|
+
if (results[0] && results[0].value) {
|
|
923
|
+
tableColumn.asExpression = results[0].value;
|
|
924
|
+
}
|
|
925
|
+
else {
|
|
926
|
+
tableColumn.asExpression = "";
|
|
927
|
+
}
|
|
928
|
+
}
|
|
878
929
|
if (tableColumn.type === "varchar") {
|
|
879
930
|
// Check if this is an enum
|
|
880
931
|
const enumMatch = sql.match(new RegExp('"(' +
|
|
@@ -914,7 +965,7 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
914
965
|
}
|
|
915
966
|
}
|
|
916
967
|
return tableColumn;
|
|
917
|
-
});
|
|
968
|
+
}));
|
|
918
969
|
// build foreign keys
|
|
919
970
|
const tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys, (dbForeignKey) => dbForeignKey["id"]);
|
|
920
971
|
table.foreignKeys = tableForeignKeyConstraints.map((foreignKey) => {
|
|
@@ -1208,8 +1259,13 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
1208
1259
|
c += " COLLATE " + column.collation;
|
|
1209
1260
|
if (column.isNullable !== true)
|
|
1210
1261
|
c += " NOT NULL";
|
|
1211
|
-
if (column.
|
|
1212
|
-
c +=
|
|
1262
|
+
if (column.asExpression) {
|
|
1263
|
+
c += ` AS (${column.asExpression}) ${column.generatedType ? column.generatedType : "VIRTUAL"}`;
|
|
1264
|
+
}
|
|
1265
|
+
else {
|
|
1266
|
+
if (column.default !== undefined && column.default !== null)
|
|
1267
|
+
c += " DEFAULT (" + column.default + ")";
|
|
1268
|
+
}
|
|
1213
1269
|
return c;
|
|
1214
1270
|
}
|
|
1215
1271
|
async recreateTable(newTable, oldTable, migrateData = true) {
|
|
@@ -1230,29 +1286,31 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
1230
1286
|
// migrate all data from the old table into new table
|
|
1231
1287
|
if (migrateData) {
|
|
1232
1288
|
let newColumnNames = newTable.columns
|
|
1233
|
-
.
|
|
1234
|
-
.
|
|
1289
|
+
.filter((column) => !column.generatedType)
|
|
1290
|
+
.map((column) => `"${column.name}"`);
|
|
1235
1291
|
let oldColumnNames = oldTable.columns
|
|
1236
|
-
.
|
|
1237
|
-
.
|
|
1238
|
-
if (
|
|
1292
|
+
.filter((column) => !column.generatedType)
|
|
1293
|
+
.map((column) => `"${column.name}"`);
|
|
1294
|
+
if (oldColumnNames.length < newColumnNames.length) {
|
|
1239
1295
|
newColumnNames = newTable.columns
|
|
1240
1296
|
.filter((column) => {
|
|
1241
|
-
|
|
1297
|
+
const oldColumn = oldTable.columns.find((c) => c.name === column.name);
|
|
1298
|
+
if (oldColumn && oldColumn.generatedType)
|
|
1299
|
+
return false;
|
|
1300
|
+
return !column.generatedType && oldColumn;
|
|
1242
1301
|
})
|
|
1243
|
-
.map((column) => `"${column.name}"`)
|
|
1244
|
-
.join(", ");
|
|
1302
|
+
.map((column) => `"${column.name}"`);
|
|
1245
1303
|
}
|
|
1246
|
-
else if (
|
|
1304
|
+
else if (oldColumnNames.length > newColumnNames.length) {
|
|
1247
1305
|
oldColumnNames = oldTable.columns
|
|
1248
1306
|
.filter((column) => {
|
|
1249
|
-
return
|
|
1307
|
+
return (!column.generatedType &&
|
|
1308
|
+
newTable.columns.find((c) => c.name === column.name));
|
|
1250
1309
|
})
|
|
1251
|
-
.map((column) => `"${column.name}"`)
|
|
1252
|
-
.join(", ");
|
|
1310
|
+
.map((column) => `"${column.name}"`);
|
|
1253
1311
|
}
|
|
1254
|
-
upQueries.push(new Query(`INSERT INTO ${this.escapePath(newTable.name)}(${newColumnNames}) SELECT ${oldColumnNames} FROM ${this.escapePath(oldTable.name)}`));
|
|
1255
|
-
downQueries.push(new Query(`INSERT INTO ${this.escapePath(oldTable.name)}(${oldColumnNames}) SELECT ${newColumnNames} FROM ${this.escapePath(newTable.name)}`));
|
|
1312
|
+
upQueries.push(new Query(`INSERT INTO ${this.escapePath(newTable.name)}(${newColumnNames.join(", ")}) SELECT ${oldColumnNames.join(", ")} FROM ${this.escapePath(oldTable.name)}`));
|
|
1313
|
+
downQueries.push(new Query(`INSERT INTO ${this.escapePath(oldTable.name)}(${oldColumnNames.join(", ")}) SELECT ${newColumnNames.join(", ")} FROM ${this.escapePath(newTable.name)}`));
|
|
1256
1314
|
}
|
|
1257
1315
|
// drop old table
|
|
1258
1316
|
upQueries.push(this.dropTableSql(oldTable));
|
|
@@ -1269,6 +1327,93 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
1269
1327
|
upQueries.push(this.createIndexSql(newTable, index));
|
|
1270
1328
|
downQueries.push(this.dropIndexSql(index));
|
|
1271
1329
|
});
|
|
1330
|
+
// update generated columns in "typeorm_metadata" table
|
|
1331
|
+
// Step 1: clear data for removed generated columns
|
|
1332
|
+
oldTable.columns
|
|
1333
|
+
.filter((column) => {
|
|
1334
|
+
const newTableColumn = newTable.columns.find((c) => c.name === column.name);
|
|
1335
|
+
// we should delete record from "typeorm_metadata" if generated column was removed
|
|
1336
|
+
// or it was changed to non-generated
|
|
1337
|
+
return (column.generatedType &&
|
|
1338
|
+
column.asExpression &&
|
|
1339
|
+
(!newTableColumn ||
|
|
1340
|
+
(!newTableColumn.generatedType &&
|
|
1341
|
+
!newTableColumn.asExpression)));
|
|
1342
|
+
})
|
|
1343
|
+
.forEach((column) => {
|
|
1344
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1345
|
+
table: oldTable.name,
|
|
1346
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1347
|
+
name: column.name,
|
|
1348
|
+
});
|
|
1349
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
1350
|
+
table: oldTable.name,
|
|
1351
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1352
|
+
name: column.name,
|
|
1353
|
+
value: column.asExpression,
|
|
1354
|
+
});
|
|
1355
|
+
upQueries.push(deleteQuery);
|
|
1356
|
+
downQueries.push(insertQuery);
|
|
1357
|
+
});
|
|
1358
|
+
// Step 2: add data for new generated columns
|
|
1359
|
+
newTable.columns
|
|
1360
|
+
.filter((column) => column.generatedType &&
|
|
1361
|
+
column.asExpression &&
|
|
1362
|
+
!oldTable.columns.some((c) => c.name === column.name))
|
|
1363
|
+
.forEach((column) => {
|
|
1364
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
1365
|
+
table: newTable.name,
|
|
1366
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1367
|
+
name: column.name,
|
|
1368
|
+
value: column.asExpression,
|
|
1369
|
+
});
|
|
1370
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1371
|
+
table: newTable.name,
|
|
1372
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1373
|
+
name: column.name,
|
|
1374
|
+
});
|
|
1375
|
+
upQueries.push(insertQuery);
|
|
1376
|
+
downQueries.push(deleteQuery);
|
|
1377
|
+
});
|
|
1378
|
+
// Step 3: update changed expressions
|
|
1379
|
+
newTable.columns
|
|
1380
|
+
.filter((column) => column.generatedType && column.asExpression)
|
|
1381
|
+
.forEach((column) => {
|
|
1382
|
+
const oldColumn = oldTable.columns.find((c) => c.name === column.name &&
|
|
1383
|
+
c.generatedType &&
|
|
1384
|
+
column.generatedType &&
|
|
1385
|
+
c.asExpression !== column.asExpression);
|
|
1386
|
+
if (!oldColumn)
|
|
1387
|
+
return;
|
|
1388
|
+
// update expression
|
|
1389
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1390
|
+
table: oldTable.name,
|
|
1391
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1392
|
+
name: oldColumn.name,
|
|
1393
|
+
});
|
|
1394
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
1395
|
+
table: newTable.name,
|
|
1396
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1397
|
+
name: column.name,
|
|
1398
|
+
value: column.asExpression,
|
|
1399
|
+
});
|
|
1400
|
+
upQueries.push(deleteQuery);
|
|
1401
|
+
upQueries.push(insertQuery);
|
|
1402
|
+
// revert update
|
|
1403
|
+
const revertInsertQuery = this.insertTypeormMetadataSql({
|
|
1404
|
+
table: newTable.name,
|
|
1405
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1406
|
+
name: oldColumn.name,
|
|
1407
|
+
value: oldColumn.asExpression,
|
|
1408
|
+
});
|
|
1409
|
+
const revertDeleteQuery = this.deleteTypeormMetadataSql({
|
|
1410
|
+
table: oldTable.name,
|
|
1411
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1412
|
+
name: column.name,
|
|
1413
|
+
});
|
|
1414
|
+
downQueries.push(revertInsertQuery);
|
|
1415
|
+
downQueries.push(revertDeleteQuery);
|
|
1416
|
+
});
|
|
1272
1417
|
await this.executeQueries(upQueries, downQueries);
|
|
1273
1418
|
this.replaceCachedTable(oldTable, newTable);
|
|
1274
1419
|
}
|