typeorm 0.3.6-dev.9d331b1 → 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 +34 -14
- 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/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 +10 -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/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/DriverFactory.js +4 -0
- package/browser/driver/DriverFactory.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/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 +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/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-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/EntitySchemaIndexOptions.d.ts +8 -0
- package/browser/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
- package/browser/entity-schema/EntitySchemaTransformer.js +3 -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 +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/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-args/JoinColumnMetadataArgs.d.ts +4 -0
- package/browser/metadata-args/JoinColumnMetadataArgs.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 +17 -0
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +18 -6
- 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/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/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 +2 -2
- 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-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/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 +26 -6
- 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/options/TableIndexOptions.d.ts +8 -0
- package/browser/schema-builder/options/TableIndexOptions.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/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/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/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/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/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 +10 -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/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/DriverFactory.js +4 -0
- package/driver/DriverFactory.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/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 +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/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-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/EntitySchemaIndexOptions.d.ts +8 -0
- package/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
- package/entity-schema/EntitySchemaTransformer.js +3 -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 +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/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-args/JoinColumnMetadataArgs.d.ts +4 -0
- package/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
- package/metadata-builder/EntityMetadataBuilder.js +13 -6
- package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js +17 -0
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/metadata-builder/JunctionEntityMetadataBuilder.js +18 -6
- 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/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/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 +2 -2
- 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-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/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 +26 -6
- 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/options/TableIndexOptions.d.ts +8 -0
- package/schema-builder/options/TableIndexOptions.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/table/TableIndex.d.ts +8 -0
- package/schema-builder/table/TableIndex.js +3 -0
- package/schema-builder/table/TableIndex.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
|
@@ -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
|
/**
|
|
@@ -551,7 +601,8 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
551
601
|
upQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(oldTable)}", "${newTableName}"`));
|
|
552
602
|
downQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(newTable)}", "${oldTableName}"`));
|
|
553
603
|
// rename primary key constraint
|
|
554
|
-
if (newTable.primaryColumns.length > 0
|
|
604
|
+
if (newTable.primaryColumns.length > 0 &&
|
|
605
|
+
!newTable.primaryColumns[0].primaryKeyConstraintName) {
|
|
555
606
|
const columnNames = newTable.primaryColumns.map((column) => column.name);
|
|
556
607
|
const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);
|
|
557
608
|
const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);
|
|
@@ -561,6 +612,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
561
612
|
}
|
|
562
613
|
// rename unique constraints
|
|
563
614
|
newTable.uniques.forEach((unique) => {
|
|
615
|
+
const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
|
|
616
|
+
// Skip renaming if Unique has user defined constraint name
|
|
617
|
+
if (unique.name !== oldUniqueName)
|
|
618
|
+
return;
|
|
564
619
|
// build new constraint name
|
|
565
620
|
const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
|
|
566
621
|
// build queries
|
|
@@ -571,6 +626,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
571
626
|
});
|
|
572
627
|
// rename index constraints
|
|
573
628
|
newTable.indices.forEach((index) => {
|
|
629
|
+
const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
|
|
630
|
+
// Skip renaming if Index has user defined constraint name
|
|
631
|
+
if (index.name !== oldIndexName)
|
|
632
|
+
return;
|
|
574
633
|
// build new constraint name
|
|
575
634
|
const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
|
|
576
635
|
// build queries
|
|
@@ -581,6 +640,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
581
640
|
});
|
|
582
641
|
// rename foreign key constraints
|
|
583
642
|
newTable.foreignKeys.forEach((foreignKey) => {
|
|
643
|
+
const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
644
|
+
// Skip renaming if foreign key has user defined constraint name
|
|
645
|
+
if (foreignKey.name !== oldForeignKeyName)
|
|
646
|
+
return;
|
|
584
647
|
// build new constraint name
|
|
585
648
|
const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
586
649
|
// build queries
|
|
@@ -616,7 +679,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
616
679
|
const primaryColumns = clonedTable.primaryColumns;
|
|
617
680
|
// if table already have primary key, me must drop it and recreate again
|
|
618
681
|
if (primaryColumns.length > 0) {
|
|
619
|
-
const pkName =
|
|
682
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
683
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
684
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
620
685
|
const columnNames = primaryColumns
|
|
621
686
|
.map((column) => `"${column.name}"`)
|
|
622
687
|
.join(", ");
|
|
@@ -624,7 +689,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
624
689
|
downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
|
|
625
690
|
}
|
|
626
691
|
primaryColumns.push(column);
|
|
627
|
-
const pkName =
|
|
692
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
693
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
694
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
628
695
|
const columnNames = primaryColumns
|
|
629
696
|
.map((column) => `"${column.name}"`)
|
|
630
697
|
.join(", ");
|
|
@@ -653,6 +720,29 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
653
720
|
const defaultName = this.connection.namingStrategy.defaultConstraintName(table, column.name);
|
|
654
721
|
downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${defaultName}"`));
|
|
655
722
|
}
|
|
723
|
+
if (column.generatedType && column.asExpression) {
|
|
724
|
+
const parsedTableName = this.driver.parseTableName(table);
|
|
725
|
+
if (!parsedTableName.schema) {
|
|
726
|
+
parsedTableName.schema = await this.getCurrentSchema();
|
|
727
|
+
}
|
|
728
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
729
|
+
database: parsedTableName.database,
|
|
730
|
+
schema: parsedTableName.schema,
|
|
731
|
+
table: parsedTableName.tableName,
|
|
732
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
733
|
+
name: column.name,
|
|
734
|
+
value: column.asExpression,
|
|
735
|
+
});
|
|
736
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
737
|
+
database: parsedTableName.database,
|
|
738
|
+
schema: parsedTableName.schema,
|
|
739
|
+
table: parsedTableName.tableName,
|
|
740
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
741
|
+
name: column.name,
|
|
742
|
+
});
|
|
743
|
+
upQueries.push(insertQuery);
|
|
744
|
+
downQueries.push(deleteQuery);
|
|
745
|
+
}
|
|
656
746
|
await this.executeQueries(upQueries, downQueries);
|
|
657
747
|
clonedTable.addColumn(column);
|
|
658
748
|
this.replaceCachedTable(table, clonedTable);
|
|
@@ -705,7 +795,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
705
795
|
if ((newColumn.isGenerated !== oldColumn.isGenerated &&
|
|
706
796
|
newColumn.generationStrategy !== "uuid") ||
|
|
707
797
|
newColumn.type !== oldColumn.type ||
|
|
708
|
-
newColumn.length !== oldColumn.length
|
|
798
|
+
newColumn.length !== oldColumn.length ||
|
|
799
|
+
newColumn.asExpression !== oldColumn.asExpression ||
|
|
800
|
+
newColumn.generatedType !== oldColumn.generatedType) {
|
|
709
801
|
// SQL Server does not support changing of IDENTITY column, so we must drop column and recreate it again.
|
|
710
802
|
// Also, we recreate column if column type changed
|
|
711
803
|
await this.dropColumn(table, oldColumn);
|
|
@@ -737,7 +829,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
737
829
|
// rename the column
|
|
738
830
|
upQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(table)}.${oldColumn.name}", "${newColumn.name}"`));
|
|
739
831
|
downQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(table)}.${newColumn.name}", "${oldColumn.name}"`));
|
|
740
|
-
|
|
832
|
+
// rename column primary key constraint
|
|
833
|
+
if (oldColumn.isPrimary === true &&
|
|
834
|
+
!oldColumn.primaryKeyConstraintName) {
|
|
741
835
|
const primaryColumns = clonedTable.primaryColumns;
|
|
742
836
|
// build old primary constraint name
|
|
743
837
|
const columnNames = primaryColumns.map((column) => column.name);
|
|
@@ -753,6 +847,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
753
847
|
}
|
|
754
848
|
// rename index constraints
|
|
755
849
|
clonedTable.findColumnIndices(oldColumn).forEach((index) => {
|
|
850
|
+
const oldIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);
|
|
851
|
+
// Skip renaming if Index has user defined constraint name
|
|
852
|
+
if (index.name !== oldIndexName)
|
|
853
|
+
return;
|
|
756
854
|
// build new constraint name
|
|
757
855
|
index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);
|
|
758
856
|
index.columnNames.push(newColumn.name);
|
|
@@ -767,6 +865,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
767
865
|
clonedTable
|
|
768
866
|
.findColumnForeignKeys(oldColumn)
|
|
769
867
|
.forEach((foreignKey) => {
|
|
868
|
+
const foreignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
869
|
+
// Skip renaming if foreign key has user defined constraint name
|
|
870
|
+
if (foreignKey.name !== foreignKeyName)
|
|
871
|
+
return;
|
|
770
872
|
// build new constraint name
|
|
771
873
|
foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);
|
|
772
874
|
foreignKey.columnNames.push(newColumn.name);
|
|
@@ -791,6 +893,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
791
893
|
});
|
|
792
894
|
// rename unique constraints
|
|
793
895
|
clonedTable.findColumnUniques(oldColumn).forEach((unique) => {
|
|
896
|
+
const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);
|
|
897
|
+
// Skip renaming if Unique has user defined constraint name
|
|
898
|
+
if (unique.name !== oldUniqueName)
|
|
899
|
+
return;
|
|
794
900
|
// build new constraint name
|
|
795
901
|
unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);
|
|
796
902
|
unique.columnNames.push(newColumn.name);
|
|
@@ -829,7 +935,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
829
935
|
const primaryColumns = clonedTable.primaryColumns;
|
|
830
936
|
// if primary column state changed, we must always drop existed constraint.
|
|
831
937
|
if (primaryColumns.length > 0) {
|
|
832
|
-
const pkName =
|
|
938
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
939
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
940
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
833
941
|
const columnNames = primaryColumns
|
|
834
942
|
.map((column) => `"${column.name}"`)
|
|
835
943
|
.join(", ");
|
|
@@ -841,7 +949,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
841
949
|
// update column in table
|
|
842
950
|
const column = clonedTable.columns.find((column) => column.name === newColumn.name);
|
|
843
951
|
column.isPrimary = true;
|
|
844
|
-
const pkName =
|
|
952
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
953
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
954
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
845
955
|
const columnNames = primaryColumns
|
|
846
956
|
.map((column) => `"${column.name}"`)
|
|
847
957
|
.join(", ");
|
|
@@ -856,7 +966,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
856
966
|
column.isPrimary = false;
|
|
857
967
|
// if we have another primary keys, we must recreate constraint.
|
|
858
968
|
if (primaryColumns.length > 0) {
|
|
859
|
-
const pkName =
|
|
969
|
+
const pkName = primaryColumns[0]
|
|
970
|
+
.primaryKeyConstraintName
|
|
971
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
972
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
860
973
|
const columnNames = primaryColumns
|
|
861
974
|
.map((column) => `"${column.name}"`)
|
|
862
975
|
.join(", ");
|
|
@@ -929,7 +1042,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
929
1042
|
const downQueries = [];
|
|
930
1043
|
// drop primary key constraint
|
|
931
1044
|
if (column.isPrimary) {
|
|
932
|
-
const pkName =
|
|
1045
|
+
const pkName = column.primaryKeyConstraintName
|
|
1046
|
+
? column.primaryKeyConstraintName
|
|
1047
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
|
|
933
1048
|
const columnNames = clonedTable.primaryColumns
|
|
934
1049
|
.map((primaryColumn) => `"${primaryColumn.name}"`)
|
|
935
1050
|
.join(", ");
|
|
@@ -940,7 +1055,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
940
1055
|
tableColumn.isPrimary = false;
|
|
941
1056
|
// if primary key have multiple columns, we must recreate it without dropped column
|
|
942
1057
|
if (clonedTable.primaryColumns.length > 0) {
|
|
943
|
-
const pkName =
|
|
1058
|
+
const pkName = clonedTable.primaryColumns[0]
|
|
1059
|
+
.primaryKeyConstraintName
|
|
1060
|
+
? clonedTable.primaryColumns[0].primaryKeyConstraintName
|
|
1061
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
|
|
944
1062
|
const columnNames = clonedTable.primaryColumns
|
|
945
1063
|
.map((primaryColumn) => `"${primaryColumn.name}"`)
|
|
946
1064
|
.join(", ");
|
|
@@ -979,6 +1097,29 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
979
1097
|
upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${defaultName}"`));
|
|
980
1098
|
downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${defaultName}" DEFAULT ${column.default} FOR "${column.name}"`));
|
|
981
1099
|
}
|
|
1100
|
+
if (column.generatedType && column.asExpression) {
|
|
1101
|
+
const parsedTableName = this.driver.parseTableName(table);
|
|
1102
|
+
if (!parsedTableName.schema) {
|
|
1103
|
+
parsedTableName.schema = await this.getCurrentSchema();
|
|
1104
|
+
}
|
|
1105
|
+
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1106
|
+
database: parsedTableName.database,
|
|
1107
|
+
schema: parsedTableName.schema,
|
|
1108
|
+
table: parsedTableName.tableName,
|
|
1109
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1110
|
+
name: column.name,
|
|
1111
|
+
});
|
|
1112
|
+
const insertQuery = this.insertTypeormMetadataSql({
|
|
1113
|
+
database: parsedTableName.database,
|
|
1114
|
+
schema: parsedTableName.schema,
|
|
1115
|
+
table: parsedTableName.tableName,
|
|
1116
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1117
|
+
name: column.name,
|
|
1118
|
+
value: column.asExpression,
|
|
1119
|
+
});
|
|
1120
|
+
upQueries.push(deleteQuery);
|
|
1121
|
+
downQueries.push(insertQuery);
|
|
1122
|
+
}
|
|
982
1123
|
upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN "${column.name}"`));
|
|
983
1124
|
downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(table, column, false, false)}`));
|
|
984
1125
|
await this.executeQueries(upQueries, downQueries);
|
|
@@ -996,12 +1137,12 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
996
1137
|
/**
|
|
997
1138
|
* Creates a new primary key.
|
|
998
1139
|
*/
|
|
999
|
-
async createPrimaryKey(tableOrName, columnNames) {
|
|
1140
|
+
async createPrimaryKey(tableOrName, columnNames, constraintName) {
|
|
1000
1141
|
const table = InstanceChecker.isTable(tableOrName)
|
|
1001
1142
|
? tableOrName
|
|
1002
1143
|
: await this.getCachedTable(tableOrName);
|
|
1003
1144
|
const clonedTable = table.clone();
|
|
1004
|
-
const up = this.createPrimaryKeySql(table, columnNames);
|
|
1145
|
+
const up = this.createPrimaryKeySql(table, columnNames, constraintName);
|
|
1005
1146
|
// mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.
|
|
1006
1147
|
clonedTable.columns.forEach((column) => {
|
|
1007
1148
|
if (columnNames.find((columnName) => columnName === column.name))
|
|
@@ -1025,7 +1166,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1025
1166
|
// if table already have primary columns, we must drop them.
|
|
1026
1167
|
const primaryColumns = clonedTable.primaryColumns;
|
|
1027
1168
|
if (primaryColumns.length > 0) {
|
|
1028
|
-
const pkName =
|
|
1169
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
1170
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
1171
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
1029
1172
|
const columnNamesString = primaryColumns
|
|
1030
1173
|
.map((column) => `"${column.name}"`)
|
|
1031
1174
|
.join(", ");
|
|
@@ -1036,7 +1179,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1036
1179
|
clonedTable.columns
|
|
1037
1180
|
.filter((column) => columnNames.indexOf(column.name) !== -1)
|
|
1038
1181
|
.forEach((column) => (column.isPrimary = true));
|
|
1039
|
-
const pkName =
|
|
1182
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
1183
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
1184
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
|
|
1040
1185
|
const columnNamesString = columnNames
|
|
1041
1186
|
.map((columnName) => `"${columnName}"`)
|
|
1042
1187
|
.join(", ");
|
|
@@ -1048,12 +1193,12 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1048
1193
|
/**
|
|
1049
1194
|
* Drops a primary key.
|
|
1050
1195
|
*/
|
|
1051
|
-
async dropPrimaryKey(tableOrName) {
|
|
1196
|
+
async dropPrimaryKey(tableOrName, constraintName) {
|
|
1052
1197
|
const table = InstanceChecker.isTable(tableOrName)
|
|
1053
1198
|
? tableOrName
|
|
1054
1199
|
: await this.getCachedTable(tableOrName);
|
|
1055
1200
|
const up = this.dropPrimaryKeySql(table);
|
|
1056
|
-
const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name));
|
|
1201
|
+
const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name), constraintName);
|
|
1057
1202
|
await this.executeQueries(up, down);
|
|
1058
1203
|
table.primaryColumns.forEach((column) => {
|
|
1059
1204
|
column.isPrimary = false;
|
|
@@ -1427,12 +1572,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1427
1572
|
const currentDatabase = await this.getCurrentDatabase();
|
|
1428
1573
|
const dbTables = [];
|
|
1429
1574
|
if (!tableNames) {
|
|
1430
|
-
const databasesSql = `
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
FROM "master"."dbo"."sysdatabases"
|
|
1434
|
-
WHERE "name" NOT IN ('master', 'model', 'msdb')
|
|
1435
|
-
`;
|
|
1575
|
+
const databasesSql = `SELECT DISTINCT "name" ` +
|
|
1576
|
+
`FROM "master"."dbo"."sysdatabases" ` +
|
|
1577
|
+
`WHERE "name" NOT IN ('master', 'model', 'msdb')`;
|
|
1436
1578
|
const dbDatabases = await this.query(databasesSql);
|
|
1437
1579
|
const tablesSql = dbDatabases
|
|
1438
1580
|
.map(({ name }) => {
|
|
@@ -1497,7 +1639,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1497
1639
|
const condition = tables
|
|
1498
1640
|
.map(({ TABLE_SCHEMA, TABLE_NAME }) => `("TABLE_SCHEMA" = '${TABLE_SCHEMA}' AND "TABLE_NAME" = '${TABLE_NAME}')`)
|
|
1499
1641
|
.join("OR");
|
|
1500
|
-
return `SELECT
|
|
1642
|
+
return (`SELECT "COLUMNS".*, "cc"."is_persisted", "cc"."definition" ` +
|
|
1643
|
+
`FROM "${TABLE_CATALOG}"."INFORMATION_SCHEMA"."COLUMNS" ` +
|
|
1644
|
+
`LEFT JOIN "sys"."computed_columns" "cc" ON COL_NAME("cc"."object_id", "cc"."column_id") = "column_name" ` +
|
|
1645
|
+
`WHERE (${condition})`);
|
|
1501
1646
|
})
|
|
1502
1647
|
.join(" UNION ALL ");
|
|
1503
1648
|
const constraintsSql = Object.entries(dbTablesByCatalog)
|
|
@@ -1597,13 +1742,14 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1597
1742
|
table.name = this.driver.buildTableName(dbTable["TABLE_NAME"], schema, db);
|
|
1598
1743
|
const defaultCollation = dbCollations.find((dbCollation) => dbCollation["NAME"] === dbTable["TABLE_CATALOG"]);
|
|
1599
1744
|
// create columns from the loaded columns
|
|
1600
|
-
table.columns = dbColumns
|
|
1601
|
-
.filter((dbColumn) => dbColumn["TABLE_NAME"] ===
|
|
1745
|
+
table.columns = await Promise.all(dbColumns
|
|
1746
|
+
.filter((dbColumn) => dbColumn["TABLE_NAME"] ===
|
|
1747
|
+
dbTable["TABLE_NAME"] &&
|
|
1602
1748
|
dbColumn["TABLE_SCHEMA"] ===
|
|
1603
1749
|
dbTable["TABLE_SCHEMA"] &&
|
|
1604
1750
|
dbColumn["TABLE_CATALOG"] ===
|
|
1605
1751
|
dbTable["TABLE_CATALOG"])
|
|
1606
|
-
.map((dbColumn) => {
|
|
1752
|
+
.map(async (dbColumn) => {
|
|
1607
1753
|
const columnConstraints = dbConstraints.filter((dbConstraint) => dbConstraint["TABLE_NAME"] ===
|
|
1608
1754
|
dbColumn["TABLE_NAME"] &&
|
|
1609
1755
|
dbConstraint["TABLE_SCHEMA"] ===
|
|
@@ -1625,7 +1771,6 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1625
1771
|
dbConstraint["COLUMN_NAME"] !==
|
|
1626
1772
|
dbColumn["COLUMN_NAME"]);
|
|
1627
1773
|
});
|
|
1628
|
-
const isPrimary = !!columnConstraints.find((constraint) => constraint["CONSTRAINT_TYPE"] === "PRIMARY KEY");
|
|
1629
1774
|
const isGenerated = !!dbIdentityColumns.find((column) => column["TABLE_NAME"] ===
|
|
1630
1775
|
dbColumn["TABLE_NAME"] &&
|
|
1631
1776
|
column["TABLE_SCHEMA"] ===
|
|
@@ -1636,7 +1781,8 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1636
1781
|
dbColumn["COLUMN_NAME"]);
|
|
1637
1782
|
const tableColumn = new TableColumn();
|
|
1638
1783
|
tableColumn.name = dbColumn["COLUMN_NAME"];
|
|
1639
|
-
tableColumn.type =
|
|
1784
|
+
tableColumn.type =
|
|
1785
|
+
dbColumn["DATA_TYPE"].toLowerCase();
|
|
1640
1786
|
// check only columns that have length property
|
|
1641
1787
|
if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type) !== -1 &&
|
|
1642
1788
|
dbColumn["CHARACTER_MAXIMUM_LENGTH"]) {
|
|
@@ -1659,7 +1805,8 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1659
1805
|
dbColumn["NUMERIC_PRECISION"];
|
|
1660
1806
|
if (dbColumn["NUMERIC_SCALE"] !== null &&
|
|
1661
1807
|
!this.isDefaultColumnScale(table, tableColumn, dbColumn["NUMERIC_SCALE"]))
|
|
1662
|
-
tableColumn.scale =
|
|
1808
|
+
tableColumn.scale =
|
|
1809
|
+
dbColumn["NUMERIC_SCALE"];
|
|
1663
1810
|
}
|
|
1664
1811
|
if (tableColumn.type === "nvarchar") {
|
|
1665
1812
|
// Check if this is an enum
|
|
@@ -1684,6 +1831,33 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1684
1831
|
}
|
|
1685
1832
|
}
|
|
1686
1833
|
}
|
|
1834
|
+
const primaryConstraint = columnConstraints.find((constraint) => constraint["CONSTRAINT_TYPE"] ===
|
|
1835
|
+
"PRIMARY KEY");
|
|
1836
|
+
if (primaryConstraint) {
|
|
1837
|
+
tableColumn.isPrimary = true;
|
|
1838
|
+
// find another columns involved in primary key constraint
|
|
1839
|
+
const anotherPrimaryConstraints = dbConstraints.filter((constraint) => constraint["TABLE_NAME"] ===
|
|
1840
|
+
dbColumn["TABLE_NAME"] &&
|
|
1841
|
+
constraint["TABLE_SCHEMA"] ===
|
|
1842
|
+
dbColumn["TABLE_SCHEMA"] &&
|
|
1843
|
+
constraint["TABLE_CATALOG"] ===
|
|
1844
|
+
dbColumn["TABLE_CATALOG"] &&
|
|
1845
|
+
constraint["COLUMN_NAME"] !==
|
|
1846
|
+
dbColumn["COLUMN_NAME"] &&
|
|
1847
|
+
constraint["CONSTRAINT_TYPE"] ===
|
|
1848
|
+
"PRIMARY KEY");
|
|
1849
|
+
// collect all column names
|
|
1850
|
+
const columnNames = anotherPrimaryConstraints.map((constraint) => constraint["COLUMN_NAME"]);
|
|
1851
|
+
columnNames.push(dbColumn["COLUMN_NAME"]);
|
|
1852
|
+
// build default primary key constraint name
|
|
1853
|
+
const pkName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
|
|
1854
|
+
// if primary key has user-defined constraint name, write it in table column
|
|
1855
|
+
if (primaryConstraint["CONSTRAINT_NAME"] !==
|
|
1856
|
+
pkName) {
|
|
1857
|
+
tableColumn.primaryKeyConstraintName =
|
|
1858
|
+
primaryConstraint["CONSTRAINT_NAME"];
|
|
1859
|
+
}
|
|
1860
|
+
}
|
|
1687
1861
|
tableColumn.default =
|
|
1688
1862
|
dbColumn["COLUMN_DEFAULT"] !== null &&
|
|
1689
1863
|
dbColumn["COLUMN_DEFAULT"] !== undefined
|
|
@@ -1691,7 +1865,6 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1691
1865
|
: undefined;
|
|
1692
1866
|
tableColumn.isNullable =
|
|
1693
1867
|
dbColumn["IS_NULLABLE"] === "YES";
|
|
1694
|
-
tableColumn.isPrimary = isPrimary;
|
|
1695
1868
|
tableColumn.isUnique =
|
|
1696
1869
|
uniqueConstraints.length > 0 &&
|
|
1697
1870
|
!isConstraintComposite;
|
|
@@ -1719,8 +1892,31 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1719
1892
|
? dbColumn["DATETIME_PRECISION"]
|
|
1720
1893
|
: undefined;
|
|
1721
1894
|
}
|
|
1895
|
+
if (dbColumn["is_persisted"] !== null &&
|
|
1896
|
+
dbColumn["is_persisted"] !== undefined &&
|
|
1897
|
+
dbColumn["definition"]) {
|
|
1898
|
+
tableColumn.generatedType =
|
|
1899
|
+
dbColumn["is_persisted"] === true
|
|
1900
|
+
? "STORED"
|
|
1901
|
+
: "VIRTUAL";
|
|
1902
|
+
// We cannot relay on information_schema.columns.generation_expression, because it is formatted different.
|
|
1903
|
+
const asExpressionQuery = await this.selectTypeormMetadataSql({
|
|
1904
|
+
database: dbTable["TABLE_CATALOG"],
|
|
1905
|
+
schema: dbTable["TABLE_SCHEMA"],
|
|
1906
|
+
table: dbTable["TABLE_NAME"],
|
|
1907
|
+
type: MetadataTableType.GENERATED_COLUMN,
|
|
1908
|
+
name: tableColumn.name,
|
|
1909
|
+
});
|
|
1910
|
+
const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
|
|
1911
|
+
if (results[0] && results[0].value) {
|
|
1912
|
+
tableColumn.asExpression = results[0].value;
|
|
1913
|
+
}
|
|
1914
|
+
else {
|
|
1915
|
+
tableColumn.asExpression = "";
|
|
1916
|
+
}
|
|
1917
|
+
}
|
|
1722
1918
|
return tableColumn;
|
|
1723
|
-
});
|
|
1919
|
+
}));
|
|
1724
1920
|
// find unique constraints of table, group them by constraint name and build TableUnique.
|
|
1725
1921
|
const tableUniqueConstraints = OrmUtils.uniq(dbConstraints.filter((dbConstraint) => dbConstraint["TABLE_NAME"] ===
|
|
1726
1922
|
dbTable["TABLE_NAME"] &&
|
|
@@ -1875,7 +2071,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1875
2071
|
}
|
|
1876
2072
|
const primaryColumns = table.columns.filter((column) => column.isPrimary);
|
|
1877
2073
|
if (primaryColumns.length > 0) {
|
|
1878
|
-
const primaryKeyName =
|
|
2074
|
+
const primaryKeyName = primaryColumns[0].primaryKeyConstraintName
|
|
2075
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
2076
|
+
: this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
|
|
1879
2077
|
const columnNames = primaryColumns
|
|
1880
2078
|
.map((column) => `"${column.name}"`)
|
|
1881
2079
|
.join(", ");
|
|
@@ -1966,8 +2164,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1966
2164
|
/**
|
|
1967
2165
|
* Builds create primary key sql.
|
|
1968
2166
|
*/
|
|
1969
|
-
createPrimaryKeySql(table, columnNames) {
|
|
1970
|
-
const primaryKeyName =
|
|
2167
|
+
createPrimaryKeySql(table, columnNames, constraintName) {
|
|
2168
|
+
const primaryKeyName = constraintName
|
|
2169
|
+
? constraintName
|
|
2170
|
+
: this.connection.namingStrategy.primaryKeyName(table, columnNames);
|
|
1971
2171
|
const columnNamesString = columnNames
|
|
1972
2172
|
.map((columnName) => `"${columnName}"`)
|
|
1973
2173
|
.join(", ");
|
|
@@ -1978,7 +2178,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
1978
2178
|
*/
|
|
1979
2179
|
dropPrimaryKeySql(table) {
|
|
1980
2180
|
const columnNames = table.primaryColumns.map((column) => column.name);
|
|
1981
|
-
const
|
|
2181
|
+
const constraintName = table.primaryColumns[0].primaryKeyConstraintName;
|
|
2182
|
+
const primaryKeyName = constraintName
|
|
2183
|
+
? constraintName
|
|
2184
|
+
: this.connection.namingStrategy.primaryKeyName(table, columnNames);
|
|
1982
2185
|
return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${primaryKeyName}"`);
|
|
1983
2186
|
}
|
|
1984
2187
|
/**
|
|
@@ -2097,8 +2300,19 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
|
|
|
2097
2300
|
}
|
|
2098
2301
|
if (column.collation)
|
|
2099
2302
|
c += " COLLATE " + column.collation;
|
|
2100
|
-
if (column.
|
|
2101
|
-
c +=
|
|
2303
|
+
if (column.asExpression) {
|
|
2304
|
+
c += ` AS (${column.asExpression})`;
|
|
2305
|
+
if (column.generatedType === "STORED") {
|
|
2306
|
+
c += ` PERSISTED`;
|
|
2307
|
+
// NOT NULL can be specified for computed columns only if PERSISTED is also specified
|
|
2308
|
+
if (column.isNullable !== true)
|
|
2309
|
+
c += " NOT NULL";
|
|
2310
|
+
}
|
|
2311
|
+
}
|
|
2312
|
+
else {
|
|
2313
|
+
if (column.isNullable !== true)
|
|
2314
|
+
c += " NOT NULL";
|
|
2315
|
+
}
|
|
2102
2316
|
if (column.isGenerated === true &&
|
|
2103
2317
|
column.generationStrategy === "increment" &&
|
|
2104
2318
|
!skipIdentity)
|