typeorm 0.3.6-dev.b84cb9b → 0.3.6-dev.bbdc20f
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/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.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/mongodb/typings.d.ts +5 -5
- package/browser/driver/mongodb/typings.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/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.d.ts +1 -1
- package/browser/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
- package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.d.ts +2 -2
- package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
- package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.d.ts +2 -2
- package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
- package/browser/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.d.ts +2 -2
- package/browser/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
- package/browser/entity-manager/EntityManager.js +1 -1
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/entity-schema/EntitySchemaColumnOptions.d.ts +6 -2
- package/browser/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
- package/browser/entity-schema/EntitySchemaTransformer.js +2 -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/EntityMetadata.js +1 -1
- package/browser/metadata/EntityMetadata.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/migration/MigrationExecutor.js +1 -1
- package/browser/migration/MigrationExecutor.js.map +1 -1
- package/browser/persistence/SubjectDatabaseEntityLoader.d.ts +1 -1
- package/browser/persistence/SubjectDatabaseEntityLoader.js +1 -1
- package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
- package/browser/persistence/SubjectExecutor.js +1 -1
- package/browser/persistence/SubjectExecutor.js.map +1 -1
- package/browser/persistence/subject-builder/CascadesSubjectBuilder.d.ts +1 -1
- package/browser/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
- package/browser/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
- package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js +1 -1
- package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
- package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
- package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
- package/browser/query-builder/QueryBuilder.d.ts +1 -1
- package/browser/query-builder/QueryBuilder.js +15 -15
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/QueryExpressionMap.d.ts +1 -1
- package/browser/query-builder/QueryExpressionMap.js +1 -1
- package/browser/query-builder/QueryExpressionMap.js.map +1 -1
- package/browser/query-builder/ReturningResultsEntityUpdator.js +2 -2
- package/browser/query-builder/ReturningResultsEntityUpdator.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/options/TableForeignKeyOptions.d.ts +1 -1
- package/browser/schema-builder/options/TableForeignKeyOptions.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/browser/util/OrmUtils.d.ts +1 -1
- package/browser/util/OrmUtils.js +4 -4
- package/browser/util/OrmUtils.js.map +1 -1
- package/browser/util/escapeRegExp.d.ts +1 -0
- package/browser/util/escapeRegExp.js +6 -0
- package/browser/util/escapeRegExp.js.map +1 -0
- 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/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
- package/driver/aurora-mysql/AuroraMysqlDriver.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/mongodb/typings.d.ts +5 -5
- package/driver/mongodb/typings.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/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.d.ts +1 -1
- package/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
- package/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.d.ts +2 -2
- package/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
- package/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.d.ts +2 -2
- package/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
- package/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.d.ts +2 -2
- package/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
- package/entity-manager/EntityManager.js +1 -1
- package/entity-manager/EntityManager.js.map +1 -1
- package/entity-schema/EntitySchemaColumnOptions.d.ts +6 -2
- package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
- package/entity-schema/EntitySchemaTransformer.js +2 -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/EntityMetadata.js +1 -1
- package/metadata/EntityMetadata.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/migration/MigrationExecutor.js +1 -1
- package/migration/MigrationExecutor.js.map +1 -1
- package/package.json +1 -1
- package/persistence/SubjectDatabaseEntityLoader.d.ts +1 -1
- package/persistence/SubjectDatabaseEntityLoader.js +1 -1
- package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
- package/persistence/SubjectExecutor.js +1 -1
- package/persistence/SubjectExecutor.js.map +1 -1
- package/persistence/subject-builder/CascadesSubjectBuilder.d.ts +1 -1
- package/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
- package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
- package/persistence/subject-builder/ManyToManySubjectBuilder.js +1 -1
- package/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
- package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
- package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
- package/query-builder/QueryBuilder.d.ts +1 -1
- package/query-builder/QueryBuilder.js +15 -15
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/QueryExpressionMap.d.ts +1 -1
- package/query-builder/QueryExpressionMap.js +1 -1
- package/query-builder/QueryExpressionMap.js.map +1 -1
- package/query-builder/ReturningResultsEntityUpdator.js +2 -2
- package/query-builder/ReturningResultsEntityUpdator.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/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/options/TableForeignKeyOptions.d.ts +1 -1
- package/schema-builder/options/TableForeignKeyOptions.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
- package/util/OrmUtils.d.ts +1 -1
- package/util/OrmUtils.js +4 -4
- package/util/OrmUtils.js.map +1 -1
- package/util/escapeRegExp.d.ts +1 -0
- package/util/escapeRegExp.js +10 -0
- package/util/escapeRegExp.js.map +1 -0
|
@@ -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
|
/**
|
|
@@ -294,20 +328,32 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
294
328
|
const up = new Query(`ALTER TABLE ${this.escapePath(oldTable.name)} RENAME TO ${this.escapePath(newTableName)}`);
|
|
295
329
|
const down = new Query(`ALTER TABLE ${this.escapePath(newTableName)} RENAME TO ${this.escapePath(oldTable.name)}`);
|
|
296
330
|
await this.executeQueries(up, down);
|
|
297
|
-
// rename old table;
|
|
298
|
-
oldTable.name = newTable.name;
|
|
299
331
|
// rename unique constraints
|
|
300
332
|
newTable.uniques.forEach((unique) => {
|
|
333
|
+
const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
|
|
334
|
+
// Skip renaming if Unique has user defined constraint name
|
|
335
|
+
if (unique.name !== oldUniqueName)
|
|
336
|
+
return;
|
|
301
337
|
unique.name = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
|
|
302
338
|
});
|
|
303
339
|
// rename foreign key constraints
|
|
304
340
|
newTable.foreignKeys.forEach((foreignKey) => {
|
|
341
|
+
const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
342
|
+
// Skip renaming if foreign key has user defined constraint name
|
|
343
|
+
if (foreignKey.name !== oldForeignKeyName)
|
|
344
|
+
return;
|
|
305
345
|
foreignKey.name = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
306
346
|
});
|
|
307
347
|
// rename indices
|
|
308
348
|
newTable.indices.forEach((index) => {
|
|
349
|
+
const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
|
|
350
|
+
// Skip renaming if Index has user defined constraint name
|
|
351
|
+
if (index.name !== oldIndexName)
|
|
352
|
+
return;
|
|
309
353
|
index.name = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
|
|
310
354
|
});
|
|
355
|
+
// rename old table;
|
|
356
|
+
oldTable.name = newTable.name;
|
|
311
357
|
// recreate table with new constraint names
|
|
312
358
|
await this.recreateTable(newTable, oldTable);
|
|
313
359
|
}
|
|
@@ -382,24 +428,38 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
382
428
|
changedTable
|
|
383
429
|
.findColumnUniques(changedColumnSet.oldColumn)
|
|
384
430
|
.forEach((unique) => {
|
|
431
|
+
const uniqueName = this.connection.namingStrategy.uniqueConstraintName(table, unique.columnNames);
|
|
385
432
|
unique.columnNames.splice(unique.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
|
|
386
433
|
unique.columnNames.push(changedColumnSet.newColumn.name);
|
|
387
|
-
|
|
388
|
-
|
|
434
|
+
// rename Unique only if it has default constraint name
|
|
435
|
+
if (unique.name === uniqueName) {
|
|
436
|
+
unique.name =
|
|
437
|
+
this.connection.namingStrategy.uniqueConstraintName(changedTable, unique.columnNames);
|
|
438
|
+
}
|
|
389
439
|
});
|
|
390
440
|
changedTable
|
|
391
441
|
.findColumnForeignKeys(changedColumnSet.oldColumn)
|
|
392
|
-
.forEach((
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
442
|
+
.forEach((foreignKey) => {
|
|
443
|
+
const foreignKeyName = this.connection.namingStrategy.foreignKeyName(table, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
444
|
+
foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
|
|
445
|
+
foreignKey.columnNames.push(changedColumnSet.newColumn.name);
|
|
446
|
+
// rename FK only if it has default constraint name
|
|
447
|
+
if (foreignKey.name === foreignKeyName) {
|
|
448
|
+
foreignKey.name =
|
|
449
|
+
this.connection.namingStrategy.foreignKeyName(changedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
450
|
+
}
|
|
396
451
|
});
|
|
397
452
|
changedTable
|
|
398
453
|
.findColumnIndices(changedColumnSet.oldColumn)
|
|
399
454
|
.forEach((index) => {
|
|
455
|
+
const indexName = this.connection.namingStrategy.indexName(table, index.columnNames, index.where);
|
|
400
456
|
index.columnNames.splice(index.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
|
|
401
457
|
index.columnNames.push(changedColumnSet.newColumn.name);
|
|
402
|
-
|
|
458
|
+
// rename Index only if it has default constraint name
|
|
459
|
+
if (index.name === indexName) {
|
|
460
|
+
index.name =
|
|
461
|
+
this.connection.namingStrategy.indexName(changedTable, index.columnNames, index.where);
|
|
462
|
+
}
|
|
403
463
|
});
|
|
404
464
|
}
|
|
405
465
|
const originalColumn = changedTable.columns.find((column) => column.name === changedColumnSet.oldColumn.name);
|
|
@@ -825,7 +885,7 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
825
885
|
const sql = dbTable["sql"];
|
|
826
886
|
// load columns and indices
|
|
827
887
|
const [dbColumns, dbIndices, dbForeignKeys] = await Promise.all([
|
|
828
|
-
this.loadPragmaRecords(tablePath, `
|
|
888
|
+
this.loadPragmaRecords(tablePath, `table_xinfo`),
|
|
829
889
|
this.loadPragmaRecords(tablePath, `index_list`),
|
|
830
890
|
this.loadPragmaRecords(tablePath, `foreign_key_list`),
|
|
831
891
|
]);
|
|
@@ -857,7 +917,7 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
857
917
|
}
|
|
858
918
|
}
|
|
859
919
|
// create columns from the loaded columns
|
|
860
|
-
table.columns = dbColumns.map((dbColumn) => {
|
|
920
|
+
table.columns = await Promise.all(dbColumns.map(async (dbColumn) => {
|
|
861
921
|
const tableColumn = new TableColumn();
|
|
862
922
|
tableColumn.name = dbColumn["name"];
|
|
863
923
|
tableColumn.type = dbColumn["type"].toLowerCase();
|
|
@@ -875,6 +935,23 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
875
935
|
if (tableColumn.isGenerated) {
|
|
876
936
|
tableColumn.generationStrategy = "increment";
|
|
877
937
|
}
|
|
938
|
+
if (dbColumn["hidden"] === 2 ||
|
|
939
|
+
dbColumn["hidden"] === 3) {
|
|
940
|
+
tableColumn.generatedType =
|
|
941
|
+
dbColumn["hidden"] === 2 ? "VIRTUAL" : "STORED";
|
|
942
|
+
const asExpressionQuery = await this.selectTypeormMetadataSql({
|
|
943
|
+
table: table.name,
|
|
944
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
945
|
+
name: tableColumn.name,
|
|
946
|
+
});
|
|
947
|
+
const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
|
|
948
|
+
if (results[0] && results[0].value) {
|
|
949
|
+
tableColumn.asExpression = results[0].value;
|
|
950
|
+
}
|
|
951
|
+
else {
|
|
952
|
+
tableColumn.asExpression = "";
|
|
953
|
+
}
|
|
954
|
+
}
|
|
878
955
|
if (tableColumn.type === "varchar") {
|
|
879
956
|
// Check if this is an enum
|
|
880
957
|
const enumMatch = sql.match(new RegExp('"(' +
|
|
@@ -914,7 +991,20 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
914
991
|
}
|
|
915
992
|
}
|
|
916
993
|
return tableColumn;
|
|
917
|
-
});
|
|
994
|
+
}));
|
|
995
|
+
// find unique constraints from CREATE TABLE sql
|
|
996
|
+
let fkResult;
|
|
997
|
+
const fkMappings = [];
|
|
998
|
+
const fkRegex = /CONSTRAINT "([^"]*)" FOREIGN KEY \((.*?)\) REFERENCES "([^"]*)" /g;
|
|
999
|
+
while ((fkResult = fkRegex.exec(sql)) !== null) {
|
|
1000
|
+
fkMappings.push({
|
|
1001
|
+
name: fkResult[1],
|
|
1002
|
+
columns: fkResult[2]
|
|
1003
|
+
.substr(1, fkResult[2].length - 2)
|
|
1004
|
+
.split(`", "`),
|
|
1005
|
+
referencedTableName: fkResult[3],
|
|
1006
|
+
});
|
|
1007
|
+
}
|
|
918
1008
|
// build foreign keys
|
|
919
1009
|
const tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys, (dbForeignKey) => dbForeignKey["id"]);
|
|
920
1010
|
table.foreignKeys = tableForeignKeyConstraints.map((foreignKey) => {
|
|
@@ -922,10 +1012,12 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
922
1012
|
dbForeignKey["table"] === foreignKey["table"]);
|
|
923
1013
|
const columnNames = ownForeignKeys.map((dbForeignKey) => dbForeignKey["from"]);
|
|
924
1014
|
const referencedColumnNames = ownForeignKeys.map((dbForeignKey) => dbForeignKey["to"]);
|
|
925
|
-
//
|
|
926
|
-
const
|
|
1015
|
+
// find related foreign key mapping
|
|
1016
|
+
const fkMapping = fkMappings.find((it) => it.referencedTableName ===
|
|
1017
|
+
foreignKey["table"] &&
|
|
1018
|
+
it.columns.every((column) => columnNames.indexOf(column) !== -1));
|
|
927
1019
|
return new TableForeignKey({
|
|
928
|
-
name:
|
|
1020
|
+
name: fkMapping.name,
|
|
929
1021
|
columnNames: columnNames,
|
|
930
1022
|
referencedTableName: foreignKey["table"],
|
|
931
1023
|
referencedColumnNames: referencedColumnNames,
|
|
@@ -1208,8 +1300,13 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
1208
1300
|
c += " COLLATE " + column.collation;
|
|
1209
1301
|
if (column.isNullable !== true)
|
|
1210
1302
|
c += " NOT NULL";
|
|
1211
|
-
if (column.
|
|
1212
|
-
c +=
|
|
1303
|
+
if (column.asExpression) {
|
|
1304
|
+
c += ` AS (${column.asExpression}) ${column.generatedType ? column.generatedType : "VIRTUAL"}`;
|
|
1305
|
+
}
|
|
1306
|
+
else {
|
|
1307
|
+
if (column.default !== undefined && column.default !== null)
|
|
1308
|
+
c += " DEFAULT (" + column.default + ")";
|
|
1309
|
+
}
|
|
1213
1310
|
return c;
|
|
1214
1311
|
}
|
|
1215
1312
|
async recreateTable(newTable, oldTable, migrateData = true) {
|
|
@@ -1230,29 +1327,31 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
1230
1327
|
// migrate all data from the old table into new table
|
|
1231
1328
|
if (migrateData) {
|
|
1232
1329
|
let newColumnNames = newTable.columns
|
|
1233
|
-
.
|
|
1234
|
-
.
|
|
1330
|
+
.filter((column) => !column.generatedType)
|
|
1331
|
+
.map((column) => `"${column.name}"`);
|
|
1235
1332
|
let oldColumnNames = oldTable.columns
|
|
1236
|
-
.
|
|
1237
|
-
.
|
|
1238
|
-
if (
|
|
1333
|
+
.filter((column) => !column.generatedType)
|
|
1334
|
+
.map((column) => `"${column.name}"`);
|
|
1335
|
+
if (oldColumnNames.length < newColumnNames.length) {
|
|
1239
1336
|
newColumnNames = newTable.columns
|
|
1240
1337
|
.filter((column) => {
|
|
1241
|
-
|
|
1338
|
+
const oldColumn = oldTable.columns.find((c) => c.name === column.name);
|
|
1339
|
+
if (oldColumn && oldColumn.generatedType)
|
|
1340
|
+
return false;
|
|
1341
|
+
return !column.generatedType && oldColumn;
|
|
1242
1342
|
})
|
|
1243
|
-
.map((column) => `"${column.name}"`)
|
|
1244
|
-
.join(", ");
|
|
1343
|
+
.map((column) => `"${column.name}"`);
|
|
1245
1344
|
}
|
|
1246
|
-
else if (
|
|
1345
|
+
else if (oldColumnNames.length > newColumnNames.length) {
|
|
1247
1346
|
oldColumnNames = oldTable.columns
|
|
1248
1347
|
.filter((column) => {
|
|
1249
|
-
return
|
|
1348
|
+
return (!column.generatedType &&
|
|
1349
|
+
newTable.columns.find((c) => c.name === column.name));
|
|
1250
1350
|
})
|
|
1251
|
-
.map((column) => `"${column.name}"`)
|
|
1252
|
-
.join(", ");
|
|
1351
|
+
.map((column) => `"${column.name}"`);
|
|
1253
1352
|
}
|
|
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)}`));
|
|
1353
|
+
upQueries.push(new Query(`INSERT INTO ${this.escapePath(newTable.name)}(${newColumnNames.join(", ")}) SELECT ${oldColumnNames.join(", ")} FROM ${this.escapePath(oldTable.name)}`));
|
|
1354
|
+
downQueries.push(new Query(`INSERT INTO ${this.escapePath(oldTable.name)}(${oldColumnNames.join(", ")}) SELECT ${newColumnNames.join(", ")} FROM ${this.escapePath(newTable.name)}`));
|
|
1256
1355
|
}
|
|
1257
1356
|
// drop old table
|
|
1258
1357
|
upQueries.push(this.dropTableSql(oldTable));
|
|
@@ -1269,6 +1368,93 @@ export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
|
1269
1368
|
upQueries.push(this.createIndexSql(newTable, index));
|
|
1270
1369
|
downQueries.push(this.dropIndexSql(index));
|
|
1271
1370
|
});
|
|
1371
|
+
// update generated columns in "typeorm_metadata" table
|
|
1372
|
+
// Step 1: clear data for removed generated columns
|
|
1373
|
+
oldTable.columns
|
|
1374
|
+
.filter((column) => {
|
|
1375
|
+
const newTableColumn = newTable.columns.find((c) => c.name === column.name);
|
|
1376
|
+
// we should delete record from "typeorm_metadata" if generated column was removed
|
|
1377
|
+
// or it was changed to non-generated
|
|
1378
|
+
return (column.generatedType &&
|
|
1379
|
+
column.asExpression &&
|
|
1380
|
+
(!newTableColumn ||
|
|
1381
|
+
(!newTableColumn.generatedType &&
|
|
1382
|
+
!newTableColumn.asExpression)));
|
|
1383
|
+
})
|
|
1384
|
+
.forEach((column) => {
|
|
1385
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1386
|
+
table: oldTable.name,
|
|
1387
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1388
|
+
name: column.name,
|
|
1389
|
+
});
|
|
1390
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
1391
|
+
table: oldTable.name,
|
|
1392
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1393
|
+
name: column.name,
|
|
1394
|
+
value: column.asExpression,
|
|
1395
|
+
});
|
|
1396
|
+
upQueries.push(deleteQuery);
|
|
1397
|
+
downQueries.push(insertQuery);
|
|
1398
|
+
});
|
|
1399
|
+
// Step 2: add data for new generated columns
|
|
1400
|
+
newTable.columns
|
|
1401
|
+
.filter((column) => column.generatedType &&
|
|
1402
|
+
column.asExpression &&
|
|
1403
|
+
!oldTable.columns.some((c) => c.name === column.name))
|
|
1404
|
+
.forEach((column) => {
|
|
1405
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
1406
|
+
table: newTable.name,
|
|
1407
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1408
|
+
name: column.name,
|
|
1409
|
+
value: column.asExpression,
|
|
1410
|
+
});
|
|
1411
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1412
|
+
table: newTable.name,
|
|
1413
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1414
|
+
name: column.name,
|
|
1415
|
+
});
|
|
1416
|
+
upQueries.push(insertQuery);
|
|
1417
|
+
downQueries.push(deleteQuery);
|
|
1418
|
+
});
|
|
1419
|
+
// Step 3: update changed expressions
|
|
1420
|
+
newTable.columns
|
|
1421
|
+
.filter((column) => column.generatedType && column.asExpression)
|
|
1422
|
+
.forEach((column) => {
|
|
1423
|
+
const oldColumn = oldTable.columns.find((c) => c.name === column.name &&
|
|
1424
|
+
c.generatedType &&
|
|
1425
|
+
column.generatedType &&
|
|
1426
|
+
c.asExpression !== column.asExpression);
|
|
1427
|
+
if (!oldColumn)
|
|
1428
|
+
return;
|
|
1429
|
+
// update expression
|
|
1430
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1431
|
+
table: oldTable.name,
|
|
1432
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1433
|
+
name: oldColumn.name,
|
|
1434
|
+
});
|
|
1435
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
1436
|
+
table: newTable.name,
|
|
1437
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1438
|
+
name: column.name,
|
|
1439
|
+
value: column.asExpression,
|
|
1440
|
+
});
|
|
1441
|
+
upQueries.push(deleteQuery);
|
|
1442
|
+
upQueries.push(insertQuery);
|
|
1443
|
+
// revert update
|
|
1444
|
+
const revertInsertQuery = this.insertTypeormMetadataSql({
|
|
1445
|
+
table: newTable.name,
|
|
1446
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1447
|
+
name: oldColumn.name,
|
|
1448
|
+
value: oldColumn.asExpression,
|
|
1449
|
+
});
|
|
1450
|
+
const revertDeleteQuery = this.deleteTypeormMetadataSql({
|
|
1451
|
+
table: oldTable.name,
|
|
1452
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1453
|
+
name: column.name,
|
|
1454
|
+
});
|
|
1455
|
+
downQueries.push(revertInsertQuery);
|
|
1456
|
+
downQueries.push(revertDeleteQuery);
|
|
1457
|
+
});
|
|
1272
1458
|
await this.executeQueries(upQueries, downQueries);
|
|
1273
1459
|
this.replaceCachedTable(oldTable, newTable);
|
|
1274
1460
|
}
|