typeorm 0.3.5 → 0.3.6-dev.2d8afbe
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/cache/RedisQueryResultCache.js +3 -0
- package/browser/cache/RedisQueryResultCache.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/cache/RedisQueryResultCache.js +3 -0
- package/cache/RedisQueryResultCache.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/commands/InitCommand.js +1 -1
- package/commands/InitCommand.js.map +1 -1
- 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
|
@@ -318,6 +318,26 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
318
318
|
// createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.
|
|
319
319
|
if (createForeignKeys)
|
|
320
320
|
table.foreignKeys.forEach((foreignKey) => downQueries.push(this.dropForeignKeySql(table, foreignKey)));
|
|
321
|
+
// if table has column with generated type, we must add the expression to the metadata table
|
|
322
|
+
const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
|
|
323
|
+
for (const column of generatedColumns) {
|
|
324
|
+
const currentDatabase = await this.getCurrentDatabase();
|
|
325
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
326
|
+
schema: currentDatabase,
|
|
327
|
+
table: table.name,
|
|
328
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
329
|
+
name: column.name,
|
|
330
|
+
value: column.asExpression,
|
|
331
|
+
});
|
|
332
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
333
|
+
schema: currentDatabase,
|
|
334
|
+
table: table.name,
|
|
335
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
336
|
+
name: column.name,
|
|
337
|
+
});
|
|
338
|
+
upQueries.push(insertQuery);
|
|
339
|
+
downQueries.push(deleteQuery);
|
|
340
|
+
}
|
|
321
341
|
return this.executeQueries(upQueries, downQueries);
|
|
322
342
|
}
|
|
323
343
|
/**
|
|
@@ -342,6 +362,26 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
342
362
|
table.indices.forEach((index) => upQueries.push(this.dropIndexSql(table, index)));
|
|
343
363
|
upQueries.push(this.dropTableSql(table));
|
|
344
364
|
downQueries.push(this.createTableSql(table, createForeignKeys));
|
|
365
|
+
// if table had columns with generated type, we must remove the expression from the metadata table
|
|
366
|
+
const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
|
|
367
|
+
for (const column of generatedColumns) {
|
|
368
|
+
const currentDatabase = await this.getCurrentDatabase();
|
|
369
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
370
|
+
schema: currentDatabase,
|
|
371
|
+
table: table.name,
|
|
372
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
373
|
+
name: column.name,
|
|
374
|
+
});
|
|
375
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
376
|
+
schema: currentDatabase,
|
|
377
|
+
table: table.name,
|
|
378
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
379
|
+
name: column.name,
|
|
380
|
+
value: column.asExpression,
|
|
381
|
+
});
|
|
382
|
+
upQueries.push(deleteQuery);
|
|
383
|
+
downQueries.push(insertQuery);
|
|
384
|
+
}
|
|
345
385
|
await this.executeQueries(upQueries, downQueries);
|
|
346
386
|
}
|
|
347
387
|
/**
|
|
@@ -487,6 +527,24 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
487
527
|
downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \`${column.name}\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`));
|
|
488
528
|
}
|
|
489
529
|
}
|
|
530
|
+
if (column.generatedType && column.asExpression) {
|
|
531
|
+
const currentDatabase = await this.getCurrentDatabase();
|
|
532
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
533
|
+
schema: currentDatabase,
|
|
534
|
+
table: table.name,
|
|
535
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
536
|
+
name: column.name,
|
|
537
|
+
value: column.asExpression,
|
|
538
|
+
});
|
|
539
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
540
|
+
schema: currentDatabase,
|
|
541
|
+
table: table.name,
|
|
542
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
543
|
+
name: column.name,
|
|
544
|
+
});
|
|
545
|
+
upQueries.push(insertQuery);
|
|
546
|
+
downQueries.push(deleteQuery);
|
|
547
|
+
}
|
|
490
548
|
// create column index
|
|
491
549
|
const columnIndex = clonedTable.indices.find((index) => index.columnNames.length === 1 &&
|
|
492
550
|
index.columnNames[0] === column.name);
|
|
@@ -563,7 +621,12 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
563
621
|
newColumn.generationStrategy !== "uuid") ||
|
|
564
622
|
oldColumn.type !== newColumn.type ||
|
|
565
623
|
oldColumn.length !== newColumn.length ||
|
|
566
|
-
oldColumn.generatedType
|
|
624
|
+
(oldColumn.generatedType &&
|
|
625
|
+
newColumn.generatedType &&
|
|
626
|
+
oldColumn.generatedType !== newColumn.generatedType) ||
|
|
627
|
+
(!oldColumn.generatedType &&
|
|
628
|
+
newColumn.generatedType === "VIRTUAL") ||
|
|
629
|
+
(oldColumn.generatedType === "VIRTUAL" && !newColumn.generatedType)) {
|
|
567
630
|
await this.dropColumn(table, oldColumn);
|
|
568
631
|
await this.addColumn(table, newColumn);
|
|
569
632
|
// update cloned table
|
|
@@ -639,6 +702,77 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
639
702
|
if (this.isColumnChanged(oldColumn, newColumn, true, true)) {
|
|
640
703
|
upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \`${oldColumn.name}\` ${this.buildCreateColumnSql(newColumn, true)}`));
|
|
641
704
|
downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \`${newColumn.name}\` ${this.buildCreateColumnSql(oldColumn, true)}`));
|
|
705
|
+
if (oldColumn.generatedType && !newColumn.generatedType) {
|
|
706
|
+
// if column changed from generated to non-generated, delete record from typeorm metadata
|
|
707
|
+
const currentDatabase = await this.getCurrentDatabase();
|
|
708
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
709
|
+
schema: currentDatabase,
|
|
710
|
+
table: table.name,
|
|
711
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
712
|
+
name: oldColumn.name,
|
|
713
|
+
});
|
|
714
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
715
|
+
schema: currentDatabase,
|
|
716
|
+
table: table.name,
|
|
717
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
718
|
+
name: oldColumn.name,
|
|
719
|
+
value: oldColumn.asExpression,
|
|
720
|
+
});
|
|
721
|
+
upQueries.push(deleteQuery);
|
|
722
|
+
downQueries.push(insertQuery);
|
|
723
|
+
}
|
|
724
|
+
else if (!oldColumn.generatedType &&
|
|
725
|
+
newColumn.generatedType) {
|
|
726
|
+
// if column changed from non-generated to generated, insert record into typeorm metadata
|
|
727
|
+
const currentDatabase = await this.getCurrentDatabase();
|
|
728
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
729
|
+
schema: currentDatabase,
|
|
730
|
+
table: table.name,
|
|
731
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
732
|
+
name: newColumn.name,
|
|
733
|
+
value: newColumn.asExpression,
|
|
734
|
+
});
|
|
735
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
736
|
+
schema: currentDatabase,
|
|
737
|
+
table: table.name,
|
|
738
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
739
|
+
name: newColumn.name,
|
|
740
|
+
});
|
|
741
|
+
upQueries.push(insertQuery);
|
|
742
|
+
downQueries.push(deleteQuery);
|
|
743
|
+
}
|
|
744
|
+
else if (oldColumn.asExpression !== newColumn.asExpression) {
|
|
745
|
+
// if only expression changed, just update it in typeorm_metadata table
|
|
746
|
+
const currentDatabase = await this.getCurrentDatabase();
|
|
747
|
+
const updateQuery = this.connection
|
|
748
|
+
.createQueryBuilder()
|
|
749
|
+
.update(this.getTypeormMetadataTableName())
|
|
750
|
+
.set({ value: newColumn.asExpression })
|
|
751
|
+
.where("`type` = :type", {
|
|
752
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
753
|
+
})
|
|
754
|
+
.andWhere("`name` = :name", { name: oldColumn.name })
|
|
755
|
+
.andWhere("`schema` = :schema", {
|
|
756
|
+
schema: currentDatabase,
|
|
757
|
+
})
|
|
758
|
+
.andWhere("`table` = :table", { table: table.name })
|
|
759
|
+
.getQueryAndParameters();
|
|
760
|
+
const revertUpdateQuery = this.connection
|
|
761
|
+
.createQueryBuilder()
|
|
762
|
+
.update(this.getTypeormMetadataTableName())
|
|
763
|
+
.set({ value: oldColumn.asExpression })
|
|
764
|
+
.where("`type` = :type", {
|
|
765
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
766
|
+
})
|
|
767
|
+
.andWhere("`name` = :name", { name: newColumn.name })
|
|
768
|
+
.andWhere("`schema` = :schema", {
|
|
769
|
+
schema: currentDatabase,
|
|
770
|
+
})
|
|
771
|
+
.andWhere("`table` = :table", { table: table.name })
|
|
772
|
+
.getQueryAndParameters();
|
|
773
|
+
upQueries.push(new Query_1.Query(updateQuery[0], updateQuery[1]));
|
|
774
|
+
downQueries.push(new Query_1.Query(revertUpdateQuery[0], revertUpdateQuery[1]));
|
|
775
|
+
}
|
|
642
776
|
}
|
|
643
777
|
if (newColumn.isPrimary !== oldColumn.isPrimary) {
|
|
644
778
|
// if table have generated column, we must drop AUTO_INCREMENT before changing primary constraints.
|
|
@@ -817,6 +951,24 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
817
951
|
}
|
|
818
952
|
upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN \`${column.name}\``));
|
|
819
953
|
downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(column, true)}`));
|
|
954
|
+
if (column.generatedType && column.asExpression) {
|
|
955
|
+
const currentDatabase = await this.getCurrentDatabase();
|
|
956
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
957
|
+
schema: currentDatabase,
|
|
958
|
+
table: table.name,
|
|
959
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
960
|
+
name: column.name,
|
|
961
|
+
});
|
|
962
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
963
|
+
schema: currentDatabase,
|
|
964
|
+
table: table.name,
|
|
965
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
966
|
+
name: column.name,
|
|
967
|
+
value: column.asExpression,
|
|
968
|
+
});
|
|
969
|
+
upQueries.push(deleteQuery);
|
|
970
|
+
downQueries.push(insertQuery);
|
|
971
|
+
}
|
|
820
972
|
await this.executeQueries(upQueries, downQueries);
|
|
821
973
|
clonedTable.removeColumn(column);
|
|
822
974
|
this.replaceCachedTable(table, clonedTable);
|
|
@@ -1352,11 +1504,12 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1352
1504
|
table.database = dbTable["TABLE_SCHEMA"];
|
|
1353
1505
|
table.name = this.driver.buildTableName(dbTable["TABLE_NAME"], undefined, db);
|
|
1354
1506
|
// create columns from the loaded columns
|
|
1355
|
-
table.columns = dbColumns
|
|
1356
|
-
.filter((dbColumn) => dbColumn["TABLE_NAME"] ===
|
|
1507
|
+
table.columns = await Promise.all(dbColumns
|
|
1508
|
+
.filter((dbColumn) => dbColumn["TABLE_NAME"] ===
|
|
1509
|
+
dbTable["TABLE_NAME"] &&
|
|
1357
1510
|
dbColumn["TABLE_SCHEMA"] ===
|
|
1358
1511
|
dbTable["TABLE_SCHEMA"])
|
|
1359
|
-
.map((dbColumn) => {
|
|
1512
|
+
.map(async (dbColumn) => {
|
|
1360
1513
|
const columnUniqueIndices = dbIndices.filter((dbIndex) => {
|
|
1361
1514
|
return (dbIndex["TABLE_NAME"] ===
|
|
1362
1515
|
dbTable["TABLE_NAME"] &&
|
|
@@ -1364,7 +1517,8 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1364
1517
|
dbTable["TABLE_SCHEMA"] &&
|
|
1365
1518
|
dbIndex["COLUMN_NAME"] ===
|
|
1366
1519
|
dbColumn["COLUMN_NAME"] &&
|
|
1367
|
-
parseInt(dbIndex["NON_UNIQUE"], 10) ===
|
|
1520
|
+
parseInt(dbIndex["NON_UNIQUE"], 10) ===
|
|
1521
|
+
0);
|
|
1368
1522
|
});
|
|
1369
1523
|
const tableMetadata = this.connection.entityMetadatas.find((metadata) => this.getTablePath(table) ===
|
|
1370
1524
|
this.getTablePath(metadata));
|
|
@@ -1385,9 +1539,11 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1385
1539
|
});
|
|
1386
1540
|
const tableColumn = new TableColumn_1.TableColumn();
|
|
1387
1541
|
tableColumn.name = dbColumn["COLUMN_NAME"];
|
|
1388
|
-
tableColumn.type =
|
|
1542
|
+
tableColumn.type =
|
|
1543
|
+
dbColumn["DATA_TYPE"].toLowerCase();
|
|
1389
1544
|
tableColumn.zerofill =
|
|
1390
|
-
dbColumn["COLUMN_TYPE"].indexOf("zerofill") !==
|
|
1545
|
+
dbColumn["COLUMN_TYPE"].indexOf("zerofill") !==
|
|
1546
|
+
-1;
|
|
1391
1547
|
tableColumn.unsigned = tableColumn.zerofill
|
|
1392
1548
|
? true
|
|
1393
1549
|
: dbColumn["COLUMN_TYPE"].indexOf("unsigned") !== -1;
|
|
@@ -1401,7 +1557,8 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1401
1557
|
}
|
|
1402
1558
|
if (dbColumn["COLUMN_DEFAULT"] === null ||
|
|
1403
1559
|
dbColumn["COLUMN_DEFAULT"] === undefined ||
|
|
1404
|
-
(isMariaDb &&
|
|
1560
|
+
(isMariaDb &&
|
|
1561
|
+
dbColumn["COLUMN_DEFAULT"] === "NULL")) {
|
|
1405
1562
|
tableColumn.default = undefined;
|
|
1406
1563
|
}
|
|
1407
1564
|
else if (/^CURRENT_TIMESTAMP(\([0-9]*\))?$/i.test(dbColumn["COLUMN_DEFAULT"])) {
|
|
@@ -1423,23 +1580,41 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1423
1580
|
// New versions of MariaDB return expressions in lowercase. We need to set it in
|
|
1424
1581
|
// uppercase so the comparison in MysqlDriver#compareExtraValues does not fail.
|
|
1425
1582
|
tableColumn.onUpdate = dbColumn["EXTRA"]
|
|
1426
|
-
.substring(dbColumn["EXTRA"].indexOf("on update") +
|
|
1583
|
+
.substring(dbColumn["EXTRA"].indexOf("on update") +
|
|
1584
|
+
10)
|
|
1427
1585
|
.toUpperCase();
|
|
1428
1586
|
}
|
|
1429
1587
|
if (dbColumn["GENERATION_EXPRESSION"]) {
|
|
1430
|
-
tableColumn.asExpression =
|
|
1431
|
-
dbColumn["GENERATION_EXPRESSION"];
|
|
1432
1588
|
tableColumn.generatedType =
|
|
1433
1589
|
dbColumn["EXTRA"].indexOf("VIRTUAL") !== -1
|
|
1434
1590
|
? "VIRTUAL"
|
|
1435
1591
|
: "STORED";
|
|
1592
|
+
// We cannot relay on information_schema.columns.generation_expression, because it is formatted different.
|
|
1593
|
+
const asExpressionQuery = await this.selectTypeormMetadataSql({
|
|
1594
|
+
schema: dbTable["TABLE_SCHEMA"],
|
|
1595
|
+
table: dbTable["TABLE_NAME"],
|
|
1596
|
+
type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
|
|
1597
|
+
name: tableColumn.name,
|
|
1598
|
+
});
|
|
1599
|
+
const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
|
|
1600
|
+
if (results[0] && results[0].value) {
|
|
1601
|
+
tableColumn.asExpression = results[0].value;
|
|
1602
|
+
}
|
|
1603
|
+
else {
|
|
1604
|
+
tableColumn.asExpression = "";
|
|
1605
|
+
}
|
|
1436
1606
|
}
|
|
1437
1607
|
tableColumn.isUnique =
|
|
1438
1608
|
columnUniqueIndices.length > 0 &&
|
|
1439
1609
|
!hasIgnoredIndex &&
|
|
1440
1610
|
!isConstraintComposite;
|
|
1441
|
-
tableColumn.
|
|
1442
|
-
|
|
1611
|
+
if (isMariaDb && tableColumn.generatedType) {
|
|
1612
|
+
// do nothing - MariaDB does not support NULL/NOT NULL expressions for generated columns
|
|
1613
|
+
}
|
|
1614
|
+
else {
|
|
1615
|
+
tableColumn.isNullable =
|
|
1616
|
+
dbColumn["IS_NULLABLE"] === "YES";
|
|
1617
|
+
}
|
|
1443
1618
|
tableColumn.isPrimary = dbPrimaryKeys.some((dbPrimaryKey) => {
|
|
1444
1619
|
return (dbPrimaryKey["TABLE_NAME"] ===
|
|
1445
1620
|
dbColumn["TABLE_NAME"] &&
|
|
@@ -1449,11 +1624,13 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1449
1624
|
dbColumn["COLUMN_NAME"]);
|
|
1450
1625
|
});
|
|
1451
1626
|
tableColumn.isGenerated =
|
|
1452
|
-
dbColumn["EXTRA"].indexOf("auto_increment") !==
|
|
1627
|
+
dbColumn["EXTRA"].indexOf("auto_increment") !==
|
|
1628
|
+
-1;
|
|
1453
1629
|
if (tableColumn.isGenerated)
|
|
1454
1630
|
tableColumn.generationStrategy = "increment";
|
|
1455
1631
|
tableColumn.comment =
|
|
1456
|
-
typeof dbColumn["COLUMN_COMMENT"] ===
|
|
1632
|
+
typeof dbColumn["COLUMN_COMMENT"] ===
|
|
1633
|
+
"string" &&
|
|
1457
1634
|
dbColumn["COLUMN_COMMENT"].length === 0
|
|
1458
1635
|
? undefined
|
|
1459
1636
|
: dbColumn["COLUMN_COMMENT"];
|
|
@@ -1465,16 +1642,18 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1465
1642
|
: dbColumn["CHARACTER_SET_NAME"];
|
|
1466
1643
|
if (dbColumn["COLLATION_NAME"])
|
|
1467
1644
|
tableColumn.collation =
|
|
1468
|
-
dbColumn["COLLATION_NAME"] ===
|
|
1645
|
+
dbColumn["COLLATION_NAME"] ===
|
|
1646
|
+
defaultCollation
|
|
1469
1647
|
? undefined
|
|
1470
1648
|
: dbColumn["COLLATION_NAME"];
|
|
1471
1649
|
// check only columns that have length property
|
|
1472
1650
|
if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type) !== -1 &&
|
|
1473
1651
|
dbColumn["CHARACTER_MAXIMUM_LENGTH"]) {
|
|
1474
1652
|
const length = dbColumn["CHARACTER_MAXIMUM_LENGTH"].toString();
|
|
1475
|
-
tableColumn.length =
|
|
1476
|
-
|
|
1477
|
-
|
|
1653
|
+
tableColumn.length =
|
|
1654
|
+
!this.isDefaultColumnLength(table, tableColumn, length)
|
|
1655
|
+
? length
|
|
1656
|
+
: "";
|
|
1478
1657
|
}
|
|
1479
1658
|
if (tableColumn.type === "decimal" ||
|
|
1480
1659
|
tableColumn.type === "double" ||
|
|
@@ -1507,7 +1686,7 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1507
1686
|
tableColumn.precision = parseInt(dbColumn["DATETIME_PRECISION"]);
|
|
1508
1687
|
}
|
|
1509
1688
|
return tableColumn;
|
|
1510
|
-
});
|
|
1689
|
+
}));
|
|
1511
1690
|
// find foreign key constraints of table, group them by constraint name and build TableForeignKey.
|
|
1512
1691
|
const tableForeignKeyConstraints = OrmUtils_1.OrmUtils.uniq(dbForeignKeys.filter((dbForeignKey) => {
|
|
1513
1692
|
return (dbForeignKey["TABLE_NAME"] ===
|
|
@@ -1804,6 +1983,10 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1804
1983
|
else {
|
|
1805
1984
|
c = `\`${column.name}\` ${this.connection.driver.createFullType(column)}`;
|
|
1806
1985
|
}
|
|
1986
|
+
if (column.charset)
|
|
1987
|
+
c += ` CHARACTER SET "${column.charset}"`;
|
|
1988
|
+
if (column.collation)
|
|
1989
|
+
c += ` COLLATE "${column.collation}"`;
|
|
1807
1990
|
if (column.asExpression)
|
|
1808
1991
|
c += ` AS (${column.asExpression}) ${column.generatedType ? column.generatedType : "VIRTUAL"}`;
|
|
1809
1992
|
// if you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to that column.
|
|
@@ -1817,10 +2000,6 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
1817
2000
|
c += ` (${column.enum
|
|
1818
2001
|
.map((value) => "'" + value.replace(/'/g, "''") + "'")
|
|
1819
2002
|
.join(", ")})`;
|
|
1820
|
-
if (column.charset)
|
|
1821
|
-
c += ` CHARACTER SET "${column.charset}"`;
|
|
1822
|
-
if (column.collation)
|
|
1823
|
-
c += ` COLLATE "${column.collation}"`;
|
|
1824
2003
|
const isMariaDb = this.driver.options.type === "mariadb";
|
|
1825
2004
|
if (isMariaDb &&
|
|
1826
2005
|
column.asExpression &&
|