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
|
@@ -454,6 +454,31 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
454
454
|
downQueries.push(this.dropIndexSql(table, index));
|
|
455
455
|
});
|
|
456
456
|
}
|
|
457
|
+
// if table have column with generated type, we must add the expression to the metadata table
|
|
458
|
+
const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
|
|
459
|
+
for (const column of generatedColumns) {
|
|
460
|
+
const parsedTableName = this.driver.parseTableName(table);
|
|
461
|
+
if (!parsedTableName.schema) {
|
|
462
|
+
parsedTableName.schema = await this.getCurrentSchema();
|
|
463
|
+
}
|
|
464
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
465
|
+
database: parsedTableName.database,
|
|
466
|
+
schema: parsedTableName.schema,
|
|
467
|
+
table: parsedTableName.tableName,
|
|
468
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
469
|
+
name: column.name,
|
|
470
|
+
value: column.asExpression,
|
|
471
|
+
});
|
|
472
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
473
|
+
database: parsedTableName.database,
|
|
474
|
+
schema: parsedTableName.schema,
|
|
475
|
+
table: parsedTableName.tableName,
|
|
476
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
477
|
+
name: column.name,
|
|
478
|
+
});
|
|
479
|
+
upQueries.push(insertQuery);
|
|
480
|
+
downQueries.push(deleteQuery);
|
|
481
|
+
}
|
|
457
482
|
await this.executeQueries(upQueries, downQueries);
|
|
458
483
|
}
|
|
459
484
|
/**
|
|
@@ -486,6 +511,31 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
486
511
|
table.foreignKeys.forEach((foreignKey) => upQueries.push(this.dropForeignKeySql(table, foreignKey)));
|
|
487
512
|
upQueries.push(this.dropTableSql(table));
|
|
488
513
|
downQueries.push(this.createTableSql(table, createForeignKeys));
|
|
514
|
+
// if table had columns with generated type, we must remove the expression from the metadata table
|
|
515
|
+
const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
|
|
516
|
+
for (const column of generatedColumns) {
|
|
517
|
+
const parsedTableName = this.driver.parseTableName(table);
|
|
518
|
+
if (!parsedTableName.schema) {
|
|
519
|
+
parsedTableName.schema = await this.getCurrentSchema();
|
|
520
|
+
}
|
|
521
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
522
|
+
database: parsedTableName.database,
|
|
523
|
+
schema: parsedTableName.schema,
|
|
524
|
+
table: parsedTableName.tableName,
|
|
525
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
526
|
+
name: column.name,
|
|
527
|
+
});
|
|
528
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
529
|
+
database: parsedTableName.database,
|
|
530
|
+
schema: parsedTableName.schema,
|
|
531
|
+
table: parsedTableName.tableName,
|
|
532
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
533
|
+
name: column.name,
|
|
534
|
+
value: column.asExpression,
|
|
535
|
+
});
|
|
536
|
+
upQueries.push(deleteQuery);
|
|
537
|
+
downQueries.push(insertQuery);
|
|
538
|
+
}
|
|
489
539
|
await this.executeQueries(upQueries, downQueries);
|
|
490
540
|
}
|
|
491
541
|
/**
|
|
@@ -653,6 +703,29 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
653
703
|
const defaultName = this.connection.namingStrategy.defaultConstraintName(table, column.name);
|
|
654
704
|
downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${defaultName}"`));
|
|
655
705
|
}
|
|
706
|
+
if (column.generatedType && column.asExpression) {
|
|
707
|
+
const parsedTableName = this.driver.parseTableName(table);
|
|
708
|
+
if (!parsedTableName.schema) {
|
|
709
|
+
parsedTableName.schema = await this.getCurrentSchema();
|
|
710
|
+
}
|
|
711
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
712
|
+
database: parsedTableName.database,
|
|
713
|
+
schema: parsedTableName.schema,
|
|
714
|
+
table: parsedTableName.tableName,
|
|
715
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
716
|
+
name: column.name,
|
|
717
|
+
value: column.asExpression,
|
|
718
|
+
});
|
|
719
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
720
|
+
database: parsedTableName.database,
|
|
721
|
+
schema: parsedTableName.schema,
|
|
722
|
+
table: parsedTableName.tableName,
|
|
723
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
724
|
+
name: column.name,
|
|
725
|
+
});
|
|
726
|
+
upQueries.push(insertQuery);
|
|
727
|
+
downQueries.push(deleteQuery);
|
|
728
|
+
}
|
|
656
729
|
await this.executeQueries(upQueries, downQueries);
|
|
657
730
|
clonedTable.addColumn(column);
|
|
658
731
|
this.replaceCachedTable(table, clonedTable);
|
|
@@ -705,7 +778,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
705
778
|
if ((newColumn.isGenerated !== oldColumn.isGenerated &&
|
|
706
779
|
newColumn.generationStrategy !== "uuid") ||
|
|
707
780
|
newColumn.type !== oldColumn.type ||
|
|
708
|
-
newColumn.length !== oldColumn.length
|
|
781
|
+
newColumn.length !== oldColumn.length ||
|
|
782
|
+
newColumn.asExpression !== oldColumn.asExpression ||
|
|
783
|
+
newColumn.generatedType !== oldColumn.generatedType) {
|
|
709
784
|
// SQL Server does not support changing of IDENTITY column, so we must drop column and recreate it again.
|
|
710
785
|
// Also, we recreate column if column type changed
|
|
711
786
|
await this.dropColumn(table, oldColumn);
|
|
@@ -979,6 +1054,29 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
979
1054
|
upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${defaultName}"`));
|
|
980
1055
|
downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${defaultName}" DEFAULT ${column.default} FOR "${column.name}"`));
|
|
981
1056
|
}
|
|
1057
|
+
if (column.generatedType && column.asExpression) {
|
|
1058
|
+
const parsedTableName = this.driver.parseTableName(table);
|
|
1059
|
+
if (!parsedTableName.schema) {
|
|
1060
|
+
parsedTableName.schema = await this.getCurrentSchema();
|
|
1061
|
+
}
|
|
1062
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1063
|
+
database: parsedTableName.database,
|
|
1064
|
+
schema: parsedTableName.schema,
|
|
1065
|
+
table: parsedTableName.tableName,
|
|
1066
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1067
|
+
name: column.name,
|
|
1068
|
+
});
|
|
1069
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
1070
|
+
database: parsedTableName.database,
|
|
1071
|
+
schema: parsedTableName.schema,
|
|
1072
|
+
table: parsedTableName.tableName,
|
|
1073
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1074
|
+
name: column.name,
|
|
1075
|
+
value: column.asExpression,
|
|
1076
|
+
});
|
|
1077
|
+
upQueries.push(deleteQuery);
|
|
1078
|
+
downQueries.push(insertQuery);
|
|
1079
|
+
}
|
|
982
1080
|
upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN "${column.name}"`));
|
|
983
1081
|
downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(table, column, false, false)}`));
|
|
984
1082
|
await this.executeQueries(upQueries, downQueries);
|
|
@@ -1427,12 +1525,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1427
1525
|
const currentDatabase = await this.getCurrentDatabase();
|
|
1428
1526
|
const dbTables = [];
|
|
1429
1527
|
if (!tableNames) {
|
|
1430
|
-
const databasesSql = `
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
FROM "master"."dbo"."sysdatabases"
|
|
1434
|
-
WHERE "name" NOT IN ('master', 'model', 'msdb')
|
|
1435
|
-
`;
|
|
1528
|
+
const databasesSql = `SELECT DISTINCT "name" ` +
|
|
1529
|
+
`FROM "master"."dbo"."sysdatabases" ` +
|
|
1530
|
+
`WHERE "name" NOT IN ('master', 'model', 'msdb')`;
|
|
1436
1531
|
const dbDatabases = await this.query(databasesSql);
|
|
1437
1532
|
const tablesSql = dbDatabases
|
|
1438
1533
|
.map(({ name }) => {
|
|
@@ -1497,7 +1592,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1497
1592
|
const condition = tables
|
|
1498
1593
|
.map(({ TABLE_SCHEMA, TABLE_NAME }) => `("TABLE_SCHEMA" = '${TABLE_SCHEMA}' AND "TABLE_NAME" = '${TABLE_NAME}')`)
|
|
1499
1594
|
.join("OR");
|
|
1500
|
-
return `SELECT
|
|
1595
|
+
return (`SELECT "COLUMNS".*, "cc"."is_persisted", "cc"."definition" ` +
|
|
1596
|
+
`FROM "${TABLE_CATALOG}"."INFORMATION_SCHEMA"."COLUMNS" ` +
|
|
1597
|
+
`LEFT JOIN "sys"."computed_columns" "cc" ON COL_NAME("cc"."object_id", "cc"."column_id") = "column_name" ` +
|
|
1598
|
+
`WHERE (${condition})`);
|
|
1501
1599
|
})
|
|
1502
1600
|
.join(" UNION ALL ");
|
|
1503
1601
|
const constraintsSql = Object.entries(dbTablesByCatalog)
|
|
@@ -1597,13 +1695,14 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1597
1695
|
table.name = this.driver.buildTableName(dbTable["TABLE_NAME"], schema, db);
|
|
1598
1696
|
const defaultCollation = dbCollations.find((dbCollation) => dbCollation["NAME"] === dbTable["TABLE_CATALOG"]);
|
|
1599
1697
|
// create columns from the loaded columns
|
|
1600
|
-
table.columns = dbColumns
|
|
1601
|
-
.filter((dbColumn) => dbColumn["TABLE_NAME"] ===
|
|
1698
|
+
table.columns = await Promise.all(dbColumns
|
|
1699
|
+
.filter((dbColumn) => dbColumn["TABLE_NAME"] ===
|
|
1700
|
+
dbTable["TABLE_NAME"] &&
|
|
1602
1701
|
dbColumn["TABLE_SCHEMA"] ===
|
|
1603
1702
|
dbTable["TABLE_SCHEMA"] &&
|
|
1604
1703
|
dbColumn["TABLE_CATALOG"] ===
|
|
1605
1704
|
dbTable["TABLE_CATALOG"])
|
|
1606
|
-
.map((dbColumn) => {
|
|
1705
|
+
.map(async (dbColumn) => {
|
|
1607
1706
|
const columnConstraints = dbConstraints.filter((dbConstraint) => dbConstraint["TABLE_NAME"] ===
|
|
1608
1707
|
dbColumn["TABLE_NAME"] &&
|
|
1609
1708
|
dbConstraint["TABLE_SCHEMA"] ===
|
|
@@ -1625,7 +1724,8 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1625
1724
|
dbConstraint["COLUMN_NAME"] !==
|
|
1626
1725
|
dbColumn["COLUMN_NAME"]);
|
|
1627
1726
|
});
|
|
1628
|
-
const isPrimary = !!columnConstraints.find((constraint) => constraint["CONSTRAINT_TYPE"] ===
|
|
1727
|
+
const isPrimary = !!columnConstraints.find((constraint) => constraint["CONSTRAINT_TYPE"] ===
|
|
1728
|
+
"PRIMARY KEY");
|
|
1629
1729
|
const isGenerated = !!dbIdentityColumns.find((column) => column["TABLE_NAME"] ===
|
|
1630
1730
|
dbColumn["TABLE_NAME"] &&
|
|
1631
1731
|
column["TABLE_SCHEMA"] ===
|
|
@@ -1636,7 +1736,8 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1636
1736
|
dbColumn["COLUMN_NAME"]);
|
|
1637
1737
|
const tableColumn = new TableColumn();
|
|
1638
1738
|
tableColumn.name = dbColumn["COLUMN_NAME"];
|
|
1639
|
-
tableColumn.type =
|
|
1739
|
+
tableColumn.type =
|
|
1740
|
+
dbColumn["DATA_TYPE"].toLowerCase();
|
|
1640
1741
|
// check only columns that have length property
|
|
1641
1742
|
if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type) !== -1 &&
|
|
1642
1743
|
dbColumn["CHARACTER_MAXIMUM_LENGTH"]) {
|
|
@@ -1659,7 +1760,8 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1659
1760
|
dbColumn["NUMERIC_PRECISION"];
|
|
1660
1761
|
if (dbColumn["NUMERIC_SCALE"] !== null &&
|
|
1661
1762
|
!this.isDefaultColumnScale(table, tableColumn, dbColumn["NUMERIC_SCALE"]))
|
|
1662
|
-
tableColumn.scale =
|
|
1763
|
+
tableColumn.scale =
|
|
1764
|
+
dbColumn["NUMERIC_SCALE"];
|
|
1663
1765
|
}
|
|
1664
1766
|
if (tableColumn.type === "nvarchar") {
|
|
1665
1767
|
// Check if this is an enum
|
|
@@ -1719,8 +1821,31 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1719
1821
|
? dbColumn["DATETIME_PRECISION"]
|
|
1720
1822
|
: undefined;
|
|
1721
1823
|
}
|
|
1824
|
+
if (dbColumn["is_persisted"] !== null &&
|
|
1825
|
+
dbColumn["is_persisted"] !== undefined &&
|
|
1826
|
+
dbColumn["definition"]) {
|
|
1827
|
+
tableColumn.generatedType =
|
|
1828
|
+
dbColumn["is_persisted"] === true
|
|
1829
|
+
? "STORED"
|
|
1830
|
+
: "VIRTUAL";
|
|
1831
|
+
// We cannot relay on information_schema.columns.generation_expression, because it is formatted different.
|
|
1832
|
+
const asExpressionQuery = await this.selectTypeormMetadataSql({
|
|
1833
|
+
database: dbTable["TABLE_CATALOG"],
|
|
1834
|
+
schema: dbTable["TABLE_SCHEMA"],
|
|
1835
|
+
table: dbTable["TABLE_NAME"],
|
|
1836
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1837
|
+
name: tableColumn.name,
|
|
1838
|
+
});
|
|
1839
|
+
const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
|
|
1840
|
+
if (results[0] && results[0].value) {
|
|
1841
|
+
tableColumn.asExpression = results[0].value;
|
|
1842
|
+
}
|
|
1843
|
+
else {
|
|
1844
|
+
tableColumn.asExpression = "";
|
|
1845
|
+
}
|
|
1846
|
+
}
|
|
1722
1847
|
return tableColumn;
|
|
1723
|
-
});
|
|
1848
|
+
}));
|
|
1724
1849
|
// find unique constraints of table, group them by constraint name and build TableUnique.
|
|
1725
1850
|
const tableUniqueConstraints = OrmUtils.uniq(dbConstraints.filter((dbConstraint) => dbConstraint["TABLE_NAME"] ===
|
|
1726
1851
|
dbTable["TABLE_NAME"] &&
|
|
@@ -2097,8 +2222,19 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
2097
2222
|
}
|
|
2098
2223
|
if (column.collation)
|
|
2099
2224
|
c += " COLLATE " + column.collation;
|
|
2100
|
-
if (column.
|
|
2101
|
-
c +=
|
|
2225
|
+
if (column.asExpression) {
|
|
2226
|
+
c += ` AS (${column.asExpression})`;
|
|
2227
|
+
if (column.generatedType === "STORED") {
|
|
2228
|
+
c += ` PERSISTED`;
|
|
2229
|
+
// NOT NULL can be specified for computed columns only if PERSISTED is also specified
|
|
2230
|
+
if (column.isNullable !== true)
|
|
2231
|
+
c += " NOT NULL";
|
|
2232
|
+
}
|
|
2233
|
+
}
|
|
2234
|
+
else {
|
|
2235
|
+
if (column.isNullable !== true)
|
|
2236
|
+
c += " NOT NULL";
|
|
2237
|
+
}
|
|
2102
2238
|
if (column.isGenerated === true &&
|
|
2103
2239
|
column.generationStrategy === "increment" &&
|
|
2104
2240
|
!skipIdentity)
|