typeorm 0.2.38 → 0.2.39-dev.d8c5812
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/browser/connection/ConnectionMetadataBuilder.js +4 -4
- package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
- package/browser/connection/options-reader/ConnectionOptionsYmlReader.js +1 -1
- package/browser/connection/options-reader/ConnectionOptionsYmlReader.js.map +1 -1
- package/browser/decorator/transaction/Transaction.js +3 -3
- package/browser/decorator/transaction/Transaction.js.map +1 -1
- package/browser/driver/DriverUtils.js +1 -1
- package/browser/driver/DriverUtils.js.map +1 -1
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +2 -2
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachDriver.js +1 -1
- package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +2 -2
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.js +2 -2
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleQueryRunner.js +2 -2
- package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.js +1 -1
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +2 -2
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.js +2 -2
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/driver/sqlite/SqliteQueryRunner.js +16 -8
- package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +2 -2
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +10 -10
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/find-options/FindOptionsUtils.js +1 -1
- package/browser/find-options/FindOptionsUtils.js.map +1 -1
- package/browser/metadata/ColumnMetadata.js +4 -4
- package/browser/metadata/ColumnMetadata.js.map +1 -1
- package/browser/metadata/EmbeddedMetadata.js +1 -1
- package/browser/metadata/EmbeddedMetadata.js.map +1 -1
- package/browser/metadata/EntityMetadata.js +1 -1
- package/browser/metadata/EntityMetadata.js.map +1 -1
- package/browser/metadata/RelationMetadata.js +4 -4
- package/browser/metadata/RelationMetadata.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataBuilder.js +5 -5
- package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +1 -1
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/browser/naming-strategy/DefaultNamingStrategy.js +5 -5
- package/browser/naming-strategy/DefaultNamingStrategy.js.map +1 -1
- package/browser/persistence/Subject.js +1 -1
- package/browser/persistence/Subject.js.map +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/SubjectTopoligicalSorter.js +5 -5
- package/browser/persistence/SubjectTopoligicalSorter.js.map +1 -1
- package/browser/persistence/tree/ClosureSubjectExecutor.js +4 -4
- package/browser/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
- package/browser/query-builder/InsertQueryBuilder.js +2 -2
- package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
- package/browser/query-builder/QueryBuilder.js +9 -9
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/RelationLoader.js +2 -2
- package/browser/query-builder/RelationLoader.js.map +1 -1
- package/browser/query-builder/RelationRemover.js +6 -6
- package/browser/query-builder/RelationRemover.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.js +7 -7
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.js +2 -2
- package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdLoader.js +1 -1
- package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +2 -2
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/browser/query-runner/BaseQueryRunner.js +2 -2
- package/browser/query-runner/BaseQueryRunner.js.map +1 -1
- package/browser/query-runner/QueryLock.js +1 -1
- package/browser/query-runner/QueryLock.js.map +1 -1
- package/browser/repository/BaseEntity.js +1 -1
- package/browser/repository/BaseEntity.js.map +1 -1
- package/browser/repository/Repository.js +1 -1
- package/browser/repository/Repository.js.map +1 -1
- package/browser/repository/TreeRepository.js +2 -2
- package/browser/repository/TreeRepository.js.map +1 -1
- package/browser/schema-builder/table/TableCheck.js +1 -1
- package/browser/schema-builder/table/TableCheck.js.map +1 -1
- package/browser/schema-builder/table/TableForeignKey.js +2 -2
- package/browser/schema-builder/table/TableForeignKey.js.map +1 -1
- package/browser/schema-builder/table/TableIndex.js +1 -1
- package/browser/schema-builder/table/TableIndex.js.map +1 -1
- package/browser/schema-builder/table/TableUnique.js +1 -1
- package/browser/schema-builder/table/TableUnique.js.map +1 -1
- package/cache/DbQueryResultCache.js +12 -12
- package/cache/RedisQueryResultCache.js +12 -12
- package/cli.js +1 -6
- package/cli.js.map +1 -1
- package/commands/CacheClearCommand.js +4 -4
- package/commands/CacheClearCommand.js.map +1 -1
- package/commands/CommandUtils.js +10 -10
- package/commands/CommandUtils.js.map +1 -1
- package/commands/EntityCreateCommand.js +3 -3
- package/commands/EntityCreateCommand.js.map +1 -1
- package/commands/InitCommand.js +5 -5
- package/commands/InitCommand.js.map +1 -1
- package/commands/MigrationCreateCommand.js +5 -5
- package/commands/MigrationCreateCommand.js.map +1 -1
- package/commands/MigrationGenerateCommand.js +7 -7
- package/commands/MigrationGenerateCommand.js.map +1 -1
- package/commands/MigrationRevertCommand.js +4 -4
- package/commands/MigrationRevertCommand.js.map +1 -1
- package/commands/MigrationRunCommand.js +5 -5
- package/commands/MigrationRunCommand.js.map +1 -1
- package/commands/MigrationShowCommand.js +5 -5
- package/commands/MigrationShowCommand.js.map +1 -1
- package/commands/QueryCommand.js +4 -4
- package/commands/QueryCommand.js.map +1 -1
- package/commands/SchemaDropCommand.js +4 -4
- package/commands/SchemaDropCommand.js.map +1 -1
- package/commands/SchemaLogCommand.js +5 -5
- package/commands/SchemaLogCommand.js.map +1 -1
- package/commands/SchemaSyncCommand.js +4 -4
- package/commands/SchemaSyncCommand.js.map +1 -1
- package/commands/SubscriberCreateCommand.js +3 -3
- package/commands/SubscriberCreateCommand.js.map +1 -1
- package/commands/VersionCommand.js +3 -3
- package/commands/VersionCommand.js.map +1 -1
- package/connection/Connection.js +19 -19
- package/connection/Connection.js.map +1 -1
- package/connection/ConnectionMetadataBuilder.js +11 -11
- package/connection/ConnectionMetadataBuilder.js.map +1 -1
- package/connection/ConnectionOptionsReader.js +9 -9
- package/connection/ConnectionOptionsReader.js.map +1 -1
- package/connection/options-reader/ConnectionOptionsEnvReader.js +2 -2
- package/connection/options-reader/ConnectionOptionsXmlReader.js +3 -3
- package/connection/options-reader/ConnectionOptionsXmlReader.js.map +1 -1
- package/connection/options-reader/ConnectionOptionsYmlReader.js +4 -4
- package/connection/options-reader/ConnectionOptionsYmlReader.js.map +1 -1
- package/decorator/Check.js +1 -1
- package/decorator/Check.js.map +1 -1
- package/decorator/EntityRepository.js +1 -1
- package/decorator/EntityRepository.js.map +1 -1
- package/decorator/Exclusion.js +1 -1
- package/decorator/Exclusion.js.map +1 -1
- package/decorator/Generated.js +1 -1
- package/decorator/Generated.js.map +1 -1
- package/decorator/Index.js +1 -1
- package/decorator/Index.js.map +1 -1
- package/decorator/Unique.js +1 -1
- package/decorator/Unique.js.map +1 -1
- package/decorator/columns/Column.js +4 -4
- package/decorator/columns/Column.js.map +1 -1
- package/decorator/columns/CreateDateColumn.js +1 -1
- package/decorator/columns/CreateDateColumn.js.map +1 -1
- package/decorator/columns/DeleteDateColumn.js +1 -1
- package/decorator/columns/DeleteDateColumn.js.map +1 -1
- package/decorator/columns/ObjectIdColumn.js +1 -1
- package/decorator/columns/ObjectIdColumn.js.map +1 -1
- package/decorator/columns/PrimaryColumn.js +2 -2
- package/decorator/columns/PrimaryColumn.js.map +1 -1
- package/decorator/columns/PrimaryGeneratedColumn.js +2 -2
- package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
- package/decorator/columns/UpdateDateColumn.js +1 -1
- package/decorator/columns/UpdateDateColumn.js.map +1 -1
- package/decorator/columns/VersionColumn.js +1 -1
- package/decorator/columns/VersionColumn.js.map +1 -1
- package/decorator/columns/ViewColumn.js +1 -1
- package/decorator/columns/ViewColumn.js.map +1 -1
- package/decorator/entity/ChildEntity.js +2 -2
- package/decorator/entity/ChildEntity.js.map +1 -1
- package/decorator/entity/Entity.js +1 -1
- package/decorator/entity/Entity.js.map +1 -1
- package/decorator/entity/TableInheritance.js +1 -1
- package/decorator/entity/TableInheritance.js.map +1 -1
- package/decorator/entity-view/ViewEntity.js +1 -1
- package/decorator/entity-view/ViewEntity.js.map +1 -1
- package/decorator/listeners/AfterInsert.js +1 -1
- package/decorator/listeners/AfterInsert.js.map +1 -1
- package/decorator/listeners/AfterLoad.js +1 -1
- package/decorator/listeners/AfterLoad.js.map +1 -1
- package/decorator/listeners/AfterRemove.js +1 -1
- package/decorator/listeners/AfterRemove.js.map +1 -1
- package/decorator/listeners/AfterUpdate.js +1 -1
- package/decorator/listeners/AfterUpdate.js.map +1 -1
- package/decorator/listeners/BeforeInsert.js +1 -1
- package/decorator/listeners/BeforeInsert.js.map +1 -1
- package/decorator/listeners/BeforeRemove.js +1 -1
- package/decorator/listeners/BeforeRemove.js.map +1 -1
- package/decorator/listeners/BeforeUpdate.js +1 -1
- package/decorator/listeners/BeforeUpdate.js.map +1 -1
- package/decorator/listeners/EventSubscriber.js +1 -1
- package/decorator/listeners/EventSubscriber.js.map +1 -1
- package/decorator/relations/JoinColumn.js +1 -1
- package/decorator/relations/JoinColumn.js.map +1 -1
- package/decorator/relations/JoinTable.js +1 -1
- package/decorator/relations/JoinTable.js.map +1 -1
- package/decorator/relations/ManyToMany.js +1 -1
- package/decorator/relations/ManyToMany.js.map +1 -1
- package/decorator/relations/ManyToOne.js +1 -1
- package/decorator/relations/ManyToOne.js.map +1 -1
- package/decorator/relations/OneToMany.js +1 -1
- package/decorator/relations/OneToMany.js.map +1 -1
- package/decorator/relations/OneToOne.js +1 -1
- package/decorator/relations/OneToOne.js.map +1 -1
- package/decorator/relations/RelationCount.js +1 -1
- package/decorator/relations/RelationCount.js.map +1 -1
- package/decorator/relations/RelationId.js +1 -1
- package/decorator/relations/RelationId.js.map +1 -1
- package/decorator/transaction/Transaction.js +7 -7
- package/decorator/transaction/Transaction.js.map +1 -1
- package/decorator/transaction/TransactionManager.js +1 -1
- package/decorator/transaction/TransactionManager.js.map +1 -1
- package/decorator/transaction/TransactionRepository.js +1 -1
- package/decorator/transaction/TransactionRepository.js.map +1 -1
- package/decorator/tree/Tree.js +1 -1
- package/decorator/tree/Tree.js.map +1 -1
- package/decorator/tree/TreeChildren.js +1 -1
- package/decorator/tree/TreeChildren.js.map +1 -1
- package/decorator/tree/TreeLevelColumn.js +1 -1
- package/decorator/tree/TreeLevelColumn.js.map +1 -1
- package/decorator/tree/TreeParent.js +1 -1
- package/decorator/tree/TreeParent.js.map +1 -1
- package/driver/DriverUtils.js +9 -9
- package/driver/DriverUtils.js.map +1 -1
- package/driver/aurora-data-api/AuroraDataApiConnection.js +1 -1
- package/driver/aurora-data-api/AuroraDataApiConnection.js.map +1 -1
- package/driver/aurora-data-api/AuroraDataApiDriver.js +6 -6
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +129 -129
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js +8 -8
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js.map +1 -1
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +12 -12
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.js +10 -10
- package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +5 -5
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/driver/capacitor/CapacitorDriver.js +7 -7
- package/driver/capacitor/CapacitorDriver.js.map +1 -1
- package/driver/capacitor/CapacitorQueryRunner.js +5 -5
- package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/driver/cockroachdb/CockroachDriver.js +11 -11
- package/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +137 -137
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/cordova/CordovaDriver.js +3 -3
- package/driver/cordova/CordovaDriver.js.map +1 -1
- package/driver/cordova/CordovaQueryRunner.js +13 -13
- package/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/driver/expo/ExpoDriver.js +3 -3
- package/driver/expo/ExpoDriver.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.js +11 -11
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/mongodb/MongoDriver.js +2 -2
- package/driver/mongodb/MongoQueryRunner.js +178 -178
- package/driver/mysql/MysqlDriver.js +5 -5
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.js +130 -130
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/nativescript/NativescriptDriver.js +3 -3
- package/driver/nativescript/NativescriptDriver.js.map +1 -1
- package/driver/nativescript/NativescriptQueryRunner.js +3 -3
- package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/driver/oracle/OracleDriver.js +8 -8
- package/driver/oracle/OracleQueryRunner.js +125 -125
- package/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresDriver.js +19 -19
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.js +150 -150
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/react-native/ReactNativeDriver.js +3 -3
- package/driver/react-native/ReactNativeDriver.js.map +1 -1
- package/driver/react-native/ReactNativeQueryRunner.js +3 -3
- package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/driver/sap/SapDriver.js +5 -5
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/sap/SapQueryRunner.js +135 -135
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/driver/sqlite/SqliteDriver.js +10 -10
- package/driver/sqlite/SqliteDriver.js.map +1 -1
- package/driver/sqlite/SqliteQueryRunner.js +21 -13
- package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -4
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +121 -121
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqljs/SqljsDriver.js +13 -13
- package/driver/sqljs/SqljsDriver.js.map +1 -1
- package/driver/sqljs/SqljsQueryRunner.js +9 -9
- package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/driver/sqlserver/SqlServerDriver.js +6 -6
- package/driver/sqlserver/SqlServerQueryRunner.js +152 -152
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/entity-manager/EntityManager.js +30 -30
- package/entity-manager/EntityManager.js.map +1 -1
- package/entity-manager/MongoEntityManager.js +15 -15
- package/entity-manager/MongoEntityManager.js.map +1 -1
- package/entity-manager/SqljsEntityManager.js +5 -5
- package/entity-manager/SqljsEntityManager.js.map +1 -1
- package/entity-schema/EntitySchemaTransformer.js +1 -1
- package/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/error/AlreadyHasActiveConnectionError.js +1 -1
- package/error/AlreadyHasActiveConnectionError.js.map +1 -1
- package/error/CannotAttachTreeChildrenEntityError.js +1 -1
- package/error/CannotAttachTreeChildrenEntityError.js.map +1 -1
- package/error/CannotConnectAlreadyConnectedError.js +1 -1
- package/error/CannotConnectAlreadyConnectedError.js.map +1 -1
- package/error/CannotCreateEntityIdMapError.js +1 -1
- package/error/CannotCreateEntityIdMapError.js.map +1 -1
- package/error/CannotDetermineEntityError.js +1 -1
- package/error/CannotDetermineEntityError.js.map +1 -1
- package/error/CannotExecuteNotConnectedError.js +1 -1
- package/error/CannotExecuteNotConnectedError.js.map +1 -1
- package/error/CannotGetEntityManagerNotConnectedError.js +1 -1
- package/error/CannotGetEntityManagerNotConnectedError.js.map +1 -1
- package/error/CannotReflectMethodParameterTypeError.js +1 -1
- package/error/CannotReflectMethodParameterTypeError.js.map +1 -1
- package/error/CircularRelationsError.js +1 -1
- package/error/CircularRelationsError.js.map +1 -1
- package/error/ColumnTypeUndefinedError.js +1 -1
- package/error/ColumnTypeUndefinedError.js.map +1 -1
- package/error/ConnectionIsNotSetError.js +1 -1
- package/error/ConnectionIsNotSetError.js.map +1 -1
- package/error/ConnectionNotFoundError.js +1 -1
- package/error/ConnectionNotFoundError.js.map +1 -1
- package/error/CustomRepositoryCannotInheritRepositoryError.js +1 -1
- package/error/CustomRepositoryCannotInheritRepositoryError.js.map +1 -1
- package/error/CustomRepositoryDoesNotHaveEntityError.js +1 -1
- package/error/CustomRepositoryDoesNotHaveEntityError.js.map +1 -1
- package/error/CustomRepositoryNotFoundError.js +1 -1
- package/error/CustomRepositoryNotFoundError.js.map +1 -1
- package/error/DataTypeNotSupportedError.js +1 -1
- package/error/DataTypeNotSupportedError.js.map +1 -1
- package/error/DriverOptionNotSetError.js +1 -1
- package/error/DriverOptionNotSetError.js.map +1 -1
- package/error/DriverPackageNotInstalledError.js +1 -1
- package/error/DriverPackageNotInstalledError.js.map +1 -1
- package/error/EntityColumnNotFound.js +1 -1
- package/error/EntityColumnNotFound.js.map +1 -1
- package/error/EntityMetadataNotFoundError.js +1 -1
- package/error/EntityMetadataNotFoundError.js.map +1 -1
- package/error/EntityNotFoundError.js +1 -1
- package/error/EntityNotFoundError.js.map +1 -1
- package/error/FindRelationsNotFoundError.js +1 -1
- package/error/FindRelationsNotFoundError.js.map +1 -1
- package/error/InitializedRelationError.js +1 -1
- package/error/InitializedRelationError.js.map +1 -1
- package/error/InsertValuesMissingError.js +1 -1
- package/error/InsertValuesMissingError.js.map +1 -1
- package/error/LimitOnUpdateNotSupportedError.js +1 -1
- package/error/LimitOnUpdateNotSupportedError.js.map +1 -1
- package/error/LockNotSupportedOnGivenDriverError.js +1 -1
- package/error/LockNotSupportedOnGivenDriverError.js.map +1 -1
- package/error/MetadataAlreadyExistsError.js +1 -1
- package/error/MetadataAlreadyExistsError.js.map +1 -1
- package/error/MetadataWithSuchNameAlreadyExistsError.js +1 -1
- package/error/MetadataWithSuchNameAlreadyExistsError.js.map +1 -1
- package/error/MissingDeleteDateColumnError.js +1 -1
- package/error/MissingDeleteDateColumnError.js.map +1 -1
- package/error/MissingDriverError.js +1 -1
- package/error/MissingDriverError.js.map +1 -1
- package/error/MissingJoinColumnError.js +1 -1
- package/error/MissingJoinColumnError.js.map +1 -1
- package/error/MissingJoinTableError.js +1 -1
- package/error/MissingJoinTableError.js.map +1 -1
- package/error/MissingPrimaryColumnError.js +1 -1
- package/error/MissingPrimaryColumnError.js.map +1 -1
- package/error/MustBeEntityError.js +1 -1
- package/error/MustBeEntityError.js.map +1 -1
- package/error/NamingStrategyNotFoundError.js +1 -1
- package/error/NamingStrategyNotFoundError.js.map +1 -1
- package/error/NestedSetMultipleRootError.js +1 -1
- package/error/NestedSetMultipleRootError.js.map +1 -1
- package/error/NoConnectionForRepositoryError.js +1 -1
- package/error/NoConnectionForRepositoryError.js.map +1 -1
- package/error/NoConnectionOptionError.js +1 -1
- package/error/NoConnectionOptionError.js.map +1 -1
- package/error/NoNeedToReleaseEntityManagerError.js +1 -1
- package/error/NoNeedToReleaseEntityManagerError.js.map +1 -1
- package/error/NoVersionOrUpdateDateColumnError.js +1 -1
- package/error/NoVersionOrUpdateDateColumnError.js.map +1 -1
- package/error/OffsetWithoutLimitNotSupportedError.js +1 -1
- package/error/OffsetWithoutLimitNotSupportedError.js.map +1 -1
- package/error/OptimisticLockCanNotBeUsedError.js +1 -1
- package/error/OptimisticLockCanNotBeUsedError.js.map +1 -1
- package/error/OptimisticLockVersionMismatchError.js +1 -1
- package/error/OptimisticLockVersionMismatchError.js.map +1 -1
- package/error/PersistedEntityNotFoundError.js +1 -1
- package/error/PersistedEntityNotFoundError.js.map +1 -1
- package/error/PessimisticLockTransactionRequiredError.js +1 -1
- package/error/PessimisticLockTransactionRequiredError.js.map +1 -1
- package/error/PrimaryColumnCannotBeNullableError.js +1 -1
- package/error/PrimaryColumnCannotBeNullableError.js.map +1 -1
- package/error/QueryFailedError.js +3 -3
- package/error/QueryFailedError.js.map +1 -1
- package/error/QueryRunnerAlreadyReleasedError.js +1 -1
- package/error/QueryRunnerAlreadyReleasedError.js.map +1 -1
- package/error/QueryRunnerProviderAlreadyReleasedError.js +1 -1
- package/error/QueryRunnerProviderAlreadyReleasedError.js.map +1 -1
- package/error/RepositoryNotFoundError.js +1 -1
- package/error/RepositoryNotFoundError.js.map +1 -1
- package/error/RepositoryNotTreeError.js +1 -1
- package/error/RepositoryNotTreeError.js.map +1 -1
- package/error/ReturningStatementNotSupportedError.js +1 -1
- package/error/ReturningStatementNotSupportedError.js.map +1 -1
- package/error/SubjectRemovedAndUpdatedError.js +1 -1
- package/error/SubjectRemovedAndUpdatedError.js.map +1 -1
- package/error/SubjectWithoutIdentifierError.js +1 -1
- package/error/SubjectWithoutIdentifierError.js.map +1 -1
- package/error/TransactionAlreadyStartedError.js +1 -1
- package/error/TransactionAlreadyStartedError.js.map +1 -1
- package/error/TransactionNotStartedError.js +1 -1
- package/error/TransactionNotStartedError.js.map +1 -1
- package/error/TreeRepositoryNotSupportedError.js +1 -1
- package/error/TreeRepositoryNotSupportedError.js.map +1 -1
- package/error/TypeORMError.js +1 -1
- package/error/TypeORMError.js.map +1 -1
- package/error/UpdateValuesMissingError.js +1 -1
- package/error/UpdateValuesMissingError.js.map +1 -1
- package/error/UsingJoinColumnIsNotAllowedError.js +1 -1
- package/error/UsingJoinColumnIsNotAllowedError.js.map +1 -1
- package/error/UsingJoinColumnOnlyOnOneSideAllowedError.js +1 -1
- package/error/UsingJoinColumnOnlyOnOneSideAllowedError.js.map +1 -1
- package/error/UsingJoinTableIsNotAllowedError.js +1 -1
- package/error/UsingJoinTableIsNotAllowedError.js.map +1 -1
- package/error/UsingJoinTableOnlyOnOneSideAllowedError.js +1 -1
- package/error/UsingJoinTableOnlyOnOneSideAllowedError.js.map +1 -1
- package/error/index.js +62 -62
- package/error/index.js.map +1 -1
- package/find-options/FindOptionsUtils.js +4 -4
- package/find-options/FindOptionsUtils.js.map +1 -1
- package/globals.js +7 -7
- package/globals.js.map +1 -1
- package/index.js +102 -102
- package/index.js.map +1 -1
- package/logger/DebugLogger.js +9 -9
- package/logger/DebugLogger.js.map +1 -1
- package/logger/FileLogger.js +1 -1
- package/logger/FileLogger.js.map +1 -1
- package/metadata/ColumnMetadata.js +4 -4
- package/metadata/ColumnMetadata.js.map +1 -1
- package/metadata/EmbeddedMetadata.js +1 -1
- package/metadata/EmbeddedMetadata.js.map +1 -1
- package/metadata/EntityMetadata.js +2 -2
- package/metadata/EntityMetadata.js.map +1 -1
- package/metadata/RelationMetadata.js +4 -4
- package/metadata/RelationMetadata.js.map +1 -1
- package/metadata-builder/EntityMetadataBuilder.js +5 -5
- package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/JunctionEntityMetadataBuilder.js +1 -1
- package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/migration/MigrationExecutor.js +33 -33
- package/migration/MigrationExecutor.js.map +1 -1
- package/naming-strategy/DefaultNamingStrategy.js +10 -10
- package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
- package/package.json +1 -239
- package/persistence/EntityPersistExecutor.js +5 -5
- package/persistence/EntityPersistExecutor.js.map +1 -1
- package/persistence/Subject.js +1 -1
- package/persistence/Subject.js.map +1 -1
- package/persistence/SubjectDatabaseEntityLoader.js +6 -6
- package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
- package/persistence/SubjectExecutor.js +31 -31
- package/persistence/SubjectExecutor.js.map +1 -1
- package/persistence/SubjectTopoligicalSorter.js +5 -5
- package/persistence/SubjectTopoligicalSorter.js.map +1 -1
- package/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
- package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
- package/persistence/tree/ClosureSubjectExecutor.js +13 -13
- package/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
- package/persistence/tree/MaterializedPathSubjectExecutor.js +5 -5
- package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/persistence/tree/NestedSetSubjectExecutor.js +14 -14
- package/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
- package/platform/PlatformTools.js +8 -8
- package/platform/PlatformTools.js.map +1 -1
- package/query-builder/DeleteQueryBuilder.js +4 -4
- package/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/query-builder/InsertQueryBuilder.js +7 -7
- package/query-builder/InsertQueryBuilder.js.map +1 -1
- package/query-builder/JoinAttribute.js +1 -1
- package/query-builder/JoinAttribute.js.map +1 -1
- package/query-builder/QueryBuilder.js +37 -37
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/QueryBuilderUtils.js +1 -1
- package/query-builder/QueryBuilderUtils.js.map +1 -1
- package/query-builder/QueryExpressionMap.js +3 -3
- package/query-builder/QueryExpressionMap.js.map +1 -1
- package/query-builder/RelationLoader.js +2 -2
- package/query-builder/RelationLoader.js.map +1 -1
- package/query-builder/RelationQueryBuilder.js +13 -13
- package/query-builder/RelationQueryBuilder.js.map +1 -1
- package/query-builder/RelationRemover.js +12 -12
- package/query-builder/RelationRemover.js.map +1 -1
- package/query-builder/RelationUpdater.js +2 -2
- package/query-builder/ReturningResultsEntityUpdator.js +6 -6
- package/query-builder/SelectQueryBuilder.js +36 -36
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/query-builder/SoftDeleteQueryBuilder.js +4 -4
- package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/query-builder/UpdateQueryBuilder.js +7 -7
- package/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/query-builder/relation-count/RelationCountAttribute.js +2 -2
- package/query-builder/relation-count/RelationCountAttribute.js.map +1 -1
- package/query-builder/relation-count/RelationCountLoader.js +4 -4
- package/query-builder/relation-id/RelationIdAttribute.js +1 -1
- package/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
- package/query-builder/relation-id/RelationIdLoader.js +5 -5
- package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js +3 -3
- package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +2 -2
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/query-runner/BaseQueryRunner.js +25 -25
- package/query-runner/BaseQueryRunner.js.map +1 -1
- package/query-runner/QueryLock.js +3 -3
- package/query-runner/QueryLock.js.map +1 -1
- package/repository/AbstractRepository.js +1 -1
- package/repository/AbstractRepository.js.map +1 -1
- package/repository/BaseEntity.js +4 -4
- package/repository/BaseEntity.js.map +1 -1
- package/repository/MongoRepository.js +1 -1
- package/repository/MongoRepository.js.map +1 -1
- package/repository/Repository.js +1 -1
- package/repository/Repository.js.map +1 -1
- package/repository/TreeRepository.js +7 -7
- package/repository/TreeRepository.js.map +1 -1
- package/schema-builder/MongoSchemaBuilder.js +2 -2
- package/schema-builder/RdbmsSchemaBuilder.js +95 -95
- package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/schema-builder/table/Table.js +1 -1
- package/schema-builder/table/Table.js.map +1 -1
- package/schema-builder/table/TableCheck.js +1 -1
- package/schema-builder/table/TableCheck.js.map +1 -1
- package/schema-builder/table/TableForeignKey.js +2 -2
- package/schema-builder/table/TableForeignKey.js.map +1 -1
- package/schema-builder/table/TableIndex.js +1 -1
- package/schema-builder/table/TableIndex.js.map +1 -1
- package/schema-builder/table/TableUnique.js +1 -1
- package/schema-builder/table/TableUnique.js.map +1 -1
- package/util/DateUtils.js +1 -1
- package/util/DateUtils.js.map +1 -1
- package/util/DirectoryExportedClassesLoader.js +1 -1
- package/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/util/ObjectUtils.js +2 -2
- package/util/ObjectUtils.js.map +1 -1
- package/util/OrmUtils.js +2 -2
- package/util/OrmUtils.js.map +1 -1
- package/util/StringUtils.js +2 -2
- package/util/StringUtils.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/persistence/SubjectTopoligicalSorter.ts"],"names":[],"mappings":"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","file":"SubjectTopoligicalSorter.js","sourcesContent":["import {Subject} from \"./Subject\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nexport class SubjectTopoligicalSorter {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Insert subjects needs to be sorted.\n */\n subjects: Subject[];\n\n /**\n * Unique list of entity metadatas of this subject.\n */\n metadatas: EntityMetadata[];\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(subjects: Subject[]) {\n this.subjects = [...subjects]; // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects);\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sorts (orders) subjects in their topological order.\n */\n sort(direction: \"insert\"|\"delete\"): Subject[] {\n\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length)\n return this.subjects;\n\n const sortedSubjects: Subject[] = [];\n\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n const junctionSubjects = this.subjects.filter(subject => !subject.entity && !subject.databaseEntity);\n sortedSubjects.push(...junctionSubjects);\n this.removeAlreadySorted(junctionSubjects);\n }\n\n // next we always insert entities with non-nullable relations, sort them first\n const nonNullableDependencies = this.getNonNullableDependencies();\n let sortedNonNullableEntityTargets = this.toposort(nonNullableDependencies);\n if (direction === \"insert\")\n sortedNonNullableEntityTargets = sortedNonNullableEntityTargets.reverse();\n\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach(sortedEntityTarget => {\n const entityTargetSubjects = this.subjects.filter(subject => subject.metadata.targetName === sortedEntityTarget);\n sortedSubjects.push(...entityTargetSubjects);\n this.removeAlreadySorted(entityTargetSubjects);\n });\n\n // next sort all other entities\n // same process as in above but with other entities\n const otherDependencies: string[][] = this.getDependencies();\n let sortedOtherEntityTargets = this.toposort(otherDependencies);\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse();\n\n sortedOtherEntityTargets.forEach(sortedEntityTarget => {\n const entityTargetSubjects = this.subjects.filter(subject => subject.metadata.targetName === sortedEntityTarget);\n sortedSubjects.push(...entityTargetSubjects);\n this.removeAlreadySorted(entityTargetSubjects);\n });\n\n // if we have something left in the subjects add them as well\n sortedSubjects.push(...this.subjects);\n return sortedSubjects;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n */\n protected removeAlreadySorted(subjects: Subject[]) {\n subjects.forEach(subject => {\n this.subjects.splice(this.subjects.indexOf(subject), 1);\n });\n }\n\n /**\n * Extracts all unique metadatas from the given subjects.\n */\n protected getUniqueMetadatas(subjects: Subject[]) {\n const metadatas: EntityMetadata[] = [];\n subjects.forEach(subject => {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata);\n });\n return metadatas;\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getNonNullableDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach(relation => {\n if (relation.isNullable)\n return;\n\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, [] as string[][]);\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach(relation => {\n\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata)\n return;\n\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, [] as string[][]);\n }\n\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n */\n protected toposort(edges: any[][]) {\n\n function uniqueNodes(arr: any[]) {\n let res = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n let edge: any = arr[i];\n if (res.indexOf(edge[0]) < 0) res.push(edge[0]);\n if (res.indexOf(edge[1]) < 0) res.push(edge[1]);\n }\n return res;\n }\n\n const nodes = uniqueNodes(edges);\n let cursor = nodes.length\n , sorted = new Array(cursor)\n , visited: any = {}\n , i = cursor;\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, []);\n }\n\n function visit(node: any, i: number, predecessors: any[]) {\n if (predecessors.indexOf(node) >= 0) {\n throw new TypeORMError(\"Cyclic dependency: \" + JSON.stringify(node)); // todo: better error\n }\n\n if (!~nodes.indexOf(node)) {\n throw new TypeORMError(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" + JSON.stringify(node));\n }\n\n if (visited[i]) return;\n visited[i] = true;\n\n // outgoing edges\n let outgoing = edges.filter(function(edge) {\n return edge[0] === node;\n });\n if (i = outgoing.length) {\n let preds = predecessors.concat(node);\n do {\n let child = outgoing[--i][1];\n visit(child, nodes.indexOf(child), preds);\n } while (i);\n }\n\n sorted[--cursor] = node;\n }\n\n return sorted;\n }\n\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/persistence/SubjectTopoligicalSorter.ts"],"names":[],"mappings":"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","file":"SubjectTopoligicalSorter.js","sourcesContent":["import {Subject} from \"./Subject\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nexport class SubjectTopoligicalSorter {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Insert subjects needs to be sorted.\n */\n subjects: Subject[];\n\n /**\n * Unique list of entity metadatas of this subject.\n */\n metadatas: EntityMetadata[];\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(subjects: Subject[]) {\n this.subjects = [...subjects]; // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects);\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sorts (orders) subjects in their topological order.\n */\n sort(direction: \"insert\"|\"delete\"): Subject[] {\n\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length)\n return this.subjects;\n\n const sortedSubjects: Subject[] = [];\n\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n const junctionSubjects = this.subjects.filter(subject => !subject.entity && !subject.databaseEntity);\n sortedSubjects.push(...junctionSubjects);\n this.removeAlreadySorted(junctionSubjects);\n }\n\n // next we always insert entities with non-nullable relations, sort them first\n const nonNullableDependencies = this.getNonNullableDependencies();\n let sortedNonNullableEntityTargets = this.toposort(nonNullableDependencies);\n if (direction === \"insert\")\n sortedNonNullableEntityTargets = sortedNonNullableEntityTargets.reverse();\n\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach(sortedEntityTarget => {\n const entityTargetSubjects = this.subjects.filter(subject => subject.metadata.targetName === sortedEntityTarget);\n sortedSubjects.push(...entityTargetSubjects);\n this.removeAlreadySorted(entityTargetSubjects);\n });\n\n // next sort all other entities\n // same process as in above but with other entities\n const otherDependencies: string[][] = this.getDependencies();\n let sortedOtherEntityTargets = this.toposort(otherDependencies);\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse();\n\n sortedOtherEntityTargets.forEach(sortedEntityTarget => {\n const entityTargetSubjects = this.subjects.filter(subject => subject.metadata.targetName === sortedEntityTarget);\n sortedSubjects.push(...entityTargetSubjects);\n this.removeAlreadySorted(entityTargetSubjects);\n });\n\n // if we have something left in the subjects add them as well\n sortedSubjects.push(...this.subjects);\n return sortedSubjects;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n */\n protected removeAlreadySorted(subjects: Subject[]) {\n subjects.forEach(subject => {\n this.subjects.splice(this.subjects.indexOf(subject), 1);\n });\n }\n\n /**\n * Extracts all unique metadatas from the given subjects.\n */\n protected getUniqueMetadatas(subjects: Subject[]) {\n const metadatas: EntityMetadata[] = [];\n subjects.forEach(subject => {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata);\n });\n return metadatas;\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getNonNullableDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach(relation => {\n if (relation.isNullable)\n return;\n\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, [] as string[][]);\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach(relation => {\n\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata)\n return;\n\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, [] as string[][]);\n }\n\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n */\n protected toposort(edges: any[][]) {\n\n function uniqueNodes(arr: any[]) {\n let res = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n let edge: any = arr[i];\n if (res.indexOf(edge[0]) < 0) res.push(edge[0]);\n if (res.indexOf(edge[1]) < 0) res.push(edge[1]);\n }\n return res;\n }\n\n const nodes = uniqueNodes(edges);\n let cursor = nodes.length\n , sorted = new Array(cursor)\n , visited: any = {}\n , i = cursor;\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, []);\n }\n\n function visit(node: any, i: number, predecessors: any[]) {\n if (predecessors.indexOf(node) >= 0) {\n throw new TypeORMError(\"Cyclic dependency: \" + JSON.stringify(node)); // todo: better error\n }\n\n if (!~nodes.indexOf(node)) {\n throw new TypeORMError(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" + JSON.stringify(node));\n }\n\n if (visited[i]) return;\n visited[i] = true;\n\n // outgoing edges\n let outgoing = edges.filter(function(edge) {\n return edge[0] === node;\n });\n if (i = outgoing.length) {\n let preds = predecessors.concat(node);\n do {\n let child = outgoing[--i][1];\n visit(child, nodes.indexOf(child), preds);\n } while (i);\n }\n\n sorted[--cursor] = node;\n }\n\n return sorted;\n }\n\n}\n"],"sourceRoot":".."}
|
|
@@ -71,7 +71,7 @@ var ClosureSubjectExecutor = /** @class */ (function () {
|
|
|
71
71
|
var parameterName = _this.queryRunner.connection.driver.createParameter("parent_entity_" + column.referencedColumn.databaseName, queryParams_1.length - 1);
|
|
72
72
|
return columnName + " = " + parameterName;
|
|
73
73
|
});
|
|
74
|
-
return [4 /*yield*/, this.queryRunner.query("INSERT INTO " + tableName + " (" + __spreadArray(__spreadArray([], __read(ancestorColumnNames)), __read(descendantColumnNames)).join(", ") + ") " +
|
|
74
|
+
return [4 /*yield*/, this.queryRunner.query("INSERT INTO " + tableName + " (" + __spreadArray(__spreadArray([], __read(ancestorColumnNames), false), __read(descendantColumnNames), false).join(", ") + ") " +
|
|
75
75
|
("SELECT " + ancestorColumnNames.join(", ") + ", " + childEntityIds1.join(", ") + " FROM " + tableName + " WHERE " + whereCondition.join(" AND ")), queryParams_1)];
|
|
76
76
|
case 2:
|
|
77
77
|
_a.sent();
|
|
@@ -178,7 +178,7 @@ var ClosureSubjectExecutor = /** @class */ (function () {
|
|
|
178
178
|
tableName = this.getTableName(closureTable.tablePath);
|
|
179
179
|
superAlias_1 = escape("supertree");
|
|
180
180
|
subAlias_1 = escape("subtree");
|
|
181
|
-
select = __spreadArray(__spreadArray([], __read(ancestorColumnNames.map(function (columnName) { return superAlias_1 + "." + columnName; }))), __read(descendantColumnNames.map(function (columnName) { return subAlias_1 + "." + columnName; })));
|
|
181
|
+
select = __spreadArray(__spreadArray([], __read(ancestorColumnNames.map(function (columnName) { return superAlias_1 + "." + columnName; })), false), __read(descendantColumnNames.map(function (columnName) { return subAlias_1 + "." + columnName; })), false);
|
|
182
182
|
entityWhereCondition = subject.metadata.closureJunctionTable.ancestorColumns.map(function (column) {
|
|
183
183
|
var columnName = escape(column.databaseName);
|
|
184
184
|
var entityId = column.referencedColumn.getEntityValue(entity);
|
|
@@ -195,10 +195,10 @@ var ClosureSubjectExecutor = /** @class */ (function () {
|
|
|
195
195
|
var parameterName = _this.queryRunner.connection.driver.createParameter("parent_entity_" + column.referencedColumn.databaseName, queryParams_2.length - 1);
|
|
196
196
|
return superAlias_1 + "." + columnName + " = " + parameterName;
|
|
197
197
|
});
|
|
198
|
-
return [4 /*yield*/, this.queryRunner.query("INSERT INTO " + tableName + " (" + __spreadArray(__spreadArray([], __read(ancestorColumnNames)), __read(descendantColumnNames)).join(", ") + ") " +
|
|
198
|
+
return [4 /*yield*/, this.queryRunner.query("INSERT INTO " + tableName + " (" + __spreadArray(__spreadArray([], __read(ancestorColumnNames), false), __read(descendantColumnNames), false).join(", ") + ") " +
|
|
199
199
|
("SELECT " + select.join(", ") + " ") +
|
|
200
200
|
("FROM " + tableName + " AS " + superAlias_1 + ", " + tableName + " AS " + subAlias_1 + " ") +
|
|
201
|
-
("WHERE " + __spreadArray(__spreadArray([], __read(entityWhereCondition)), __read(parentWhereCondition)).join(" AND ")), queryParams_2)];
|
|
201
|
+
("WHERE " + __spreadArray(__spreadArray([], __read(entityWhereCondition), false), __read(parentWhereCondition), false).join(" AND ")), queryParams_2)];
|
|
202
202
|
case 2:
|
|
203
203
|
_d.sent();
|
|
204
204
|
_d.label = 3;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/persistence/tree/ClosureSubjectExecutor.ts"],"names":[],"mappings":"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","file":"ClosureSubjectExecutor.js","sourcesContent":["import {Subject} from \"../Subject\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {CannotAttachTreeChildrenEntityError} from \"../../error/CannotAttachTreeChildrenEntityError\";\nimport {DeleteQueryBuilder} from \"../../query-builder/DeleteQueryBuilder\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {SqlServerDriver} from \"../../driver/sqlserver/SqlServerDriver\";\nimport {ColumnMetadata} from \"../../metadata/ColumnMetadata\";\n\n/**\n * Executes subject operations for closure entities.\n */\nexport class ClosureSubjectExecutor {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected queryRunner: QueryRunner) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Executes operations when subject is being inserted.\n */\n async insert(subject: Subject): Promise<void> {\n\n // create values to be inserted into the closure junction\n const closureJunctionInsertMap: ObjectLiteral = {};\n subject.metadata.closureJunctionTable.ancestorColumns.forEach(column => {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n subject.metadata.closureJunctionTable.descendantColumns.forEach(column => {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n\n // insert values into the closure junction table\n await this.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.closureJunctionTable.tablePath)\n .values(closureJunctionInsertMap)\n .updateEntity(false)\n .callListeners(false)\n .execute();\n\n let parent = subject.metadata.treeParentRelation!.getEntityValue(subject.entity!); // if entity was attached via parent\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n\n if (parent) {\n const escape = (alias: string) => this.queryRunner.connection.driver.escape(alias);\n const tableName = this.getTableName(subject.metadata.closureJunctionTable.tablePath);\n const queryParams: any[] = [];\n\n const ancestorColumnNames = subject.metadata.closureJunctionTable.ancestorColumns.map(column => {\n return escape(column.databaseName);\n });\n const descendantColumnNames = subject.metadata.closureJunctionTable.descendantColumns.map(column => {\n return escape(column.databaseName);\n });\n const childEntityIds1 = subject.metadata.primaryColumns.map(column => {\n queryParams.push(column.getEntityValue(subject.insertedValueSet ? subject.insertedValueSet : subject.entity!));\n return this.queryRunner.connection.driver.createParameter(\"child_entity_\" + column.databaseName, queryParams.length - 1);\n });\n\n const whereCondition = subject.metadata.closureJunctionTable.descendantColumns.map(column => {\n const columnName = escape(column.databaseName);\n const parentId = column.referencedColumn!.getEntityValue(parent);\n\n if (!parentId)\n throw new CannotAttachTreeChildrenEntityError(subject.metadata.name);\n\n queryParams.push(parentId);\n const parameterName = this.queryRunner.connection.driver.createParameter(\"parent_entity_\" + column.referencedColumn!.databaseName, queryParams.length - 1);\n return `${columnName} = ${parameterName}`;\n });\n\n await this.queryRunner.query(\n `INSERT INTO ${tableName} (${[...ancestorColumnNames, ...descendantColumnNames].join(\", \")}) ` +\n `SELECT ${ancestorColumnNames.join(\", \")}, ${childEntityIds1.join(\", \")} FROM ${tableName} WHERE ${whereCondition.join(\" AND \")}`,\n queryParams\n );\n }\n }\n\n /**\n * Executes operations when subject is being updated.\n */\n async update(subject: Subject): Promise<void> {\n let parent = subject.metadata.treeParentRelation!.getEntityValue(subject.entity!); // if entity was attached via parent\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.entity;\n\n let entity = subject.databaseEntity; // if entity was attached via parent\n if (!entity && parent) // if entity was attached via children\n entity = subject.metadata.treeChildrenRelation!.getEntityValue(parent).find((child: any) => {\n return Object.entries(subject.identifier!).every(([key, value]) => child[key] === value);\n });\n\n // Exit if the parent or the entity where never set\n if (entity === undefined || parent === undefined) {\n return;\n }\n\n const oldParent = subject.metadata.treeParentRelation!.getEntityValue(entity!);\n const oldParentId = subject.metadata.getEntityIdMap(oldParent);\n const parentId = subject.metadata.getEntityIdMap(parent);\n\n // Exit if the new and old parents are the same\n if (OrmUtils.compareIds(oldParentId, parentId)) {\n return;\n }\n\n const escape = (alias: string) => this.queryRunner.connection.driver.escape(alias);\n const closureTable = subject.metadata.closureJunctionTable;\n\n const ancestorColumnNames = closureTable.ancestorColumns.map(column => {\n return escape(column.databaseName);\n });\n\n const descendantColumnNames = closureTable.descendantColumns.map(column => {\n return escape(column.databaseName);\n });\n\n // Delete logic\n const createSubQuery = (qb: DeleteQueryBuilder<any>, alias: string) => {\n const subAlias = `sub${alias}`;\n\n const subSelect = qb.createQueryBuilder()\n .select(descendantColumnNames.join(\", \"))\n .from(closureTable.tablePath, subAlias);\n\n // Create where conditions e.g. (WHERE \"subdescendant\".\"id_ancestor\" = :value_id)\n for (const column of closureTable.ancestorColumns) {\n subSelect.andWhere(`${escape(subAlias)}.${escape(column.databaseName)} = :value_${column.referencedColumn!.databaseName}`);\n }\n\n return qb.createQueryBuilder()\n .select(descendantColumnNames.join(\", \"))\n .from(`(${subSelect.getQuery()})`, alias)\n .setParameters(subSelect.getParameters())\n .getQuery();\n };\n\n const parameters: ObjectLiteral = {};\n for (const column of subject.metadata.primaryColumns) {\n parameters[`value_${column.databaseName}`] = entity![column.databaseName];\n }\n\n await this.queryRunner\n .manager\n .createQueryBuilder()\n .delete()\n .from(closureTable.tablePath)\n .where(qb => `(${descendantColumnNames.join(\", \")}) IN (${createSubQuery(qb, \"descendant\")})`)\n .andWhere(qb => `(${ancestorColumnNames.join(\", \")}) NOT IN (${createSubQuery(qb, \"ancestor\")})`)\n .setParameters(parameters)\n .execute();\n\n /**\n * Only insert new parent if it exits\n * \n * This only happens if the entity doesn't become a root entity\n */\n if (parent) {\n // Insert logic\n const queryParams: any[] = [];\n\n const tableName = this.getTableName(closureTable.tablePath);\n const superAlias = escape(\"supertree\");\n const subAlias = escape(\"subtree\");\n\n const select = [\n ...ancestorColumnNames.map(columnName => `${superAlias}.${columnName}`),\n ...descendantColumnNames.map(columnName => `${subAlias}.${columnName}`)\n ];\n\n const entityWhereCondition = subject.metadata.closureJunctionTable.ancestorColumns.map(column => {\n const columnName = escape(column.databaseName);\n const entityId = column.referencedColumn!.getEntityValue(entity!);\n\n queryParams.push(entityId);\n const parameterName = this.queryRunner.connection.driver.createParameter(\"entity_\" + column.referencedColumn!.databaseName, queryParams.length - 1);\n return `${subAlias}.${columnName} = ${parameterName}`;\n });\n\n const parentWhereCondition = subject.metadata.closureJunctionTable.descendantColumns.map(column => {\n const columnName = escape(column.databaseName);\n const parentId = column.referencedColumn!.getEntityValue(parent);\n\n if (!parentId)\n throw new CannotAttachTreeChildrenEntityError(subject.metadata.name);\n\n queryParams.push(parentId);\n const parameterName = this.queryRunner.connection.driver.createParameter(\"parent_entity_\" + column.referencedColumn!.databaseName, queryParams.length - 1);\n return `${superAlias}.${columnName} = ${parameterName}`;\n });\n\n\n await this.queryRunner.query(\n `INSERT INTO ${tableName} (${[...ancestorColumnNames, ...descendantColumnNames].join(\", \")}) ` +\n `SELECT ${select.join(\", \")} ` +\n `FROM ${tableName} AS ${superAlias}, ${tableName} AS ${subAlias} ` +\n `WHERE ${[...entityWhereCondition, ...parentWhereCondition].join(\" AND \")}`,\n queryParams\n );\n }\n }\n\n /**\n * Executes operations when subject is being removed.\n */\n async remove(subjects: Subject|Subject[]): Promise<void> {\n // Only mssql need to execute deletes for the juntion table as it doesn't support multi cascade paths.\n if (!(this.queryRunner.connection.driver instanceof SqlServerDriver)) {\n return;\n }\n\n if (!Array.isArray(subjects))\n subjects = [subjects];\n\n const escape = (alias: string) => this.queryRunner.connection.driver.escape(alias);\n const identifiers = subjects.map(subject => subject.identifier);\n const closureTable = subjects[0].metadata.closureJunctionTable;\n\n const generateWheres = (columns: ColumnMetadata[]) => {\n return columns.map(column => {\n const data = identifiers.map(identifier => identifier![column.referencedColumn!.databaseName]);\n return `${escape(column.databaseName)} IN (${data.join(\", \")})`;\n }).join(\" AND \");\n };\n\n const ancestorWhere = generateWheres(closureTable.ancestorColumns);\n const descendantWhere = generateWheres(closureTable.descendantColumns);\n\n await this.queryRunner\n .manager\n .createQueryBuilder()\n .delete()\n .from(closureTable.tablePath)\n .where(ancestorWhere)\n .orWhere(descendantWhere)\n .execute();\n }\n\n /**\n * Gets escaped table name with schema name if SqlServer or Postgres driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n protected getTableName(tablePath: string): string {\n return tablePath.split(\".\")\n .map(i => {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n return i === \"\" ? i : this.queryRunner.connection.driver.escape(i);\n }).join(\".\");\n }\n}"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/persistence/tree/ClosureSubjectExecutor.ts"],"names":[],"mappings":"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","file":"ClosureSubjectExecutor.js","sourcesContent":["import {Subject} from \"../Subject\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {CannotAttachTreeChildrenEntityError} from \"../../error/CannotAttachTreeChildrenEntityError\";\nimport {DeleteQueryBuilder} from \"../../query-builder/DeleteQueryBuilder\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {SqlServerDriver} from \"../../driver/sqlserver/SqlServerDriver\";\nimport {ColumnMetadata} from \"../../metadata/ColumnMetadata\";\n\n/**\n * Executes subject operations for closure entities.\n */\nexport class ClosureSubjectExecutor {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected queryRunner: QueryRunner) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Executes operations when subject is being inserted.\n */\n async insert(subject: Subject): Promise<void> {\n\n // create values to be inserted into the closure junction\n const closureJunctionInsertMap: ObjectLiteral = {};\n subject.metadata.closureJunctionTable.ancestorColumns.forEach(column => {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n subject.metadata.closureJunctionTable.descendantColumns.forEach(column => {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n\n // insert values into the closure junction table\n await this.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.closureJunctionTable.tablePath)\n .values(closureJunctionInsertMap)\n .updateEntity(false)\n .callListeners(false)\n .execute();\n\n let parent = subject.metadata.treeParentRelation!.getEntityValue(subject.entity!); // if entity was attached via parent\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n\n if (parent) {\n const escape = (alias: string) => this.queryRunner.connection.driver.escape(alias);\n const tableName = this.getTableName(subject.metadata.closureJunctionTable.tablePath);\n const queryParams: any[] = [];\n\n const ancestorColumnNames = subject.metadata.closureJunctionTable.ancestorColumns.map(column => {\n return escape(column.databaseName);\n });\n const descendantColumnNames = subject.metadata.closureJunctionTable.descendantColumns.map(column => {\n return escape(column.databaseName);\n });\n const childEntityIds1 = subject.metadata.primaryColumns.map(column => {\n queryParams.push(column.getEntityValue(subject.insertedValueSet ? subject.insertedValueSet : subject.entity!));\n return this.queryRunner.connection.driver.createParameter(\"child_entity_\" + column.databaseName, queryParams.length - 1);\n });\n\n const whereCondition = subject.metadata.closureJunctionTable.descendantColumns.map(column => {\n const columnName = escape(column.databaseName);\n const parentId = column.referencedColumn!.getEntityValue(parent);\n\n if (!parentId)\n throw new CannotAttachTreeChildrenEntityError(subject.metadata.name);\n\n queryParams.push(parentId);\n const parameterName = this.queryRunner.connection.driver.createParameter(\"parent_entity_\" + column.referencedColumn!.databaseName, queryParams.length - 1);\n return `${columnName} = ${parameterName}`;\n });\n\n await this.queryRunner.query(\n `INSERT INTO ${tableName} (${[...ancestorColumnNames, ...descendantColumnNames].join(\", \")}) ` +\n `SELECT ${ancestorColumnNames.join(\", \")}, ${childEntityIds1.join(\", \")} FROM ${tableName} WHERE ${whereCondition.join(\" AND \")}`,\n queryParams\n );\n }\n }\n\n /**\n * Executes operations when subject is being updated.\n */\n async update(subject: Subject): Promise<void> {\n let parent = subject.metadata.treeParentRelation!.getEntityValue(subject.entity!); // if entity was attached via parent\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.entity;\n\n let entity = subject.databaseEntity; // if entity was attached via parent\n if (!entity && parent) // if entity was attached via children\n entity = subject.metadata.treeChildrenRelation!.getEntityValue(parent).find((child: any) => {\n return Object.entries(subject.identifier!).every(([key, value]) => child[key] === value);\n });\n\n // Exit if the parent or the entity where never set\n if (entity === undefined || parent === undefined) {\n return;\n }\n\n const oldParent = subject.metadata.treeParentRelation!.getEntityValue(entity!);\n const oldParentId = subject.metadata.getEntityIdMap(oldParent);\n const parentId = subject.metadata.getEntityIdMap(parent);\n\n // Exit if the new and old parents are the same\n if (OrmUtils.compareIds(oldParentId, parentId)) {\n return;\n }\n\n const escape = (alias: string) => this.queryRunner.connection.driver.escape(alias);\n const closureTable = subject.metadata.closureJunctionTable;\n\n const ancestorColumnNames = closureTable.ancestorColumns.map(column => {\n return escape(column.databaseName);\n });\n\n const descendantColumnNames = closureTable.descendantColumns.map(column => {\n return escape(column.databaseName);\n });\n\n // Delete logic\n const createSubQuery = (qb: DeleteQueryBuilder<any>, alias: string) => {\n const subAlias = `sub${alias}`;\n\n const subSelect = qb.createQueryBuilder()\n .select(descendantColumnNames.join(\", \"))\n .from(closureTable.tablePath, subAlias);\n\n // Create where conditions e.g. (WHERE \"subdescendant\".\"id_ancestor\" = :value_id)\n for (const column of closureTable.ancestorColumns) {\n subSelect.andWhere(`${escape(subAlias)}.${escape(column.databaseName)} = :value_${column.referencedColumn!.databaseName}`);\n }\n\n return qb.createQueryBuilder()\n .select(descendantColumnNames.join(\", \"))\n .from(`(${subSelect.getQuery()})`, alias)\n .setParameters(subSelect.getParameters())\n .getQuery();\n };\n\n const parameters: ObjectLiteral = {};\n for (const column of subject.metadata.primaryColumns) {\n parameters[`value_${column.databaseName}`] = entity![column.databaseName];\n }\n\n await this.queryRunner\n .manager\n .createQueryBuilder()\n .delete()\n .from(closureTable.tablePath)\n .where(qb => `(${descendantColumnNames.join(\", \")}) IN (${createSubQuery(qb, \"descendant\")})`)\n .andWhere(qb => `(${ancestorColumnNames.join(\", \")}) NOT IN (${createSubQuery(qb, \"ancestor\")})`)\n .setParameters(parameters)\n .execute();\n\n /**\n * Only insert new parent if it exits\n * \n * This only happens if the entity doesn't become a root entity\n */\n if (parent) {\n // Insert logic\n const queryParams: any[] = [];\n\n const tableName = this.getTableName(closureTable.tablePath);\n const superAlias = escape(\"supertree\");\n const subAlias = escape(\"subtree\");\n\n const select = [\n ...ancestorColumnNames.map(columnName => `${superAlias}.${columnName}`),\n ...descendantColumnNames.map(columnName => `${subAlias}.${columnName}`)\n ];\n\n const entityWhereCondition = subject.metadata.closureJunctionTable.ancestorColumns.map(column => {\n const columnName = escape(column.databaseName);\n const entityId = column.referencedColumn!.getEntityValue(entity!);\n\n queryParams.push(entityId);\n const parameterName = this.queryRunner.connection.driver.createParameter(\"entity_\" + column.referencedColumn!.databaseName, queryParams.length - 1);\n return `${subAlias}.${columnName} = ${parameterName}`;\n });\n\n const parentWhereCondition = subject.metadata.closureJunctionTable.descendantColumns.map(column => {\n const columnName = escape(column.databaseName);\n const parentId = column.referencedColumn!.getEntityValue(parent);\n\n if (!parentId)\n throw new CannotAttachTreeChildrenEntityError(subject.metadata.name);\n\n queryParams.push(parentId);\n const parameterName = this.queryRunner.connection.driver.createParameter(\"parent_entity_\" + column.referencedColumn!.databaseName, queryParams.length - 1);\n return `${superAlias}.${columnName} = ${parameterName}`;\n });\n\n\n await this.queryRunner.query(\n `INSERT INTO ${tableName} (${[...ancestorColumnNames, ...descendantColumnNames].join(\", \")}) ` +\n `SELECT ${select.join(\", \")} ` +\n `FROM ${tableName} AS ${superAlias}, ${tableName} AS ${subAlias} ` +\n `WHERE ${[...entityWhereCondition, ...parentWhereCondition].join(\" AND \")}`,\n queryParams\n );\n }\n }\n\n /**\n * Executes operations when subject is being removed.\n */\n async remove(subjects: Subject|Subject[]): Promise<void> {\n // Only mssql need to execute deletes for the juntion table as it doesn't support multi cascade paths.\n if (!(this.queryRunner.connection.driver instanceof SqlServerDriver)) {\n return;\n }\n\n if (!Array.isArray(subjects))\n subjects = [subjects];\n\n const escape = (alias: string) => this.queryRunner.connection.driver.escape(alias);\n const identifiers = subjects.map(subject => subject.identifier);\n const closureTable = subjects[0].metadata.closureJunctionTable;\n\n const generateWheres = (columns: ColumnMetadata[]) => {\n return columns.map(column => {\n const data = identifiers.map(identifier => identifier![column.referencedColumn!.databaseName]);\n return `${escape(column.databaseName)} IN (${data.join(\", \")})`;\n }).join(\" AND \");\n };\n\n const ancestorWhere = generateWheres(closureTable.ancestorColumns);\n const descendantWhere = generateWheres(closureTable.descendantColumns);\n\n await this.queryRunner\n .manager\n .createQueryBuilder()\n .delete()\n .from(closureTable.tablePath)\n .where(ancestorWhere)\n .orWhere(descendantWhere)\n .execute();\n }\n\n /**\n * Gets escaped table name with schema name if SqlServer or Postgres driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n protected getTableName(tablePath: string): string {\n return tablePath.split(\".\")\n .map(i => {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n return i === \"\" ? i : this.queryRunner.connection.driver.escape(i);\n }).join(\".\");\n }\n}"],"sourceRoot":"../.."}
|
|
@@ -87,7 +87,7 @@ var InsertQueryBuilder = /** @class */ (function (_super) {
|
|
|
87
87
|
try {
|
|
88
88
|
for (_a = __values(this.expressionMap.returning), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
89
89
|
columnPath = _b.value;
|
|
90
|
-
returningColumns_1.push.apply(returningColumns_1, __spreadArray([], __read(this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(columnPath))));
|
|
90
|
+
returningColumns_1.push.apply(returningColumns_1, __spreadArray([], __read(this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(columnPath)), false));
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -102,7 +102,7 @@ var InsertQueryBuilder = /** @class */ (function (_super) {
|
|
|
102
102
|
if (!(valueSets.length > 1 && this.connection.driver instanceof OracleDriver)) {
|
|
103
103
|
this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getInsertionReturningColumns();
|
|
104
104
|
}
|
|
105
|
-
returningColumns_1.push.apply(returningColumns_1, __spreadArray([], __read(this.expressionMap.extraReturningColumns.filter(function (c) { return !returningColumns_1.includes(c); }))));
|
|
105
|
+
returningColumns_1.push.apply(returningColumns_1, __spreadArray([], __read(this.expressionMap.extraReturningColumns.filter(function (c) { return !returningColumns_1.includes(c); })), false));
|
|
106
106
|
}
|
|
107
107
|
if (returningColumns_1.length > 0 && this.connection.driver instanceof SqlServerDriver) {
|
|
108
108
|
declareSql = this.connection.driver.buildTableVariableDeclaration("@OutputTable", returningColumns_1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/query-builder/InsertQueryBuilder.ts"],"names":[],"mappings":"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","file":"InsertQueryBuilder.js","sourcesContent":["import {CockroachDriver} from \"../driver/cockroachdb/CockroachDriver\";\nimport {SapDriver} from \"../driver/sap/SapDriver\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {QueryDeepPartialEntity} from \"./QueryPartialEntity\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {PostgresDriver} from \"../driver/postgres/PostgresDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {RandomGenerator} from \"../util/RandomGenerator\";\nimport {InsertResult} from \"./result/InsertResult\";\nimport {ReturningStatementNotSupportedError} from \"../error/ReturningStatementNotSupportedError\";\nimport {InsertValuesMissingError} from \"../error/InsertValuesMissingError\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {ReturningResultsEntityUpdator} from \"./ReturningResultsEntityUpdator\";\nimport {AbstractSqliteDriver} from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport {BroadcasterResult} from \"../subscriber/BroadcasterResult\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport class InsertQueryBuilder<Entity> extends QueryBuilder<Entity> {\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated sql query without parameters being replaced.\n */\n getQuery(): string {\n let sql = this.createComment();\n sql += this.createInsertExpression();\n return sql.trim();\n }\n\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n async execute(): Promise<InsertResult> {\n // console.time(\".value sets\");\n const valueSets: ObjectLiteral[] = this.getValueSets();\n // console.timeEnd(\".value sets\");\n\n // If user passed empty array of entities then we don't need to do\n // anything.\n //\n // Fixes GitHub issues #3111 and #5734. If we were to let this through\n // we would run into problems downstream, like subscribers getting\n // invoked with the empty array where they expect an entity, and SQL\n // queries with an empty VALUES clause.\n if (valueSets.length === 0)\n return new InsertResult();\n\n // console.time(\"QueryBuilder.execute\");\n // console.time(\".database stuff\");\n const queryRunner = this.obtainQueryRunner();\n let transactionStartedByUs: boolean = false;\n\n try {\n\n // start transaction if it was enabled\n if (this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // console.timeEnd(\".database stuff\");\n\n // call before insertion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n const broadcastResult = new BroadcasterResult();\n valueSets.forEach(valueSet => {\n queryRunner.broadcaster.broadcastBeforeInsertEvent(broadcastResult, this.expressionMap.mainAlias!.metadata, valueSet);\n });\n if (broadcastResult.promises.length > 0) await Promise.all(broadcastResult.promises);\n }\n\n let declareSql: string | null = null;\n let selectOutputSql: string | null = null;\n\n // if update entity mode is enabled we may need extra columns for the returning statement\n // console.time(\".prepare returning statement\");\n const returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n\n const returningColumns: ColumnMetadata[] = [];\n\n if (Array.isArray(this.expressionMap.returning) && this.expressionMap.mainAlias!.hasMetadata) {\n for (const columnPath of this.expressionMap.returning) {\n returningColumns.push(\n ...this.expressionMap.mainAlias!.metadata.findColumnsWithPropertyPath(columnPath)\n );\n }\n }\n\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias!.hasMetadata) {\n if (!(valueSets.length > 1 && this.connection.driver instanceof OracleDriver)) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getInsertionReturningColumns();\n }\n\n returningColumns.push(...this.expressionMap.extraReturningColumns.filter(\n c => !returningColumns.includes(c)\n ));\n }\n\n if (returningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", returningColumns);\n selectOutputSql = `SELECT * FROM @OutputTable`;\n }\n // console.timeEnd(\".prepare returning statement\");\n\n // execute query\n // console.time(\".getting query and parameters\");\n const [insertSql, parameters] = this.getQueryAndParameters();\n // console.timeEnd(\".getting query and parameters\");\n\n // console.time(\".query execution by database\");\n const statements = [declareSql, insertSql, selectOutputSql];\n const sql = statements.filter(s => s != null).join(\";\\n\\n\");\n\n const queryResult = await queryRunner.query(sql, parameters, true);\n\n const insertResult = InsertResult.from(queryResult);\n\n // console.timeEnd(\".query execution by database\");\n\n // load returning results and set them to the entity if entity updation is enabled\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias!.hasMetadata) {\n // console.time(\".updating entity\");\n await returningResultsEntityUpdator.insert(insertResult, valueSets);\n // console.timeEnd(\".updating entity\");\n }\n\n // call after insertion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n const broadcastResult = new BroadcasterResult();\n valueSets.forEach(valueSet => {\n queryRunner.broadcaster.broadcastAfterInsertEvent(broadcastResult, this.expressionMap.mainAlias!.metadata, valueSet);\n });\n if (broadcastResult.promises.length > 0) await Promise.all(broadcastResult.promises);\n }\n\n // close transaction if we started it\n // console.time(\".commit\");\n if (transactionStartedByUs) {\n await queryRunner.commitTransaction();\n }\n // console.timeEnd(\".commit\");\n\n return insertResult;\n\n } catch (error) {\n\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n throw error;\n\n } finally {\n\n // console.time(\".releasing connection\");\n if (queryRunner !== this.queryRunner) { // means we created our own query runner\n await queryRunner.release();\n }\n // console.timeEnd(\".releasing connection\");\n // console.timeEnd(\"QueryBuilder.execute\");\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Specifies INTO which entity's table insertion will be executed.\n */\n into<T>(entityTarget: EntityTarget<T>, columns?: string[]): InsertQueryBuilder<T> {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n const mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n this.expressionMap.insertColumns = columns || [];\n return (this as any) as InsertQueryBuilder<T>;\n }\n\n /**\n * Values needs to be inserted into table.\n */\n values(values: QueryDeepPartialEntity<Entity>|QueryDeepPartialEntity<Entity>[]): this {\n this.expressionMap.valuesSet = values;\n return this;\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n output(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n output(output: string): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this {\n return this.returning(output);\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n returning(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n returning(returning: string): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this {\n\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n\n this.expressionMap.returning = returning;\n return this;\n }\n\n /**\n * Indicates if entity must be updated after insertion operations.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n updateEntity(enabled: boolean): this {\n this.expressionMap.updateEntity = enabled;\n return this;\n }\n\n /**\n * Adds additional ON CONFLICT statement supported in postgres and cockroach.\n *\n * @deprecated Use `orIgnore` or `orUpdate`\n */\n onConflict(statement: string): this {\n this.expressionMap.onConflict = statement;\n return this;\n }\n\n /**\n * Adds additional ignore statement supported in databases.\n */\n orIgnore(statement: string | boolean = true): this {\n this.expressionMap.onIgnore = !!statement;\n return this;\n }\n\n /**\n * @deprecated\n */\n orUpdate(statement?: { columns?: string[], overwrite?: string[], conflict_target?: string | string[] }): this;\n\n orUpdate(overwrite: string[], conflictTarget?: string | string[]): this;\n\n /**\n * Adds additional update statement supported in databases.\n */\n orUpdate(statementOrOverwrite?: { columns?: string[], overwrite?: string[], conflict_target?: string | string[] } | string[], conflictTarget?: string | string[]): this {\n if (!Array.isArray(statementOrOverwrite)) {\n this.expressionMap.onUpdate = {\n conflict: statementOrOverwrite?.conflict_target,\n columns: statementOrOverwrite?.columns,\n overwrite: statementOrOverwrite?.overwrite,\n };\n return this;\n }\n\n this.expressionMap.onUpdate = {\n overwrite: statementOrOverwrite,\n conflict: conflictTarget,\n };\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates INSERT express used to perform insert query.\n */\n protected createInsertExpression() {\n const tableName = this.getTableName(this.getMainTableName());\n const valuesExpression = this.createValuesExpression(); // its important to get values before returning expression because oracle rely on native parameters and ordering of them is important\n const returningExpression = (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) ? null : this.createReturningExpression(); // oracle doesnt support returning with multi-row insert\n const columnsExpression = this.createColumnNamesExpression();\n let query = \"INSERT \";\n\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n query += `${this.expressionMap.onIgnore ? \" IGNORE \" : \"\"}`;\n }\n\n query += `INTO ${tableName}`;\n\n // add columns expression\n if (columnsExpression) {\n query += `(${columnsExpression})`;\n } else {\n if (!valuesExpression && (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)) // special syntax for mysql DEFAULT VALUES insertion\n query += \"()\";\n }\n\n // add OUTPUT expression\n if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n query += ` OUTPUT ${returningExpression}`;\n }\n\n // add VALUES expression\n if (valuesExpression) {\n if (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) {\n query += ` ${valuesExpression}`;\n } else {\n query += ` VALUES ${valuesExpression}`;\n }\n } else {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) { // special syntax for mysql DEFAULT VALUES insertion\n query += \" VALUES ()\";\n } else {\n query += ` DEFAULT VALUES`;\n }\n }\n if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {\n if (this.expressionMap.onIgnore) {\n query += \" ON CONFLICT DO NOTHING \";\n } else if (this.expressionMap.onConflict) {\n query += ` ON CONFLICT ${this.expressionMap.onConflict} `;\n } else if (this.expressionMap.onUpdate) {\n const { overwrite, columns, conflict } = this.expressionMap.onUpdate;\n\n let conflictTarget = \"ON CONFLICT\";\n\n if (Array.isArray(conflict)) {\n conflictTarget += ` ( ${conflict.map((column) => this.escape(column)).join(\", \")} )`;\n } else if (conflict) {\n conflictTarget += ` ON CONSTRAINT ${this.escape(conflict)}`;\n }\n\n if (Array.isArray(overwrite)) {\n query += ` ${conflictTarget} DO UPDATE SET `;\n query += overwrite?.map(column => `${this.escape(column)} = EXCLUDED.${this.escape(column)}`).join(\", \");\n query += \" \";\n } else if (columns) {\n query += ` ${conflictTarget} DO UPDATE SET `;\n query += columns.map(column => `${this.escape(column)} = :${column}`).join(\", \");\n query += \" \";\n }\n }\n }\n\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n if (this.expressionMap.onUpdate) {\n const { overwrite, columns } = this.expressionMap.onUpdate;\n\n if (Array.isArray(overwrite)) {\n query += \" ON DUPLICATE KEY UPDATE \";\n query += overwrite.map(column => `${this.escape(column)} = VALUES(${this.escape(column)})`).join(\", \");\n query += \" \";\n } else if (Array.isArray(columns)) {\n query += \" ON DUPLICATE KEY UPDATE \";\n query += columns.map(column => `${this.escape(column)} = :${column}`).join(\", \");\n query += \" \";\n }\n }\n }\n\n // add RETURNING expression\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n query += ` RETURNING ${returningExpression}`;\n }\n\n\n // Inserting a specific value for an auto-increment primary key in mssql requires enabling IDENTITY_INSERT\n // IDENTITY_INSERT can only be enabled for tables where there is an IDENTITY column and only if there is a value to be inserted (i.e. supplying DEFAULT is prohibited if IDENTITY_INSERT is enabled)\n if (this.connection.driver instanceof SqlServerDriver\n && this.expressionMap.mainAlias!.hasMetadata\n && this.expressionMap.mainAlias!.metadata.columns\n .filter((column) => this.expressionMap.insertColumns.length > 0 ? this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1 : column.isInsert)\n .some((column) => this.isOverridingAutoIncrementBehavior(column))\n ) {\n query = `SET IDENTITY_INSERT ${tableName} ON; ${query}; SET IDENTITY_INSERT ${tableName} OFF`;\n }\n\n return query;\n }\n\n /**\n * Gets list of columns where values must be inserted to.\n */\n protected getInsertedColumns(): ColumnMetadata[] {\n if (!this.expressionMap.mainAlias!.hasMetadata)\n return [];\n\n return this.expressionMap.mainAlias!.metadata.columns.filter(column => {\n\n // if user specified list of columns he wants to insert to, then we filter only them\n if (this.expressionMap.insertColumns.length)\n return this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1;\n\n // skip columns the user doesn't want included by default\n if (!column.isInsert) { return false; }\n\n // if user did not specified such list then return all columns except auto-increment one\n // for Oracle we return auto-increment column as well because Oracle does not support DEFAULT VALUES expression\n if (column.isGenerated && column.generationStrategy === \"increment\"\n && !(this.connection.driver instanceof OracleDriver)\n && !(this.connection.driver instanceof AbstractSqliteDriver)\n && !(this.connection.driver instanceof MysqlDriver)\n && !(this.connection.driver instanceof AuroraDataApiDriver)\n && !(this.connection.driver instanceof SqlServerDriver && this.isOverridingAutoIncrementBehavior(column)))\n return false;\n\n return true;\n });\n }\n\n /**\n * Creates a columns string where values must be inserted to for INSERT INTO expression.\n */\n protected createColumnNamesExpression(): string {\n const columns = this.getInsertedColumns();\n if (columns.length > 0)\n return columns.map(column => this.escape(column.databaseName)).join(\", \");\n\n // in the case if there are no insert columns specified and table without metadata used\n // we get columns from the inserted value map, in the case if only one inserted map is specified\n if (!this.expressionMap.mainAlias!.hasMetadata && !this.expressionMap.insertColumns.length) {\n const valueSets = this.getValueSets();\n if (valueSets.length === 1)\n return Object.keys(valueSets[0]).map(columnName => this.escape(columnName)).join(\", \");\n }\n\n // get a table name and all column database names\n return this.expressionMap.insertColumns.map(columnName => this.escape(columnName)).join(\", \");\n }\n\n /**\n * Creates list of values needs to be inserted in the VALUES expression.\n */\n protected createValuesExpression(): string {\n const valueSets = this.getValueSets();\n const columns = this.getInsertedColumns();\n\n // if column metadatas are given then apply all necessary operations with values\n if (columns.length > 0) {\n let expression = \"\";\n valueSets.forEach((valueSet, valueSetIndex) => {\n columns.forEach((column, columnIndex) => {\n if (columnIndex === 0) {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" SELECT \";\n } else {\n expression += \"(\";\n }\n }\n\n // extract real value from the entity\n let value = column.getEntityValue(valueSet);\n\n // if column is relational and value is an object then get real referenced column value from this object\n // for example column value is { question: { id: 1 } }, value will be equal to { id: 1 }\n // and we extract \"1\" from this object\n /*if (column.referencedColumn && value instanceof Object && !(value instanceof Function)) { // todo: check if we still need it since getEntityValue already has similar code\n value = column.referencedColumn.getEntityValue(value);\n }*/\n\n\n if (!(value instanceof Function)) {\n // make sure our value is normalized by a driver\n value = this.connection.driver.preparePersistentValue(value, column);\n }\n\n // newly inserted entities always have a version equal to 1 (first version)\n // also, user-specified version must be empty\n if (column.isVersion && value === undefined) {\n expression += \"1\";\n\n // } else if (column.isNestedSetLeft) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 1 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n //\n // } else if (column.isNestedSetRight) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 2 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n\n } else if (column.isDiscriminator) {\n expression += this.createParameter(this.expressionMap.mainAlias!.metadata.discriminatorValue);\n // return \"1\";\n\n // for create and update dates we insert current date\n // no, we don't do it because this constant is already in \"default\" value of the column\n // with extended timestamp functionality, like CURRENT_TIMESTAMP(6) for example\n // } else if (column.isCreateDate || column.isUpdateDate) {\n // return \"CURRENT_TIMESTAMP\";\n\n // if column is generated uuid and database does not support its generation and custom generated value was not provided by a user - we generate a new uuid value for insertion\n } else if (column.isGenerated && column.generationStrategy === \"uuid\" && !this.connection.driver.isUUIDGenerationSupported() && value === undefined) {\n\n value = RandomGenerator.uuid4();\n expression += this.createParameter(value);\n\n if (!(valueSetIndex in this.expressionMap.locallyGenerated)) {\n this.expressionMap.locallyGenerated[valueSetIndex] = {};\n }\n column.setEntityValue(this.expressionMap.locallyGenerated[valueSetIndex], value);\n\n // if value for this column was not provided then insert default value\n } else if (value === undefined) {\n if ((this.connection.driver instanceof OracleDriver && valueSets.length > 1) || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof SapDriver) { // unfortunately sqlite does not support DEFAULT expression in INSERT queries\n if (column.default !== undefined && column.default !== null) { // try to use default defined in the column\n expression += this.connection.driver.normalizeDefault(column);\n } else {\n expression += \"NULL\"; // otherwise simply use NULL and pray if column is nullable\n }\n\n } else {\n expression += \"DEFAULT\";\n }\n\n // support for SQL expressions in queries\n } else if (value instanceof Function) {\n expression += value();\n\n // just any other regular value\n } else {\n if (this.connection.driver instanceof SqlServerDriver)\n value = this.connection.driver.parametrizeValue(column, value);\n\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n\n\n const paramName = this.createParameter(value);\n\n if ((this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n const useLegacy = this.connection.driver.options.legacySpatialSupport;\n const geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression += `${geomFromText}(${paramName}, ${column.srid})`;\n } else {\n expression += `${geomFromText}(${paramName})`;\n }\n } else if (this.connection.driver instanceof PostgresDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression += `ST_SetSRID(ST_GeomFromGeoJSON(${paramName}), ${column.srid})::${column.type}`;\n } else {\n expression += `ST_GeomFromGeoJSON(${paramName})::${column.type}`;\n }\n } else if (this.connection.driver instanceof SqlServerDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression += column.type + \"::STGeomFromText(\" + paramName + \", \" + (column.srid || \"0\") + \")\";\n } else {\n expression += paramName;\n }\n }\n\n if (columnIndex === columns.length - 1) {\n if (valueSetIndex === valueSets.length - 1) {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" FROM DUAL \";\n } else {\n expression += \")\";\n }\n } else {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" FROM DUAL UNION ALL \";\n } else {\n expression += \"), \";\n }\n }\n } else {\n expression += \", \";\n }\n });\n });\n if (expression === \"()\")\n return \"\";\n\n return expression;\n } else { // for tables without metadata\n // get values needs to be inserted\n let expression = \"\";\n\n valueSets.forEach((valueSet, insertionIndex) => {\n const columns = Object.keys(valueSet);\n columns.forEach((columnName, columnIndex) => {\n if (columnIndex === 0) {\n expression += \"(\";\n }\n\n const value = valueSet[columnName];\n\n // support for SQL expressions in queries\n if (value instanceof Function) {\n expression += value();\n\n // if value for this column was not provided then insert default value\n } else if (value === undefined) {\n if (this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof SapDriver) {\n expression += \"NULL\";\n\n } else {\n expression += \"DEFAULT\";\n }\n\n // just any other regular value\n } else {\n expression += this.createParameter(value);\n }\n\n if (columnIndex === Object.keys(valueSet).length - 1) {\n if (insertionIndex === valueSets.length - 1) {\n expression += \")\";\n } else {\n expression += \"), \";\n }\n }\n else {\n expression += \", \";\n }\n });\n });\n if (expression === \"()\")\n return \"\";\n return expression;\n }\n }\n\n /**\n * Gets array of values need to be inserted into the target table.\n */\n protected getValueSets(): ObjectLiteral[] {\n if (Array.isArray(this.expressionMap.valuesSet))\n return this.expressionMap.valuesSet;\n\n if (this.expressionMap.valuesSet instanceof Object)\n return [this.expressionMap.valuesSet];\n\n throw new InsertValuesMissingError();\n }\n\n /**\n * Checks if column is an auto-generated primary key, but the current insertion specifies a value for it.\n *\n * @param column\n */\n protected isOverridingAutoIncrementBehavior(column: ColumnMetadata): boolean {\n return column.isPrimary\n && column.isGenerated\n && column.generationStrategy === \"increment\"\n && this.getValueSets().some((valueSet) =>\n column.getEntityValue(valueSet) !== undefined\n && column.getEntityValue(valueSet) !== null\n );\n }\n\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/query-builder/InsertQueryBuilder.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAI5C,OAAO,EAAC,eAAe,EAAC,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAC,cAAc,EAAC,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAC,mCAAmC,EAAC,MAAM,8CAA8C,CAAC;AACjG,OAAO,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAE3E,OAAO,EAAC,6BAA6B,EAAC,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAC,oBAAoB,EAAC,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAC,iBAAiB,EAAC,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAC,mBAAmB,EAAC,MAAM,+CAA+C,CAAC;AAElF;;GAEG;AACH;IAAgD,sCAAoB;IAApE;;IA4pBA,CAAC;IA1pBG,4EAA4E;IAC5E,6BAA6B;IAC7B,4EAA4E;IAE5E;;OAEG;IACH,qCAAQ,GAAR;QACI,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/B,GAAG,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACrC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACG,oCAAO,GAAb;;;;;;;;wBAEU,SAAS,GAAoB,IAAI,CAAC,YAAY,EAAE,CAAC;wBACvD,kCAAkC;wBAElC,kEAAkE;wBAClE,YAAY;wBACZ,EAAE;wBACF,sEAAsE;wBACtE,kEAAkE;wBAClE,oEAAoE;wBACpE,uCAAuC;wBACvC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;4BACtB,sBAAO,IAAI,YAAY,EAAE,EAAC;wBAIxB,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBACzC,sBAAsB,GAAY,KAAK,CAAC;;;;6BAKpC,CAAA,IAAI,CAAC,aAAa,CAAC,cAAc,KAAK,IAAI,IAAI,WAAW,CAAC,mBAAmB,KAAK,KAAK,CAAA,EAAvF,wBAAuF;wBACvF,qBAAM,WAAW,CAAC,gBAAgB,EAAE,EAAA;;wBAApC,SAAoC,CAAC;wBACrC,sBAAsB,GAAG,IAAI,CAAC;;;6BAM9B,CAAA,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,WAAW,CAAA,EAAtF,wBAAsF;wBAChF,oBAAkB,IAAI,iBAAiB,EAAE,CAAC;wBAChD,SAAS,CAAC,OAAO,CAAC,UAAA,QAAQ;4BACtB,WAAW,CAAC,WAAW,CAAC,0BAA0B,CAAC,iBAAe,EAAE,KAAI,CAAC,aAAa,CAAC,SAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;wBAC1H,CAAC,CAAC,CAAC;6BACC,CAAA,iBAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA,EAAnC,wBAAmC;wBAAE,qBAAM,OAAO,CAAC,GAAG,CAAC,iBAAe,CAAC,QAAQ,CAAC,EAAA;;wBAA3C,SAA2C,CAAC;;;wBAGrF,UAAU,GAAkB,IAAI,CAAC;wBACjC,eAAe,GAAkB,IAAI,CAAC;wBAIpC,6BAA6B,GAAG,IAAI,6BAA6B,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;wBAEnG,qBAAqC,EAAE,CAAC;wBAE9C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,WAAW,EAAE;;gCAC1F,KAAyB,KAAA,SAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAA,4CAAE;oCAA5C,UAAU;oCACjB,kBAAgB,CAAC,IAAI,OAArB,kBAAgB,2BACT,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,QAAQ,CAAC,2BAA2B,CAAC,UAAU,CAAC,WACnF;iCACL;;;;;;;;;yBACJ;wBAED,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,WAAW,EAAE;4BACvF,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,YAAY,CAAC,EAAE;gCAC3E,IAAI,CAAC,aAAa,CAAC,qBAAqB,GAAG,6BAA6B,CAAC,4BAA4B,EAAE,CAAC;6BAC3G;4BAED,kBAAgB,CAAC,IAAI,OAArB,kBAAgB,2BAAS,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,MAAM,CACpE,UAAA,CAAC,IAAI,OAAA,CAAC,kBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA7B,CAA6B,CACrC,WAAE;yBACN;wBAED,IAAI,kBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,eAAe,EAAE;4BAClF,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,6BAA6B,CAAC,cAAc,EAAE,kBAAgB,CAAC,CAAC;4BACpG,eAAe,GAAG,4BAA4B,CAAC;yBAClD;wBAKK,KAAA,OAA0B,IAAI,CAAC,qBAAqB,EAAE,IAAA,EAArD,SAAS,QAAA,EAAE,UAAU,QAAA,CAAiC;wBAIvD,UAAU,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;wBACtD,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,IAAI,IAAI,EAAT,CAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAExC,qBAAM,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAA;;wBAA5D,WAAW,GAAG,SAA8C;wBAE5D,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;6BAKhD,CAAA,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,WAAW,CAAA,EAArF,wBAAqF;wBACrF,oCAAoC;wBACpC,qBAAM,6BAA6B,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,EAAA;;wBADnE,oCAAoC;wBACpC,SAAmE,CAAC;;;6BAKpE,CAAA,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,WAAW,CAAA,EAAtF,yBAAsF;wBAChF,oBAAkB,IAAI,iBAAiB,EAAE,CAAC;wBAChD,SAAS,CAAC,OAAO,CAAC,UAAA,QAAQ;4BACtB,WAAW,CAAC,WAAW,CAAC,yBAAyB,CAAC,iBAAe,EAAE,KAAI,CAAC,aAAa,CAAC,SAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;wBACzH,CAAC,CAAC,CAAC;6BACC,CAAA,iBAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA,EAAnC,yBAAmC;wBAAE,qBAAM,OAAO,CAAC,GAAG,CAAC,iBAAe,CAAC,QAAQ,CAAC,EAAA;;wBAA3C,SAA2C,CAAC;;;6BAKrF,sBAAsB,EAAtB,yBAAsB;wBACtB,qBAAM,WAAW,CAAC,iBAAiB,EAAE,EAAA;;wBAArC,SAAqC,CAAC;;;oBAE1C,8BAA8B;oBAE9B,sBAAO,YAAY,EAAC;;;6BAKhB,sBAAsB,EAAtB,yBAAsB;;;;wBAElB,qBAAM,WAAW,CAAC,mBAAmB,EAAE,EAAA;;wBAAvC,SAAuC,CAAC;;;;;6BAGhD,MAAM,OAAK,CAAC;;6BAKR,CAAA,WAAW,KAAK,IAAI,CAAC,WAAW,CAAA,EAAhC,yBAAgC;wBAChC,qBAAM,WAAW,CAAC,OAAO,EAAE,EAAA;;wBAA3B,SAA2B,CAAC;;;;;;;KAKvC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,iCAAI,GAAJ,UAAQ,YAA6B,EAAE,OAAkB;QACrD,YAAY,GAAG,YAAY,YAAY,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;QAC/F,IAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,OAAO,IAAI,EAAE,CAAC;QACjD,OAAQ,IAAqC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,mCAAM,GAAN,UAAO,MAAuE;QAC1E,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,MAAM,CAAC;QACtC,OAAO,IAAI,CAAC;IAChB,CAAC;IAmBD;;OAEG;IACH,mCAAM,GAAN,UAAO,MAAuB;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAmBD;;OAEG;IACH,sCAAS,GAAT,UAAU,SAA0B;QAEhC,mDAAmD;QACnD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,uBAAuB,EAAE;YACjD,MAAM,IAAI,mCAAmC,EAAE,CAAC;QAEpD,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC;QACzC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,yCAAY,GAAZ,UAAa,OAAgB;QACzB,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,OAAO,CAAC;QAC1C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,uCAAU,GAAV,UAAW,SAAiB;QACxB,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,SAAS,CAAC;QAC1C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,qCAAQ,GAAR,UAAS,SAAkC;QAAlC,0BAAA,EAAA,gBAAkC;QACvC,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC;QAC1C,OAAO,IAAI,CAAC;IAChB,CAAC;IASD;;OAEG;IACH,qCAAQ,GAAR,UAAS,oBAAmH,EAAE,cAAkC;QAC5J,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE;YACtC,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG;gBAC1B,QAAQ,EAAE,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,eAAe;gBAC/C,OAAO,EAAE,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,OAAO;gBACtC,SAAS,EAAE,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,SAAS;aAC7C,CAAC;YACF,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG;YAC1B,SAAS,EAAE,oBAAoB;YAC/B,QAAQ,EAAE,cAAc;SAC3B,CAAC;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;OAEG;IACO,mDAAsB,GAAhC;QAAA,iBAsGC;QArGG,IAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC7D,IAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,qIAAqI;QAC7L,IAAM,mBAAmB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,wDAAwD;QAClN,IAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAC7D,IAAI,KAAK,GAAG,SAAS,CAAC;QAEtB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,mBAAmB,EAAE;YAC1G,KAAK,IAAI,MAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;SAC7D;QAED,KAAK,IAAI,UAAQ,SAAW,CAAC;QAE7B,yBAAyB;QACzB,IAAI,iBAAiB,EAAE;YACnB,KAAK,IAAI,MAAI,iBAAiB,MAAG,CAAC;SACrC;aAAM;YACH,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,mBAAmB,CAAC,EAAE,oDAAoD;gBACnL,KAAK,IAAI,IAAI,CAAC;SACrB;QAED,wBAAwB;QACxB,IAAI,mBAAmB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,eAAe,EAAE;YAC1E,KAAK,IAAI,aAAW,mBAAqB,CAAC;SAC7C;QAED,wBAAwB;QACxB,IAAI,gBAAgB,EAAE;YAClB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClF,KAAK,IAAI,MAAI,gBAAkB,CAAC;aACnC;iBAAM;gBACH,KAAK,IAAI,aAAW,gBAAkB,CAAC;aAC1C;SACJ;aAAM;YACH,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,mBAAmB,EAAE,EAAE,oDAAoD;gBAC9J,KAAK,IAAI,YAAY,CAAC;aACzB;iBAAM;gBACH,KAAK,IAAI,iBAAiB,CAAC;aAC9B;SACJ;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,oBAAoB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,eAAe,EAAE;YACjK,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;gBAC7B,KAAK,IAAI,0BAA0B,CAAC;aACvC;iBAAM,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;gBACtC,KAAK,IAAI,kBAAgB,IAAI,CAAC,aAAa,CAAC,UAAU,MAAG,CAAC;aAC7D;iBAAM,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;gBAC9B,IAAA,KAAmC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAA5D,SAAS,eAAA,EAAE,OAAO,aAAA,EAAE,QAAQ,cAAgC,CAAC;gBAErE,IAAI,cAAc,GAAG,aAAa,CAAC;gBAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBACzB,cAAc,IAAI,QAAM,QAAQ,CAAC,GAAG,CAAC,UAAC,MAAM,IAAK,OAAA,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAnB,CAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAI,CAAC;iBACxF;qBAAM,IAAI,QAAQ,EAAE;oBACjB,cAAc,IAAI,oBAAkB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAG,CAAC;iBAC/D;gBAED,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;oBAC1B,KAAK,IAAI,MAAI,cAAc,oBAAiB,CAAC;oBAC7C,KAAK,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,UAAA,MAAM,IAAI,OAAG,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAe,KAAI,CAAC,MAAM,CAAC,MAAM,CAAG,EAA1D,CAA0D,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzG,KAAK,IAAI,GAAG,CAAC;iBAChB;qBAAM,IAAI,OAAO,EAAE;oBAChB,KAAK,IAAI,MAAI,cAAc,oBAAiB,CAAC;oBAC7C,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAG,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAO,MAAQ,EAArC,CAAqC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjF,KAAK,IAAI,GAAG,CAAC;iBAChB;aACJ;SACJ;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,mBAAmB,EAAE;YACxG,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;gBACvB,IAAA,KAAyB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAlD,SAAS,eAAA,EAAE,OAAO,aAAgC,CAAC;gBAE3D,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;oBAC1B,KAAK,IAAI,2BAA2B,CAAC;oBACrC,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAG,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAa,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAG,EAAzD,CAAyD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvG,KAAK,IAAI,GAAG,CAAC;iBAChB;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAC/B,KAAK,IAAI,2BAA2B,CAAC;oBACrC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAG,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAO,MAAQ,EAArC,CAAqC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjF,KAAK,IAAI,GAAG,CAAC;iBAChB;aACJ;SACJ;QAED,2BAA2B;QAC3B,IAAI,mBAAmB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,eAAe,CAAC,EAAE;YAClL,KAAK,IAAI,gBAAc,mBAAqB,CAAC;SAChD;QAGD,0GAA0G;QAC1G,oMAAoM;QACpM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,eAAe;eAC9C,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,WAAW;eACzC,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,QAAQ,CAAC,OAAO;iBAC5C,MAAM,CAAC,UAAC,MAAM,IAAK,OAAA,KAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAI,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAApI,CAAoI,CAAC;iBACxJ,IAAI,CAAC,UAAC,MAAM,IAAK,OAAA,KAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,EAA9C,CAA8C,CAAC,EACvE;YACE,KAAK,GAAG,yBAAuB,SAAS,aAAQ,KAAK,8BAAyB,SAAS,SAAM,CAAC;SACjG;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACO,+CAAkB,GAA5B;QAAA,iBAyBC;QAxBG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,WAAW;YAC1C,OAAO,EAAE,CAAC;QAEd,OAAO,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAA,MAAM;YAE/D,oFAAoF;YACpF,IAAI,KAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM;gBACvC,OAAO,KAAI,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YAEhF,yDAAyD;YACzD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;YAEvC,wFAAwF;YACxF,+GAA+G;YAC/G,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,kBAAkB,KAAK,WAAW;mBAC5D,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,YAAY,CAAC;mBACjD,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,oBAAoB,CAAC;mBACzD,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,WAAW,CAAC;mBAChD,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,mBAAmB,CAAC;mBACxD,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,eAAe,IAAI,KAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC;gBACzG,OAAO,KAAK,CAAC;YAEjB,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACO,wDAA2B,GAArC;QAAA,iBAeC;QAdG,IAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAClB,OAAO,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAhC,CAAgC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9E,uFAAuF;QACvF,gGAAgG;QAChG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,EAAE;YACxF,IAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBACtB,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAvB,CAAuB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9F;QAED,iDAAiD;QACjD,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAvB,CAAuB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClG,CAAC;IAED;;OAEG;IACO,mDAAsB,GAAhC;QAAA,iBA+LC;QA9LG,IAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1C,gFAAgF;QAChF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,IAAI,YAAU,GAAG,EAAE,CAAC;YACpB,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAE,aAAa;gBACtC,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM,EAAE,WAAW;oBAChC,IAAI,WAAW,KAAK,CAAC,EAAE;wBACnB,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,YAAY,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;4BACxE,YAAU,IAAI,UAAU,CAAC;yBAC5B;6BAAM;4BACH,YAAU,IAAI,GAAG,CAAC;yBACrB;qBACJ;oBAED,qCAAqC;oBACrC,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;oBAE5C,wGAAwG;oBACxG,wFAAwF;oBACxF,sCAAsC;oBACtC;;uBAEG;oBAGH,IAAI,CAAC,CAAC,KAAK,YAAY,QAAQ,CAAC,EAAE;wBAChC,gDAAgD;wBAChD,KAAK,GAAG,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;qBACtE;oBAED,2EAA2E;oBAC3E,6CAA6C;oBAC7C,IAAI,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE;wBACzC,YAAU,IAAI,GAAG,CAAC;wBAEtB,uCAAuC;wBACvC,wFAAwF;wBACxF,uHAAuH;wBACvH,8GAA8G;wBAC9G,8BAA8B;wBAC9B,EAAE;wBACF,wCAAwC;wBACxC,wFAAwF;wBACxF,uHAAuH;wBACvH,8GAA8G;wBAC9G,8BAA8B;qBAE7B;yBAAM,IAAI,MAAM,CAAC,eAAe,EAAE;wBAC/B,YAAU,IAAI,KAAI,CAAC,eAAe,CAAC,KAAI,CAAC,aAAa,CAAC,SAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;wBAC9F,cAAc;wBAElB,qDAAqD;wBACrD,uFAAuF;wBACvF,+EAA+E;wBAC/E,2DAA2D;wBAC3D,kCAAkC;wBAElC,8KAA8K;qBAC7K;yBAAM,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,kBAAkB,KAAK,MAAM,IAAI,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,yBAAyB,EAAE,IAAI,KAAK,KAAK,SAAS,EAAE;wBAEjJ,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC;wBAChC,YAAU,IAAI,KAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;wBAE1C,IAAI,CAAC,CAAC,aAAa,IAAI,KAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE;4BACzD,KAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;yBAC3D;wBACD,MAAM,CAAC,cAAc,CAAC,KAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;wBAEjF,sEAAsE;qBACzE;yBAAM,IAAI,KAAK,KAAK,SAAS,EAAE;wBAC5B,IAAI,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,YAAY,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,oBAAoB,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,SAAS,EAAE,EAAE,6EAA6E;4BAClQ,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,EAAE,2CAA2C;gCACtG,YAAU,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;6BACjE;iCAAM;gCACH,YAAU,IAAI,MAAM,CAAC,CAAC,2DAA2D;6BACpF;yBAEJ;6BAAM;4BACH,YAAU,IAAI,SAAS,CAAC;yBAC3B;wBAEL,yCAAyC;qBACxC;yBAAM,IAAI,KAAK,YAAY,QAAQ,EAAE;wBAClC,YAAU,IAAI,KAAK,EAAE,CAAC;wBAE1B,+BAA+B;qBAC9B;yBAAM;wBACH,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,eAAe;4BACjD,KAAK,GAAG,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;wBAEnE,0GAA0G;wBAC1G,8BAA8B;wBAC9B,yCAAyC;wBAGzC,IAAM,SAAS,GAAG,KAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;wBAE9C,IAAI,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,WAAW,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,mBAAmB,CAAC,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;4BAC7K,IAAM,SAAS,GAAG,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;4BACtE,IAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,CAAC;4BACpE,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE;gCACrB,YAAU,IAAO,YAAY,SAAI,SAAS,UAAK,MAAM,CAAC,IAAI,MAAG,CAAC;6BACjE;iCAAM;gCACH,YAAU,IAAO,YAAY,SAAI,SAAS,MAAG,CAAC;6BACjD;yBACJ;6BAAM,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,cAAc,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;4BAC5H,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE;gCACvB,YAAU,IAAI,mCAAiC,SAAS,WAAM,MAAM,CAAC,IAAI,WAAM,MAAM,CAAC,IAAM,CAAC;6BAC9F;iCAAM;gCACL,YAAU,IAAI,wBAAsB,SAAS,WAAM,MAAM,CAAC,IAAM,CAAC;6BAClE;yBACJ;6BAAM,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,eAAe,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;4BAC7H,YAAU,IAAI,MAAM,CAAC,IAAI,GAAG,mBAAmB,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;yBACnG;6BAAM;4BACH,YAAU,IAAI,SAAS,CAAC;yBAC3B;qBACJ;oBAED,IAAI,WAAW,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;wBACpC,IAAI,aAAa,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;4BACxC,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,YAAY,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gCACxE,YAAU,IAAI,aAAa,CAAC;6BAC/B;iCAAM;gCACH,YAAU,IAAI,GAAG,CAAC;6BACrB;yBACJ;6BAAM;4BACH,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,YAAY,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gCACxE,YAAU,IAAI,uBAAuB,CAAC;6BACzC;iCAAM;gCACH,YAAU,IAAI,KAAK,CAAC;6BACvB;yBACJ;qBACJ;yBAAM;wBACH,YAAU,IAAI,IAAI,CAAC;qBACtB;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,IAAI,YAAU,KAAK,IAAI;gBACnB,OAAO,EAAE,CAAC;YAEd,OAAO,YAAU,CAAC;SACrB;aAAM,EAAE,8BAA8B;YACnC,kCAAkC;YAClC,IAAI,YAAU,GAAG,EAAE,CAAC;YAEpB,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAE,cAAc;gBACvC,IAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtC,OAAO,CAAC,OAAO,CAAC,UAAC,UAAU,EAAE,WAAW;oBACpC,IAAI,WAAW,KAAK,CAAC,EAAE;wBACnB,YAAU,IAAI,GAAG,CAAC;qBACrB;oBAED,IAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;oBAEnC,yCAAyC;oBACzC,IAAI,KAAK,YAAY,QAAQ,EAAE;wBAC3B,YAAU,IAAI,KAAK,EAAE,CAAC;wBAE1B,sEAAsE;qBACrE;yBAAM,IAAI,KAAK,KAAK,SAAS,EAAE;wBAC5B,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,oBAAoB,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,YAAY,SAAS,EAAE;4BACvG,YAAU,IAAI,MAAM,CAAC;yBAExB;6BAAM;4BACH,YAAU,IAAI,SAAS,CAAC;yBAC3B;wBAEL,+BAA+B;qBAC9B;yBAAM;wBACH,YAAU,IAAI,KAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;qBAC7C;oBAED,IAAI,WAAW,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClD,IAAI,cAAc,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;4BACzC,YAAU,IAAI,GAAG,CAAC;yBACrB;6BAAM;4BACH,YAAU,IAAI,KAAK,CAAC;yBACvB;qBACJ;yBACI;wBACD,YAAU,IAAI,IAAI,CAAC;qBACtB;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,IAAI,YAAU,KAAK,IAAI;gBACnB,OAAO,EAAE,CAAC;YACd,OAAO,YAAU,CAAC;SACrB;IACL,CAAC;IAED;;OAEG;IACO,yCAAY,GAAtB;QACI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;YAC3C,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QAExC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,YAAY,MAAM;YAC9C,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAE1C,MAAM,IAAI,wBAAwB,EAAE,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACO,8DAAiC,GAA3C,UAA4C,MAAsB;QAC9D,OAAO,MAAM,CAAC,SAAS;eACZ,MAAM,CAAC,WAAW;eAClB,MAAM,CAAC,kBAAkB,KAAK,WAAW;eACzC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,UAAC,QAAQ;gBACjC,OAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,SAAS;uBAC1C,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,IAAI;YAD3C,CAC2C,CAC9C,CAAC;IACd,CAAC;IAEL,yBAAC;AAAD,CA5pBA,AA4pBC,CA5pB+C,YAAY,GA4pB3D","file":"InsertQueryBuilder.js","sourcesContent":["import {CockroachDriver} from \"../driver/cockroachdb/CockroachDriver\";\nimport {SapDriver} from \"../driver/sap/SapDriver\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {QueryDeepPartialEntity} from \"./QueryPartialEntity\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {PostgresDriver} from \"../driver/postgres/PostgresDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {RandomGenerator} from \"../util/RandomGenerator\";\nimport {InsertResult} from \"./result/InsertResult\";\nimport {ReturningStatementNotSupportedError} from \"../error/ReturningStatementNotSupportedError\";\nimport {InsertValuesMissingError} from \"../error/InsertValuesMissingError\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {ReturningResultsEntityUpdator} from \"./ReturningResultsEntityUpdator\";\nimport {AbstractSqliteDriver} from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport {BroadcasterResult} from \"../subscriber/BroadcasterResult\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport class InsertQueryBuilder<Entity> extends QueryBuilder<Entity> {\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated sql query without parameters being replaced.\n */\n getQuery(): string {\n let sql = this.createComment();\n sql += this.createInsertExpression();\n return sql.trim();\n }\n\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n async execute(): Promise<InsertResult> {\n // console.time(\".value sets\");\n const valueSets: ObjectLiteral[] = this.getValueSets();\n // console.timeEnd(\".value sets\");\n\n // If user passed empty array of entities then we don't need to do\n // anything.\n //\n // Fixes GitHub issues #3111 and #5734. If we were to let this through\n // we would run into problems downstream, like subscribers getting\n // invoked with the empty array where they expect an entity, and SQL\n // queries with an empty VALUES clause.\n if (valueSets.length === 0)\n return new InsertResult();\n\n // console.time(\"QueryBuilder.execute\");\n // console.time(\".database stuff\");\n const queryRunner = this.obtainQueryRunner();\n let transactionStartedByUs: boolean = false;\n\n try {\n\n // start transaction if it was enabled\n if (this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // console.timeEnd(\".database stuff\");\n\n // call before insertion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n const broadcastResult = new BroadcasterResult();\n valueSets.forEach(valueSet => {\n queryRunner.broadcaster.broadcastBeforeInsertEvent(broadcastResult, this.expressionMap.mainAlias!.metadata, valueSet);\n });\n if (broadcastResult.promises.length > 0) await Promise.all(broadcastResult.promises);\n }\n\n let declareSql: string | null = null;\n let selectOutputSql: string | null = null;\n\n // if update entity mode is enabled we may need extra columns for the returning statement\n // console.time(\".prepare returning statement\");\n const returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n\n const returningColumns: ColumnMetadata[] = [];\n\n if (Array.isArray(this.expressionMap.returning) && this.expressionMap.mainAlias!.hasMetadata) {\n for (const columnPath of this.expressionMap.returning) {\n returningColumns.push(\n ...this.expressionMap.mainAlias!.metadata.findColumnsWithPropertyPath(columnPath)\n );\n }\n }\n\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias!.hasMetadata) {\n if (!(valueSets.length > 1 && this.connection.driver instanceof OracleDriver)) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getInsertionReturningColumns();\n }\n\n returningColumns.push(...this.expressionMap.extraReturningColumns.filter(\n c => !returningColumns.includes(c)\n ));\n }\n\n if (returningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", returningColumns);\n selectOutputSql = `SELECT * FROM @OutputTable`;\n }\n // console.timeEnd(\".prepare returning statement\");\n\n // execute query\n // console.time(\".getting query and parameters\");\n const [insertSql, parameters] = this.getQueryAndParameters();\n // console.timeEnd(\".getting query and parameters\");\n\n // console.time(\".query execution by database\");\n const statements = [declareSql, insertSql, selectOutputSql];\n const sql = statements.filter(s => s != null).join(\";\\n\\n\");\n\n const queryResult = await queryRunner.query(sql, parameters, true);\n\n const insertResult = InsertResult.from(queryResult);\n\n // console.timeEnd(\".query execution by database\");\n\n // load returning results and set them to the entity if entity updation is enabled\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias!.hasMetadata) {\n // console.time(\".updating entity\");\n await returningResultsEntityUpdator.insert(insertResult, valueSets);\n // console.timeEnd(\".updating entity\");\n }\n\n // call after insertion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n const broadcastResult = new BroadcasterResult();\n valueSets.forEach(valueSet => {\n queryRunner.broadcaster.broadcastAfterInsertEvent(broadcastResult, this.expressionMap.mainAlias!.metadata, valueSet);\n });\n if (broadcastResult.promises.length > 0) await Promise.all(broadcastResult.promises);\n }\n\n // close transaction if we started it\n // console.time(\".commit\");\n if (transactionStartedByUs) {\n await queryRunner.commitTransaction();\n }\n // console.timeEnd(\".commit\");\n\n return insertResult;\n\n } catch (error) {\n\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n throw error;\n\n } finally {\n\n // console.time(\".releasing connection\");\n if (queryRunner !== this.queryRunner) { // means we created our own query runner\n await queryRunner.release();\n }\n // console.timeEnd(\".releasing connection\");\n // console.timeEnd(\"QueryBuilder.execute\");\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Specifies INTO which entity's table insertion will be executed.\n */\n into<T>(entityTarget: EntityTarget<T>, columns?: string[]): InsertQueryBuilder<T> {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n const mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n this.expressionMap.insertColumns = columns || [];\n return (this as any) as InsertQueryBuilder<T>;\n }\n\n /**\n * Values needs to be inserted into table.\n */\n values(values: QueryDeepPartialEntity<Entity>|QueryDeepPartialEntity<Entity>[]): this {\n this.expressionMap.valuesSet = values;\n return this;\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n output(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n output(output: string): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this {\n return this.returning(output);\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n returning(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n returning(returning: string): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this {\n\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n\n this.expressionMap.returning = returning;\n return this;\n }\n\n /**\n * Indicates if entity must be updated after insertion operations.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n updateEntity(enabled: boolean): this {\n this.expressionMap.updateEntity = enabled;\n return this;\n }\n\n /**\n * Adds additional ON CONFLICT statement supported in postgres and cockroach.\n *\n * @deprecated Use `orIgnore` or `orUpdate`\n */\n onConflict(statement: string): this {\n this.expressionMap.onConflict = statement;\n return this;\n }\n\n /**\n * Adds additional ignore statement supported in databases.\n */\n orIgnore(statement: string | boolean = true): this {\n this.expressionMap.onIgnore = !!statement;\n return this;\n }\n\n /**\n * @deprecated\n */\n orUpdate(statement?: { columns?: string[], overwrite?: string[], conflict_target?: string | string[] }): this;\n\n orUpdate(overwrite: string[], conflictTarget?: string | string[]): this;\n\n /**\n * Adds additional update statement supported in databases.\n */\n orUpdate(statementOrOverwrite?: { columns?: string[], overwrite?: string[], conflict_target?: string | string[] } | string[], conflictTarget?: string | string[]): this {\n if (!Array.isArray(statementOrOverwrite)) {\n this.expressionMap.onUpdate = {\n conflict: statementOrOverwrite?.conflict_target,\n columns: statementOrOverwrite?.columns,\n overwrite: statementOrOverwrite?.overwrite,\n };\n return this;\n }\n\n this.expressionMap.onUpdate = {\n overwrite: statementOrOverwrite,\n conflict: conflictTarget,\n };\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates INSERT express used to perform insert query.\n */\n protected createInsertExpression() {\n const tableName = this.getTableName(this.getMainTableName());\n const valuesExpression = this.createValuesExpression(); // its important to get values before returning expression because oracle rely on native parameters and ordering of them is important\n const returningExpression = (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) ? null : this.createReturningExpression(); // oracle doesnt support returning with multi-row insert\n const columnsExpression = this.createColumnNamesExpression();\n let query = \"INSERT \";\n\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n query += `${this.expressionMap.onIgnore ? \" IGNORE \" : \"\"}`;\n }\n\n query += `INTO ${tableName}`;\n\n // add columns expression\n if (columnsExpression) {\n query += `(${columnsExpression})`;\n } else {\n if (!valuesExpression && (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)) // special syntax for mysql DEFAULT VALUES insertion\n query += \"()\";\n }\n\n // add OUTPUT expression\n if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n query += ` OUTPUT ${returningExpression}`;\n }\n\n // add VALUES expression\n if (valuesExpression) {\n if (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) {\n query += ` ${valuesExpression}`;\n } else {\n query += ` VALUES ${valuesExpression}`;\n }\n } else {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) { // special syntax for mysql DEFAULT VALUES insertion\n query += \" VALUES ()\";\n } else {\n query += ` DEFAULT VALUES`;\n }\n }\n if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {\n if (this.expressionMap.onIgnore) {\n query += \" ON CONFLICT DO NOTHING \";\n } else if (this.expressionMap.onConflict) {\n query += ` ON CONFLICT ${this.expressionMap.onConflict} `;\n } else if (this.expressionMap.onUpdate) {\n const { overwrite, columns, conflict } = this.expressionMap.onUpdate;\n\n let conflictTarget = \"ON CONFLICT\";\n\n if (Array.isArray(conflict)) {\n conflictTarget += ` ( ${conflict.map((column) => this.escape(column)).join(\", \")} )`;\n } else if (conflict) {\n conflictTarget += ` ON CONSTRAINT ${this.escape(conflict)}`;\n }\n\n if (Array.isArray(overwrite)) {\n query += ` ${conflictTarget} DO UPDATE SET `;\n query += overwrite?.map(column => `${this.escape(column)} = EXCLUDED.${this.escape(column)}`).join(\", \");\n query += \" \";\n } else if (columns) {\n query += ` ${conflictTarget} DO UPDATE SET `;\n query += columns.map(column => `${this.escape(column)} = :${column}`).join(\", \");\n query += \" \";\n }\n }\n }\n\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n if (this.expressionMap.onUpdate) {\n const { overwrite, columns } = this.expressionMap.onUpdate;\n\n if (Array.isArray(overwrite)) {\n query += \" ON DUPLICATE KEY UPDATE \";\n query += overwrite.map(column => `${this.escape(column)} = VALUES(${this.escape(column)})`).join(\", \");\n query += \" \";\n } else if (Array.isArray(columns)) {\n query += \" ON DUPLICATE KEY UPDATE \";\n query += columns.map(column => `${this.escape(column)} = :${column}`).join(\", \");\n query += \" \";\n }\n }\n }\n\n // add RETURNING expression\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n query += ` RETURNING ${returningExpression}`;\n }\n\n\n // Inserting a specific value for an auto-increment primary key in mssql requires enabling IDENTITY_INSERT\n // IDENTITY_INSERT can only be enabled for tables where there is an IDENTITY column and only if there is a value to be inserted (i.e. supplying DEFAULT is prohibited if IDENTITY_INSERT is enabled)\n if (this.connection.driver instanceof SqlServerDriver\n && this.expressionMap.mainAlias!.hasMetadata\n && this.expressionMap.mainAlias!.metadata.columns\n .filter((column) => this.expressionMap.insertColumns.length > 0 ? this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1 : column.isInsert)\n .some((column) => this.isOverridingAutoIncrementBehavior(column))\n ) {\n query = `SET IDENTITY_INSERT ${tableName} ON; ${query}; SET IDENTITY_INSERT ${tableName} OFF`;\n }\n\n return query;\n }\n\n /**\n * Gets list of columns where values must be inserted to.\n */\n protected getInsertedColumns(): ColumnMetadata[] {\n if (!this.expressionMap.mainAlias!.hasMetadata)\n return [];\n\n return this.expressionMap.mainAlias!.metadata.columns.filter(column => {\n\n // if user specified list of columns he wants to insert to, then we filter only them\n if (this.expressionMap.insertColumns.length)\n return this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1;\n\n // skip columns the user doesn't want included by default\n if (!column.isInsert) { return false; }\n\n // if user did not specified such list then return all columns except auto-increment one\n // for Oracle we return auto-increment column as well because Oracle does not support DEFAULT VALUES expression\n if (column.isGenerated && column.generationStrategy === \"increment\"\n && !(this.connection.driver instanceof OracleDriver)\n && !(this.connection.driver instanceof AbstractSqliteDriver)\n && !(this.connection.driver instanceof MysqlDriver)\n && !(this.connection.driver instanceof AuroraDataApiDriver)\n && !(this.connection.driver instanceof SqlServerDriver && this.isOverridingAutoIncrementBehavior(column)))\n return false;\n\n return true;\n });\n }\n\n /**\n * Creates a columns string where values must be inserted to for INSERT INTO expression.\n */\n protected createColumnNamesExpression(): string {\n const columns = this.getInsertedColumns();\n if (columns.length > 0)\n return columns.map(column => this.escape(column.databaseName)).join(\", \");\n\n // in the case if there are no insert columns specified and table without metadata used\n // we get columns from the inserted value map, in the case if only one inserted map is specified\n if (!this.expressionMap.mainAlias!.hasMetadata && !this.expressionMap.insertColumns.length) {\n const valueSets = this.getValueSets();\n if (valueSets.length === 1)\n return Object.keys(valueSets[0]).map(columnName => this.escape(columnName)).join(\", \");\n }\n\n // get a table name and all column database names\n return this.expressionMap.insertColumns.map(columnName => this.escape(columnName)).join(\", \");\n }\n\n /**\n * Creates list of values needs to be inserted in the VALUES expression.\n */\n protected createValuesExpression(): string {\n const valueSets = this.getValueSets();\n const columns = this.getInsertedColumns();\n\n // if column metadatas are given then apply all necessary operations with values\n if (columns.length > 0) {\n let expression = \"\";\n valueSets.forEach((valueSet, valueSetIndex) => {\n columns.forEach((column, columnIndex) => {\n if (columnIndex === 0) {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" SELECT \";\n } else {\n expression += \"(\";\n }\n }\n\n // extract real value from the entity\n let value = column.getEntityValue(valueSet);\n\n // if column is relational and value is an object then get real referenced column value from this object\n // for example column value is { question: { id: 1 } }, value will be equal to { id: 1 }\n // and we extract \"1\" from this object\n /*if (column.referencedColumn && value instanceof Object && !(value instanceof Function)) { // todo: check if we still need it since getEntityValue already has similar code\n value = column.referencedColumn.getEntityValue(value);\n }*/\n\n\n if (!(value instanceof Function)) {\n // make sure our value is normalized by a driver\n value = this.connection.driver.preparePersistentValue(value, column);\n }\n\n // newly inserted entities always have a version equal to 1 (first version)\n // also, user-specified version must be empty\n if (column.isVersion && value === undefined) {\n expression += \"1\";\n\n // } else if (column.isNestedSetLeft) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 1 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n //\n // } else if (column.isNestedSetRight) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 2 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n\n } else if (column.isDiscriminator) {\n expression += this.createParameter(this.expressionMap.mainAlias!.metadata.discriminatorValue);\n // return \"1\";\n\n // for create and update dates we insert current date\n // no, we don't do it because this constant is already in \"default\" value of the column\n // with extended timestamp functionality, like CURRENT_TIMESTAMP(6) for example\n // } else if (column.isCreateDate || column.isUpdateDate) {\n // return \"CURRENT_TIMESTAMP\";\n\n // if column is generated uuid and database does not support its generation and custom generated value was not provided by a user - we generate a new uuid value for insertion\n } else if (column.isGenerated && column.generationStrategy === \"uuid\" && !this.connection.driver.isUUIDGenerationSupported() && value === undefined) {\n\n value = RandomGenerator.uuid4();\n expression += this.createParameter(value);\n\n if (!(valueSetIndex in this.expressionMap.locallyGenerated)) {\n this.expressionMap.locallyGenerated[valueSetIndex] = {};\n }\n column.setEntityValue(this.expressionMap.locallyGenerated[valueSetIndex], value);\n\n // if value for this column was not provided then insert default value\n } else if (value === undefined) {\n if ((this.connection.driver instanceof OracleDriver && valueSets.length > 1) || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof SapDriver) { // unfortunately sqlite does not support DEFAULT expression in INSERT queries\n if (column.default !== undefined && column.default !== null) { // try to use default defined in the column\n expression += this.connection.driver.normalizeDefault(column);\n } else {\n expression += \"NULL\"; // otherwise simply use NULL and pray if column is nullable\n }\n\n } else {\n expression += \"DEFAULT\";\n }\n\n // support for SQL expressions in queries\n } else if (value instanceof Function) {\n expression += value();\n\n // just any other regular value\n } else {\n if (this.connection.driver instanceof SqlServerDriver)\n value = this.connection.driver.parametrizeValue(column, value);\n\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n\n\n const paramName = this.createParameter(value);\n\n if ((this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n const useLegacy = this.connection.driver.options.legacySpatialSupport;\n const geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression += `${geomFromText}(${paramName}, ${column.srid})`;\n } else {\n expression += `${geomFromText}(${paramName})`;\n }\n } else if (this.connection.driver instanceof PostgresDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression += `ST_SetSRID(ST_GeomFromGeoJSON(${paramName}), ${column.srid})::${column.type}`;\n } else {\n expression += `ST_GeomFromGeoJSON(${paramName})::${column.type}`;\n }\n } else if (this.connection.driver instanceof SqlServerDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression += column.type + \"::STGeomFromText(\" + paramName + \", \" + (column.srid || \"0\") + \")\";\n } else {\n expression += paramName;\n }\n }\n\n if (columnIndex === columns.length - 1) {\n if (valueSetIndex === valueSets.length - 1) {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" FROM DUAL \";\n } else {\n expression += \")\";\n }\n } else {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" FROM DUAL UNION ALL \";\n } else {\n expression += \"), \";\n }\n }\n } else {\n expression += \", \";\n }\n });\n });\n if (expression === \"()\")\n return \"\";\n\n return expression;\n } else { // for tables without metadata\n // get values needs to be inserted\n let expression = \"\";\n\n valueSets.forEach((valueSet, insertionIndex) => {\n const columns = Object.keys(valueSet);\n columns.forEach((columnName, columnIndex) => {\n if (columnIndex === 0) {\n expression += \"(\";\n }\n\n const value = valueSet[columnName];\n\n // support for SQL expressions in queries\n if (value instanceof Function) {\n expression += value();\n\n // if value for this column was not provided then insert default value\n } else if (value === undefined) {\n if (this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof SapDriver) {\n expression += \"NULL\";\n\n } else {\n expression += \"DEFAULT\";\n }\n\n // just any other regular value\n } else {\n expression += this.createParameter(value);\n }\n\n if (columnIndex === Object.keys(valueSet).length - 1) {\n if (insertionIndex === valueSets.length - 1) {\n expression += \")\";\n } else {\n expression += \"), \";\n }\n }\n else {\n expression += \", \";\n }\n });\n });\n if (expression === \"()\")\n return \"\";\n return expression;\n }\n }\n\n /**\n * Gets array of values need to be inserted into the target table.\n */\n protected getValueSets(): ObjectLiteral[] {\n if (Array.isArray(this.expressionMap.valuesSet))\n return this.expressionMap.valuesSet;\n\n if (this.expressionMap.valuesSet instanceof Object)\n return [this.expressionMap.valuesSet];\n\n throw new InsertValuesMissingError();\n }\n\n /**\n * Checks if column is an auto-generated primary key, but the current insertion specifies a value for it.\n *\n * @param column\n */\n protected isOverridingAutoIncrementBehavior(column: ColumnMetadata): boolean {\n return column.isPrimary\n && column.isGenerated\n && column.generationStrategy === \"increment\"\n && this.getValueSets().some((valueSet) =>\n column.getEntityValue(valueSet) !== undefined\n && column.getEntityValue(valueSet) !== null\n );\n }\n\n}\n"],"sourceRoot":".."}
|
|
@@ -472,7 +472,7 @@ var QueryBuilder = /** @class */ (function () {
|
|
|
472
472
|
for (var _m = (e_4 = void 0, __values(alias.metadata.relations)), _o = _m.next(); !_o.done; _o = _m.next()) {
|
|
473
473
|
var relation = _o.value;
|
|
474
474
|
try {
|
|
475
|
-
for (var _p = (e_5 = void 0, __values(__spreadArray(__spreadArray([], __read(relation.joinColumns)), __read(relation.inverseJoinColumns)))), _q = _p.next(); !_q.done; _q = _p.next()) {
|
|
475
|
+
for (var _p = (e_5 = void 0, __values(__spreadArray(__spreadArray([], __read(relation.joinColumns), false), __read(relation.inverseJoinColumns), false))), _q = _p.next(); !_q.done; _q = _p.next()) {
|
|
476
476
|
var joinColumn = _q.value;
|
|
477
477
|
var propertyKey = relation.propertyPath + "." + joinColumn.referencedColumn.propertyPath;
|
|
478
478
|
replacements[propertyKey] = joinColumn.databaseName;
|
|
@@ -625,7 +625,7 @@ var QueryBuilder = /** @class */ (function () {
|
|
|
625
625
|
driver.isReturningSqlSupported()) {
|
|
626
626
|
columns.push.apply(columns, __spreadArray([], __read(this.expressionMap.extraReturningColumns.filter(function (column) {
|
|
627
627
|
return columns.indexOf(column) === -1;
|
|
628
|
-
}))));
|
|
628
|
+
})), false));
|
|
629
629
|
}
|
|
630
630
|
if (columns.length) {
|
|
631
631
|
var columnsExpression = columns.map(function (column) {
|
|
@@ -669,7 +669,7 @@ var QueryBuilder = /** @class */ (function () {
|
|
|
669
669
|
if (Array.isArray(this.expressionMap.returning)) {
|
|
670
670
|
this.expressionMap.returning.forEach(function (columnName) {
|
|
671
671
|
if (_this.expressionMap.mainAlias.hasMetadata) {
|
|
672
|
-
columns.push.apply(columns, __spreadArray([], __read(_this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(columnName))));
|
|
672
|
+
columns.push.apply(columns, __spreadArray([], __read(_this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(columnName)), false));
|
|
673
673
|
}
|
|
674
674
|
});
|
|
675
675
|
}
|
|
@@ -813,7 +813,7 @@ var QueryBuilder = /** @class */ (function () {
|
|
|
813
813
|
throw new Error("Cannot find alias for relation at " + fullRelationPath);
|
|
814
814
|
}
|
|
815
815
|
alias = joinAttr.alias;
|
|
816
|
-
root.push.apply(root, __spreadArray([], __read(part.split("."))));
|
|
816
|
+
root.push.apply(root, __spreadArray([], __read(part.split(".")), false));
|
|
817
817
|
propertyPathParts.shift();
|
|
818
818
|
return "continue";
|
|
819
819
|
}
|
|
@@ -853,7 +853,7 @@ var QueryBuilder = /** @class */ (function () {
|
|
|
853
853
|
}
|
|
854
854
|
if (metadata.hasEmbeddedWithPropertyPath(path)) {
|
|
855
855
|
var subPaths = this_3.createPropertyPath(metadata, entity[key], path);
|
|
856
|
-
paths.push.apply(paths, __spreadArray([], __read(subPaths)));
|
|
856
|
+
paths.push.apply(paths, __spreadArray([], __read(subPaths), false));
|
|
857
857
|
return "continue";
|
|
858
858
|
}
|
|
859
859
|
if (metadata.hasRelationWithPropertyPath(path)) {
|
|
@@ -886,13 +886,13 @@ var QueryBuilder = /** @class */ (function () {
|
|
|
886
886
|
var hasAllPrimaryKeys = primaryColumns.length > 0 && primaryColumns.every(function (column) { return column.getEntityValue(entity[key], false); });
|
|
887
887
|
if (hasAllPrimaryKeys) {
|
|
888
888
|
var subPaths_1 = primaryColumns.map(function (column) { return path + "." + column.propertyPath; });
|
|
889
|
-
paths.push.apply(paths, __spreadArray([], __read(subPaths_1)));
|
|
889
|
+
paths.push.apply(paths, __spreadArray([], __read(subPaths_1), false));
|
|
890
890
|
return "continue";
|
|
891
891
|
}
|
|
892
892
|
// If nothing else, just return every property that's being passed to us.
|
|
893
893
|
var subPaths = this_3.createPropertyPath(relation.inverseEntityMetadata, entity[key])
|
|
894
894
|
.map(function (p) { return path + "." + p; });
|
|
895
|
-
paths.push.apply(paths, __spreadArray([], __read(subPaths)));
|
|
895
|
+
paths.push.apply(paths, __spreadArray([], __read(subPaths), false));
|
|
896
896
|
return "continue";
|
|
897
897
|
}
|
|
898
898
|
paths.push(path);
|
|
@@ -1077,7 +1077,7 @@ var QueryBuilder = /** @class */ (function () {
|
|
|
1077
1077
|
operator: "notEqual",
|
|
1078
1078
|
parameters: __spreadArray([
|
|
1079
1079
|
aliasPath
|
|
1080
|
-
], __read(parameters))
|
|
1080
|
+
], __read(parameters), false)
|
|
1081
1081
|
};
|
|
1082
1082
|
}
|
|
1083
1083
|
}
|
|
@@ -1086,7 +1086,7 @@ var QueryBuilder = /** @class */ (function () {
|
|
|
1086
1086
|
operator: parameterValue.type,
|
|
1087
1087
|
parameters: __spreadArray([
|
|
1088
1088
|
aliasPath
|
|
1089
|
-
], __read(parameters))
|
|
1089
|
+
], __read(parameters), false)
|
|
1090
1090
|
};
|
|
1091
1091
|
}
|
|
1092
1092
|
}
|