typeorm 0.2.45-dev.f3cfdd2 → 0.2.45
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/cache/DbQueryResultCache.js +6 -6
- package/browser/cache/DbQueryResultCache.js.map +1 -1
- package/browser/cache/RedisQueryResultCache.js +2 -2
- package/browser/cache/RedisQueryResultCache.js.map +1 -1
- package/browser/connection/Connection.js +2 -2
- package/browser/connection/Connection.js.map +1 -1
- package/browser/connection/ConnectionOptionsReader.js +2 -2
- package/browser/connection/ConnectionOptionsReader.js.map +1 -1
- package/browser/driver/aurora-data-api/AuroraDataApiDriver.js +10 -10
- package/browser/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +157 -157
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +3 -3
- package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +4 -4
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +2 -2
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/browser/driver/capacitor/CapacitorDriver.js +1 -1
- package/browser/driver/capacitor/CapacitorDriver.js.map +1 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.js +1 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachDriver.js +6 -6
- package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +153 -153
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/cordova/CordovaQueryRunner.js +1 -1
- package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/browser/driver/expo/ExpoQueryRunner.js +3 -3
- package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/browser/driver/mongodb/MongoDriver.js +4 -4
- package/browser/driver/mongodb/MongoDriver.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.js +11 -11
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.js +163 -163
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/nativescript/NativescriptQueryRunner.js +1 -1
- package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleDriver.js +10 -10
- package/browser/driver/oracle/OracleDriver.js.map +1 -1
- package/browser/driver/oracle/OracleQueryRunner.js +124 -124
- package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.js +18 -18
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +229 -229
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/react-native/ReactNativeQueryRunner.js +1 -1
- package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapDriver.js +9 -9
- package/browser/driver/sap/SapDriver.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.js +126 -126
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/driver/sqlite/SqliteDriver.js +4 -4
- package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +3 -3
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +61 -61
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqljs/SqljsDriver.js +3 -3
- package/browser/driver/sqljs/SqljsDriver.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.js +11 -11
- package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +203 -203
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/entity-manager/EntityManager.js +4 -4
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/entity-manager/MongoEntityManager.js +1 -1
- package/browser/entity-manager/MongoEntityManager.js.map +1 -1
- package/browser/entity-schema/EntitySchemaEmbeddedError.js +2 -2
- package/browser/entity-schema/EntitySchemaEmbeddedError.js.map +1 -1
- package/browser/error/AlreadyHasActiveConnectionError.js +1 -1
- package/browser/error/AlreadyHasActiveConnectionError.js.map +1 -1
- package/browser/error/CannotAttachTreeChildrenEntityError.js +1 -1
- package/browser/error/CannotAttachTreeChildrenEntityError.js.map +1 -1
- package/browser/error/CannotConnectAlreadyConnectedError.js +1 -1
- package/browser/error/CannotConnectAlreadyConnectedError.js.map +1 -1
- package/browser/error/CannotCreateEntityIdMapError.js +1 -1
- package/browser/error/CannotCreateEntityIdMapError.js.map +1 -1
- package/browser/error/CannotDetermineEntityError.js +1 -1
- package/browser/error/CannotDetermineEntityError.js.map +1 -1
- package/browser/error/CannotExecuteNotConnectedError.js +1 -1
- package/browser/error/CannotExecuteNotConnectedError.js.map +1 -1
- package/browser/error/CannotGetEntityManagerNotConnectedError.js +1 -1
- package/browser/error/CannotGetEntityManagerNotConnectedError.js.map +1 -1
- package/browser/error/CannotReflectMethodParameterTypeError.js +1 -1
- package/browser/error/CannotReflectMethodParameterTypeError.js.map +1 -1
- package/browser/error/CircularRelationsError.js +1 -1
- package/browser/error/CircularRelationsError.js.map +1 -1
- package/browser/error/ColumnTypeUndefinedError.js +1 -1
- package/browser/error/ColumnTypeUndefinedError.js.map +1 -1
- package/browser/error/ConnectionIsNotSetError.js +1 -1
- package/browser/error/ConnectionIsNotSetError.js.map +1 -1
- package/browser/error/ConnectionNotFoundError.js +1 -1
- package/browser/error/ConnectionNotFoundError.js.map +1 -1
- package/browser/error/CustomRepositoryCannotInheritRepositoryError.js +1 -1
- package/browser/error/CustomRepositoryCannotInheritRepositoryError.js.map +1 -1
- package/browser/error/CustomRepositoryDoesNotHaveEntityError.js +1 -1
- package/browser/error/CustomRepositoryDoesNotHaveEntityError.js.map +1 -1
- package/browser/error/CustomRepositoryNotFoundError.js +1 -1
- package/browser/error/CustomRepositoryNotFoundError.js.map +1 -1
- package/browser/error/DataTypeNotSupportedError.js +1 -1
- package/browser/error/DataTypeNotSupportedError.js.map +1 -1
- package/browser/error/DriverOptionNotSetError.js +1 -1
- package/browser/error/DriverOptionNotSetError.js.map +1 -1
- package/browser/error/DriverPackageNotInstalledError.js +2 -2
- package/browser/error/DriverPackageNotInstalledError.js.map +1 -1
- package/browser/error/EntityColumnNotFound.js +1 -1
- package/browser/error/EntityColumnNotFound.js.map +1 -1
- package/browser/error/EntityMetadataNotFoundError.js +1 -1
- package/browser/error/EntityMetadataNotFoundError.js.map +1 -1
- package/browser/error/EntityNotFoundError.js +2 -2
- package/browser/error/EntityNotFoundError.js.map +1 -1
- package/browser/error/FindRelationsNotFoundError.js +2 -2
- package/browser/error/FindRelationsNotFoundError.js.map +1 -1
- package/browser/error/InitializedRelationError.js +1 -1
- package/browser/error/InitializedRelationError.js.map +1 -1
- package/browser/error/MissingDeleteDateColumnError.js +1 -1
- package/browser/error/MissingDeleteDateColumnError.js.map +1 -1
- package/browser/error/MissingDriverError.js +2 -2
- package/browser/error/MissingDriverError.js.map +1 -1
- package/browser/error/MissingJoinColumnError.js +3 -3
- package/browser/error/MissingJoinColumnError.js.map +1 -1
- package/browser/error/MissingJoinTableError.js +3 -3
- package/browser/error/MissingJoinTableError.js.map +1 -1
- package/browser/error/MissingPrimaryColumnError.js +1 -1
- package/browser/error/MissingPrimaryColumnError.js.map +1 -1
- package/browser/error/MustBeEntityError.js +1 -1
- package/browser/error/MustBeEntityError.js.map +1 -1
- package/browser/error/NamingStrategyNotFoundError.js +2 -2
- package/browser/error/NamingStrategyNotFoundError.js.map +1 -1
- package/browser/error/NoConnectionForRepositoryError.js +1 -1
- package/browser/error/NoConnectionForRepositoryError.js.map +1 -1
- package/browser/error/NoConnectionOptionError.js +2 -2
- package/browser/error/NoConnectionOptionError.js.map +1 -1
- package/browser/error/NoVersionOrUpdateDateColumnError.js +1 -1
- package/browser/error/NoVersionOrUpdateDateColumnError.js.map +1 -1
- package/browser/error/OptimisticLockVersionMismatchError.js +1 -1
- package/browser/error/OptimisticLockVersionMismatchError.js.map +1 -1
- package/browser/error/PrimaryColumnCannotBeNullableError.js +1 -1
- package/browser/error/PrimaryColumnCannotBeNullableError.js.map +1 -1
- package/browser/error/RepositoryNotFoundError.js +2 -2
- package/browser/error/RepositoryNotFoundError.js.map +1 -1
- package/browser/error/RepositoryNotTreeError.js +1 -1
- package/browser/error/RepositoryNotTreeError.js.map +1 -1
- package/browser/error/SubjectRemovedAndUpdatedError.js +1 -1
- package/browser/error/SubjectRemovedAndUpdatedError.js.map +1 -1
- package/browser/error/SubjectWithoutIdentifierError.js +1 -1
- package/browser/error/SubjectWithoutIdentifierError.js.map +1 -1
- package/browser/error/TreeRepositoryNotSupportedError.js +1 -1
- package/browser/error/TreeRepositoryNotSupportedError.js.map +1 -1
- package/browser/error/UsingJoinColumnIsNotAllowedError.js +1 -1
- package/browser/error/UsingJoinColumnIsNotAllowedError.js.map +1 -1
- package/browser/error/UsingJoinColumnOnlyOnOneSideAllowedError.js +1 -1
- package/browser/error/UsingJoinColumnOnlyOnOneSideAllowedError.js.map +1 -1
- package/browser/error/UsingJoinTableIsNotAllowedError.js +2 -2
- package/browser/error/UsingJoinTableIsNotAllowedError.js.map +1 -1
- package/browser/error/UsingJoinTableOnlyOnOneSideAllowedError.js +1 -1
- package/browser/error/UsingJoinTableOnlyOnOneSideAllowedError.js.map +1 -1
- package/browser/find-options/FindOptionsUtils.js +6 -6
- package/browser/find-options/FindOptionsUtils.js.map +1 -1
- package/browser/logger/FileLogger.js +3 -3
- package/browser/logger/FileLogger.js.map +1 -1
- package/browser/metadata/EmbeddedMetadata.js +1 -1
- package/browser/metadata/EmbeddedMetadata.js.map +1 -1
- package/browser/metadata/IndexMetadata.js +1 -1
- package/browser/metadata/IndexMetadata.js.map +1 -1
- package/browser/metadata/RelationCountMetadata.js +1 -1
- package/browser/metadata/RelationCountMetadata.js.map +1 -1
- package/browser/metadata/RelationIdMetadata.js +1 -1
- package/browser/metadata/RelationIdMetadata.js.map +1 -1
- package/browser/metadata/UniqueMetadata.js +1 -1
- package/browser/metadata/UniqueMetadata.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataBuilder.js +1 -1
- package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js +9 -9
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +2 -2
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/RelationJoinColumnBuilder.js +1 -1
- package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
- package/browser/migration/MigrationExecutor.js +16 -16
- package/browser/migration/MigrationExecutor.js.map +1 -1
- package/browser/naming-strategy/DefaultNamingStrategy.js +11 -11
- package/browser/naming-strategy/DefaultNamingStrategy.js.map +1 -1
- package/browser/persistence/tree/ClosureSubjectExecutor.js +17 -17
- package/browser/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
- package/browser/persistence/tree/MaterializedPathSubjectExecutor.js +2 -2
- package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/browser/persistence/tree/NestedSetSubjectExecutor.js +44 -44
- package/browser/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
- package/browser/platform/BrowserPlatformTools.js +9 -9
- package/browser/platform/BrowserPlatformTools.js.map +1 -1
- package/browser/platform/PlatformTools.js +1 -1
- package/browser/platform/PlatformTools.js.map +1 -1
- package/browser/query-builder/Alias.js +1 -1
- package/browser/query-builder/Alias.js.map +1 -1
- package/browser/query-builder/DeleteQueryBuilder.js +3 -3
- package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/InsertQueryBuilder.js +22 -22
- package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
- package/browser/query-builder/JoinAttribute.js +1 -1
- package/browser/query-builder/JoinAttribute.js.map +1 -1
- package/browser/query-builder/QueryBuilder.js +39 -39
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/QueryExpressionMap.js +2 -2
- package/browser/query-builder/QueryExpressionMap.js.map +1 -1
- package/browser/query-builder/RelationLoader.js +7 -7
- package/browser/query-builder/RelationLoader.js.map +1 -1
- package/browser/query-builder/RelationQueryBuilder.js +3 -3
- package/browser/query-builder/RelationQueryBuilder.js.map +1 -1
- package/browser/query-builder/RelationRemover.js +4 -4
- package/browser/query-builder/RelationRemover.js.map +1 -1
- package/browser/query-builder/RelationUpdater.js +1 -1
- package/browser/query-builder/RelationUpdater.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.js +23 -23
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.js +4 -4
- package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.js +8 -8
- package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/browser/query-builder/relation-count/RelationCountAttribute.js +1 -1
- package/browser/query-builder/relation-count/RelationCountAttribute.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdAttribute.js +1 -1
- package/browser/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdLoader.js +4 -4
- package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/browser/query-runner/BaseQueryRunner.js +7 -7
- package/browser/query-runner/BaseQueryRunner.js.map +1 -1
- package/browser/repository/TreeRepository.js +7 -7
- package/browser/repository/TreeRepository.js.map +1 -1
- package/browser/schema-builder/RdbmsSchemaBuilder.js +19 -19
- package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/browser/subscriber/Broadcaster.js +1 -1
- package/browser/subscriber/Broadcaster.js.map +1 -1
- package/browser/util/DateUtils.js +1 -1
- package/browser/util/DateUtils.js.map +1 -1
- package/browser/util/DepGraph.js +7 -7
- package/browser/util/DepGraph.js.map +1 -1
- package/browser/util/DirectoryExportedClassesLoader.js +2 -2
- package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/browser/util/PathUtils.js +1 -1
- package/browser/util/PathUtils.js.map +1 -1
- package/cache/DbQueryResultCache.js +6 -6
- package/cache/DbQueryResultCache.js.map +1 -1
- package/cache/RedisQueryResultCache.js +2 -2
- package/cache/RedisQueryResultCache.js.map +1 -1
- package/cli.js +0 -0
- package/commands/CommandUtils.js +1 -1
- package/commands/CommandUtils.js.map +1 -1
- package/commands/EntityCreateCommand.js +3 -3
- package/commands/EntityCreateCommand.js.map +1 -1
- package/commands/InitCommand.js +6 -6
- package/commands/InitCommand.js.map +1 -1
- package/commands/MigrationCreateCommand.js +3 -3
- package/commands/MigrationCreateCommand.js.map +1 -1
- package/commands/MigrationGenerateCommand.js +8 -8
- package/commands/MigrationGenerateCommand.js.map +1 -1
- package/commands/SchemaLogCommand.js +1 -1
- package/commands/SchemaLogCommand.js.map +1 -1
- package/commands/SubscriberCreateCommand.js +2 -2
- package/commands/SubscriberCreateCommand.js.map +1 -1
- package/connection/Connection.js +2 -2
- package/connection/Connection.js.map +1 -1
- package/connection/ConnectionOptionsReader.js +2 -2
- package/connection/ConnectionOptionsReader.js.map +1 -1
- package/driver/aurora-data-api/AuroraDataApiDriver.js +10 -10
- package/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +157 -157
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +3 -3
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.js +4 -4
- package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +2 -2
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/driver/capacitor/CapacitorDriver.js +1 -1
- package/driver/capacitor/CapacitorDriver.js.map +1 -1
- package/driver/capacitor/CapacitorQueryRunner.js +1 -1
- package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/driver/cockroachdb/CockroachDriver.js +6 -6
- package/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +153 -153
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/cordova/CordovaQueryRunner.js +1 -1
- package/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.js +3 -3
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/mongodb/MongoDriver.js +4 -4
- package/driver/mongodb/MongoDriver.js.map +1 -1
- package/driver/mysql/MysqlDriver.js +11 -11
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.js +163 -163
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/nativescript/NativescriptQueryRunner.js +1 -1
- package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/driver/oracle/OracleDriver.js +10 -10
- package/driver/oracle/OracleDriver.js.map +1 -1
- package/driver/oracle/OracleQueryRunner.js +124 -124
- package/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresDriver.js +18 -18
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.js +229 -229
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/react-native/ReactNativeQueryRunner.js +1 -1
- package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/driver/sap/SapDriver.js +9 -9
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/sap/SapQueryRunner.js +126 -126
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/driver/sqlite/SqliteDriver.js +4 -4
- package/driver/sqlite/SqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +3 -3
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +61 -61
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqljs/SqljsDriver.js +3 -3
- package/driver/sqljs/SqljsDriver.js.map +1 -1
- package/driver/sqlserver/SqlServerDriver.js +11 -11
- package/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.js +203 -203
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/entity-manager/EntityManager.js +4 -4
- package/entity-manager/EntityManager.js.map +1 -1
- package/entity-manager/MongoEntityManager.js +1 -1
- package/entity-manager/MongoEntityManager.js.map +1 -1
- package/entity-schema/EntitySchemaEmbeddedError.js +2 -2
- package/entity-schema/EntitySchemaEmbeddedError.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 +2 -2
- 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 +2 -2
- package/error/EntityNotFoundError.js.map +1 -1
- package/error/FindRelationsNotFoundError.js +2 -2
- package/error/FindRelationsNotFoundError.js.map +1 -1
- package/error/InitializedRelationError.js +1 -1
- package/error/InitializedRelationError.js.map +1 -1
- package/error/MissingDeleteDateColumnError.js +1 -1
- package/error/MissingDeleteDateColumnError.js.map +1 -1
- package/error/MissingDriverError.js +2 -2
- package/error/MissingDriverError.js.map +1 -1
- package/error/MissingJoinColumnError.js +3 -3
- package/error/MissingJoinColumnError.js.map +1 -1
- package/error/MissingJoinTableError.js +3 -3
- 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 +2 -2
- package/error/NamingStrategyNotFoundError.js.map +1 -1
- package/error/NoConnectionForRepositoryError.js +1 -1
- package/error/NoConnectionForRepositoryError.js.map +1 -1
- package/error/NoConnectionOptionError.js +2 -2
- package/error/NoConnectionOptionError.js.map +1 -1
- package/error/NoVersionOrUpdateDateColumnError.js +1 -1
- package/error/NoVersionOrUpdateDateColumnError.js.map +1 -1
- package/error/OptimisticLockVersionMismatchError.js +1 -1
- package/error/OptimisticLockVersionMismatchError.js.map +1 -1
- package/error/PrimaryColumnCannotBeNullableError.js +1 -1
- package/error/PrimaryColumnCannotBeNullableError.js.map +1 -1
- package/error/RepositoryNotFoundError.js +2 -2
- package/error/RepositoryNotFoundError.js.map +1 -1
- package/error/RepositoryNotTreeError.js +1 -1
- package/error/RepositoryNotTreeError.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/TreeRepositoryNotSupportedError.js +1 -1
- package/error/TreeRepositoryNotSupportedError.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 +2 -2
- package/error/UsingJoinTableIsNotAllowedError.js.map +1 -1
- package/error/UsingJoinTableOnlyOnOneSideAllowedError.js +1 -1
- package/error/UsingJoinTableOnlyOnOneSideAllowedError.js.map +1 -1
- package/find-options/FindOptionsUtils.js +6 -6
- package/find-options/FindOptionsUtils.js.map +1 -1
- package/logger/FileLogger.js +3 -3
- package/logger/FileLogger.js.map +1 -1
- package/metadata/EmbeddedMetadata.js +1 -1
- package/metadata/EmbeddedMetadata.js.map +1 -1
- package/metadata/IndexMetadata.js +1 -1
- package/metadata/IndexMetadata.js.map +1 -1
- package/metadata/RelationCountMetadata.js +1 -1
- package/metadata/RelationCountMetadata.js.map +1 -1
- package/metadata/RelationIdMetadata.js +1 -1
- package/metadata/RelationIdMetadata.js.map +1 -1
- package/metadata/UniqueMetadata.js +1 -1
- package/metadata/UniqueMetadata.js.map +1 -1
- package/metadata-builder/EntityMetadataBuilder.js +1 -1
- package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js +9 -9
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/metadata-builder/JunctionEntityMetadataBuilder.js +2 -2
- package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/RelationJoinColumnBuilder.js +1 -1
- package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
- package/migration/MigrationExecutor.js +16 -16
- package/migration/MigrationExecutor.js.map +1 -1
- package/naming-strategy/DefaultNamingStrategy.js +11 -11
- package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
- package/package.json +260 -1
- package/persistence/tree/ClosureSubjectExecutor.js +17 -17
- package/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
- package/persistence/tree/MaterializedPathSubjectExecutor.js +2 -2
- package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/persistence/tree/NestedSetSubjectExecutor.js +44 -44
- package/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
- package/platform/PlatformTools.js +1 -1
- package/platform/PlatformTools.js.map +1 -1
- package/query-builder/Alias.js +1 -1
- package/query-builder/Alias.js.map +1 -1
- package/query-builder/DeleteQueryBuilder.js +3 -3
- package/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/query-builder/InsertQueryBuilder.js +22 -22
- 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 +39 -39
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/QueryExpressionMap.js +2 -2
- package/query-builder/QueryExpressionMap.js.map +1 -1
- package/query-builder/RelationLoader.js +7 -7
- package/query-builder/RelationLoader.js.map +1 -1
- package/query-builder/RelationQueryBuilder.js +3 -3
- package/query-builder/RelationQueryBuilder.js.map +1 -1
- package/query-builder/RelationRemover.js +4 -4
- package/query-builder/RelationRemover.js.map +1 -1
- package/query-builder/RelationUpdater.js +1 -1
- package/query-builder/RelationUpdater.js.map +1 -1
- package/query-builder/SelectQueryBuilder.js +23 -23
- 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 +8 -8
- package/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/query-builder/relation-count/RelationCountAttribute.js +1 -1
- package/query-builder/relation-count/RelationCountAttribute.js.map +1 -1
- 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 +4 -4
- package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/query-runner/BaseQueryRunner.js +7 -7
- package/query-runner/BaseQueryRunner.js.map +1 -1
- package/repository/TreeRepository.js +7 -7
- package/repository/TreeRepository.js.map +1 -1
- package/schema-builder/RdbmsSchemaBuilder.js +19 -19
- package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/subscriber/Broadcaster.js +1 -1
- package/subscriber/Broadcaster.js.map +1 -1
- package/util/DateUtils.js +1 -1
- package/util/DateUtils.js.map +1 -1
- package/util/DepGraph.js +7 -7
- package/util/DepGraph.js.map +1 -1
- package/util/DirectoryExportedClassesLoader.js +2 -2
- package/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/util/PathUtils.js +1 -1
- package/util/PathUtils.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/query-builder/RelationLoader.ts"],"names":[],"mappings":"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","file":"RelationLoader.js","sourcesContent":["import {Connection} from \"../connection/Connection\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\nimport {FindOptionsUtils} from \"../find-options/FindOptionsUtils\";\n\n/**\n * Wraps entities and creates getters/setters for their relations\n * to be able to lazily load relations when accessing these relations.\n */\nexport class RelationLoader {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private connection: Connection) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation data for the given entity and its relation.\n */\n load(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any[]> { // todo: check all places where it uses non array\n if (queryRunner && queryRunner.isReleased) queryRunner = undefined; // get new one if already closed\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadManyToOneOrOneToOneOwner(relation, entityOrEntities, queryRunner);\n\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadOneToManyOrOneToOneNotOwner(relation, entityOrEntities, queryRunner);\n\n } else if (relation.isManyToManyOwner) {\n return this.loadManyToManyOwner(relation, entityOrEntities, queryRunner);\n\n } else { // many-to-many non owner\n return this.loadManyToManyNotOwner(relation, entityOrEntities, queryRunner);\n }\n }\n\n /**\n * Loads data for many-to-one and one-to-one owner relations.\n *\n * (ow) post.category<=>category.post\n * loaded: category from post\n * example: SELECT category.id AS category_id, category.name AS category_name FROM category category\n * INNER JOIN post Post ON Post.category=category.id WHERE Post.id=1\n */\n loadManyToOneOrOneToOneOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const columns = relation.entityMetadata.primaryColumns;\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.joinColumns;\n const conditions = joinColumns.map(joinColumn => {\n return `${relation.entityMetadata.name}.${joinColumn.propertyName} = ${relation.propertyName}.${joinColumn.referencedColumn!.propertyName}`;\n }).join(\" AND \");\n\n const joinAliasName = relation.entityMetadata.name;\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName) // category\n .from(relation.type, relation.propertyName) // Category, category\n .innerJoin(relation.entityMetadata.target as Function, joinAliasName, conditions);\n\n if (columns.length === 1) {\n qb.where(`${joinAliasName}.${columns[0].propertyPath} IN (:...${joinAliasName + \"_\" + columns[0].propertyName})`);\n qb.setParameter(joinAliasName + \"_\" + columns[0].propertyName, entities.map(entity => columns[0].getEntityValue(entity, true)));\n\n } else {\n const condition = entities.map((entity, entityIndex) => {\n return columns.map((column, columnIndex) => {\n const paramName = joinAliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity, true));\n return joinAliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(condition => \"(\" + condition + \")\").join(\" OR \");\n qb.where(condition);\n }\n\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);\n\n return qb.getMany();\n // return qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for one-to-many and one-to-one not owner relations.\n *\n * SELECT post\n * FROM post post\n * WHERE post.[joinColumn.name] = entity[joinColumn.referencedColumn]\n */\n loadOneToManyOrOneToOneNotOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const aliasName = relation.propertyName;\n const columns = relation.inverseRelation!.joinColumns;\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(aliasName)\n .from(relation.inverseRelation!.entityMetadata.target, aliasName);\n\n if (columns.length === 1) {\n qb.where(`${aliasName}.${columns[0].propertyPath} IN (:...${aliasName + \"_\" + columns[0].propertyName})`);\n qb.setParameter(aliasName + \"_\" + columns[0].propertyName, entities.map(entity => columns[0].referencedColumn!.getEntityValue(entity, true)));\n\n } else {\n const condition = entities.map((entity, entityIndex) => {\n return columns.map((column, columnIndex) => {\n const paramName = aliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.referencedColumn!.getEntityValue(entity, true));\n return aliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(condition => \"(\" + condition + \")\").join(\" OR \");\n qb.where(condition);\n }\n\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);\n\n return qb.getMany();\n // return relation.isOneToMany ? qb.getMany() : qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for many-to-many owner relations.\n *\n * SELECT category\n * FROM category category\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = :postId\n * AND post_categories.categoryId = category.id\n */\n loadManyToManyOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const mainAlias = relation.propertyName;\n const joinAlias = relation.junctionEntityMetadata!.tableName;\n const joinColumnConditions = relation.joinColumns.map(joinColumn => {\n return `${joinAlias}.${joinColumn.propertyName} IN (:...${joinColumn.propertyName})`;\n });\n const inverseJoinColumnConditions = relation.inverseJoinColumns.map(inverseJoinColumn => {\n return `${joinAlias}.${inverseJoinColumn.propertyName}=${mainAlias}.${inverseJoinColumn.referencedColumn!.propertyName}`;\n });\n const parameters = relation.joinColumns.reduce((parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map(entity => joinColumn.referencedColumn!.getEntityValue(entity, true));\n return parameters;\n }, {} as ObjectLiteral);\n\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, [...joinColumnConditions, ...inverseJoinColumnConditions].join(\" AND \"))\n .setParameters(parameters);\n\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);\n\n return qb.getMany();\n }\n\n /**\n * Loads data for many-to-many not owner relations.\n *\n * SELECT post\n * FROM post post\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = post.id\n * AND post_categories.categoryId = post_categories.categoryId\n */\n loadManyToManyNotOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const mainAlias = relation.propertyName;\n const joinAlias = relation.junctionEntityMetadata!.tableName;\n const joinColumnConditions = relation.inverseRelation!.joinColumns.map(joinColumn => {\n return `${joinAlias}.${joinColumn.propertyName} = ${mainAlias}.${joinColumn.referencedColumn!.propertyName}`;\n });\n const inverseJoinColumnConditions = relation.inverseRelation!.inverseJoinColumns.map(inverseJoinColumn => {\n return `${joinAlias}.${inverseJoinColumn.propertyName} IN (:...${inverseJoinColumn.propertyName})`;\n });\n const parameters = relation.inverseRelation!.inverseJoinColumns.reduce((parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map(entity => joinColumn.referencedColumn!.getEntityValue(entity, true));\n return parameters;\n }, {} as ObjectLiteral);\n\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, [...joinColumnConditions, ...inverseJoinColumnConditions].join(\" AND \"))\n .setParameters(parameters);\n\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);\n\n return qb.getMany();\n }\n\n /**\n * Wraps given entity and creates getters/setters for its given relation\n * to be able to lazily load data when accessing this relation.\n */\n enableLazyLoad(relation: RelationMetadata, entity: ObjectLiteral, queryRunner?: QueryRunner) {\n const relationLoader = this;\n const dataIndex = \"__\" + relation.propertyName + \"__\"; // in what property of the entity loaded data will be stored\n const promiseIndex = \"__promise_\" + relation.propertyName + \"__\"; // in what property of the entity loading promise will be stored\n const resolveIndex = \"__has_\" + relation.propertyName + \"__\"; // indicates if relation data already was loaded or not, we need this flag if loaded data is empty\n\n const setData = (entity: ObjectLiteral, value: any) => {\n entity[dataIndex] = value;\n entity[resolveIndex] = true;\n delete entity[promiseIndex];\n return value;\n };\n const setPromise = (entity: ObjectLiteral, value: Promise<any>) => {\n delete entity[resolveIndex];\n delete entity[dataIndex];\n entity[promiseIndex] = value;\n value.then(\n // ensure different value is not assigned yet\n result => entity[promiseIndex] === value ? setData(entity, result) : result\n );\n return value;\n };\n\n Object.defineProperty(entity, relation.propertyName, {\n get: function() {\n if (this[resolveIndex] === true || this[dataIndex] !== undefined) // if related data already was loaded then simply return it\n return Promise.resolve(this[dataIndex]);\n\n if (this[promiseIndex]) // if related data is loading then return a promise relationLoader loads it\n return this[promiseIndex];\n\n // nothing is loaded yet, load relation data and save it in the model once they are loaded\n const loader = relationLoader.load(relation, this, queryRunner).then(\n result => relation.isOneToOne || relation.isManyToOne ? (result.length === 0 ? null : result[0]) : result\n );\n return setPromise(this, loader);\n },\n set: function(value: any|Promise<any>) {\n if (value instanceof Promise) { // if set data is a promise then wait for its resolve and save in the object\n setPromise(this, value);\n } else { // if its direct data set (non promise, probably not safe-typed)\n setData(this, value);\n }\n },\n configurable: true\n });\n }\n\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/query-builder/RelationLoader.ts"],"names":[],"mappings":"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","file":"RelationLoader.js","sourcesContent":["import {Connection} from \"../connection/Connection\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\nimport {FindOptionsUtils} from \"../find-options/FindOptionsUtils\";\n\n/**\n * Wraps entities and creates getters/setters for their relations\n * to be able to lazily load relations when accessing these relations.\n */\nexport class RelationLoader {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private connection: Connection) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation data for the given entity and its relation.\n */\n load(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any[]> { // todo: check all places where it uses non array\n if (queryRunner && queryRunner.isReleased) queryRunner = undefined; // get new one if already closed\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadManyToOneOrOneToOneOwner(relation, entityOrEntities, queryRunner);\n\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadOneToManyOrOneToOneNotOwner(relation, entityOrEntities, queryRunner);\n\n } else if (relation.isManyToManyOwner) {\n return this.loadManyToManyOwner(relation, entityOrEntities, queryRunner);\n\n } else { // many-to-many non owner\n return this.loadManyToManyNotOwner(relation, entityOrEntities, queryRunner);\n }\n }\n\n /**\n * Loads data for many-to-one and one-to-one owner relations.\n *\n * (ow) post.category<=>category.post\n * loaded: category from post\n * example: SELECT category.id AS category_id, category.name AS category_name FROM category category\n * INNER JOIN post Post ON Post.category=category.id WHERE Post.id=1\n */\n loadManyToOneOrOneToOneOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const columns = relation.entityMetadata.primaryColumns;\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.joinColumns;\n const conditions = joinColumns.map(joinColumn => {\n return `${relation.entityMetadata.name}.${joinColumn.propertyName} = ${relation.propertyName}.${joinColumn.referencedColumn!.propertyName}`;\n }).join(\" AND \");\n\n const joinAliasName = relation.entityMetadata.name;\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName) // category\n .from(relation.type, relation.propertyName) // Category, category\n .innerJoin(relation.entityMetadata.target as Function, joinAliasName, conditions);\n\n if (columns.length === 1) {\n qb.where(`${joinAliasName}.${columns[0].propertyPath} IN (:...${joinAliasName + \"_\" + columns[0].propertyName})`);\n qb.setParameter(joinAliasName + \"_\" + columns[0].propertyName, entities.map(entity => columns[0].getEntityValue(entity, true)));\n\n } else {\n const condition = entities.map((entity, entityIndex) => {\n return columns.map((column, columnIndex) => {\n const paramName = joinAliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity, true));\n return joinAliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(condition => \"(\" + condition + \")\").join(\" OR \");\n qb.where(condition);\n }\n\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);\n\n return qb.getMany();\n // return qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for one-to-many and one-to-one not owner relations.\n *\n * SELECT post\n * FROM post post\n * WHERE post.[joinColumn.name] = entity[joinColumn.referencedColumn]\n */\n loadOneToManyOrOneToOneNotOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const aliasName = relation.propertyName;\n const columns = relation.inverseRelation!.joinColumns;\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(aliasName)\n .from(relation.inverseRelation!.entityMetadata.target, aliasName);\n\n if (columns.length === 1) {\n qb.where(`${aliasName}.${columns[0].propertyPath} IN (:...${aliasName + \"_\" + columns[0].propertyName})`);\n qb.setParameter(aliasName + \"_\" + columns[0].propertyName, entities.map(entity => columns[0].referencedColumn!.getEntityValue(entity, true)));\n\n } else {\n const condition = entities.map((entity, entityIndex) => {\n return columns.map((column, columnIndex) => {\n const paramName = aliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.referencedColumn!.getEntityValue(entity, true));\n return aliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(condition => \"(\" + condition + \")\").join(\" OR \");\n qb.where(condition);\n }\n\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);\n\n return qb.getMany();\n // return relation.isOneToMany ? qb.getMany() : qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for many-to-many owner relations.\n *\n * SELECT category\n * FROM category category\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = :postId\n * AND post_categories.categoryId = category.id\n */\n loadManyToManyOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const mainAlias = relation.propertyName;\n const joinAlias = relation.junctionEntityMetadata!.tableName;\n const joinColumnConditions = relation.joinColumns.map(joinColumn => {\n return `${joinAlias}.${joinColumn.propertyName} IN (:...${joinColumn.propertyName})`;\n });\n const inverseJoinColumnConditions = relation.inverseJoinColumns.map(inverseJoinColumn => {\n return `${joinAlias}.${inverseJoinColumn.propertyName}=${mainAlias}.${inverseJoinColumn.referencedColumn!.propertyName}`;\n });\n const parameters = relation.joinColumns.reduce((parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map(entity => joinColumn.referencedColumn!.getEntityValue(entity, true));\n return parameters;\n }, {} as ObjectLiteral);\n\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, [...joinColumnConditions, ...inverseJoinColumnConditions].join(\" AND \"))\n .setParameters(parameters);\n\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);\n\n return qb.getMany();\n }\n\n /**\n * Loads data for many-to-many not owner relations.\n *\n * SELECT post\n * FROM post post\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = post.id\n * AND post_categories.categoryId = post_categories.categoryId\n */\n loadManyToManyNotOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const mainAlias = relation.propertyName;\n const joinAlias = relation.junctionEntityMetadata!.tableName;\n const joinColumnConditions = relation.inverseRelation!.joinColumns.map(joinColumn => {\n return `${joinAlias}.${joinColumn.propertyName} = ${mainAlias}.${joinColumn.referencedColumn!.propertyName}`;\n });\n const inverseJoinColumnConditions = relation.inverseRelation!.inverseJoinColumns.map(inverseJoinColumn => {\n return `${joinAlias}.${inverseJoinColumn.propertyName} IN (:...${inverseJoinColumn.propertyName})`;\n });\n const parameters = relation.inverseRelation!.inverseJoinColumns.reduce((parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map(entity => joinColumn.referencedColumn!.getEntityValue(entity, true));\n return parameters;\n }, {} as ObjectLiteral);\n\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, [...joinColumnConditions, ...inverseJoinColumnConditions].join(\" AND \"))\n .setParameters(parameters);\n\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);\n\n return qb.getMany();\n }\n\n /**\n * Wraps given entity and creates getters/setters for its given relation\n * to be able to lazily load data when accessing this relation.\n */\n enableLazyLoad(relation: RelationMetadata, entity: ObjectLiteral, queryRunner?: QueryRunner) {\n const relationLoader = this;\n const dataIndex = \"__\" + relation.propertyName + \"__\"; // in what property of the entity loaded data will be stored\n const promiseIndex = \"__promise_\" + relation.propertyName + \"__\"; // in what property of the entity loading promise will be stored\n const resolveIndex = \"__has_\" + relation.propertyName + \"__\"; // indicates if relation data already was loaded or not, we need this flag if loaded data is empty\n\n const setData = (entity: ObjectLiteral, value: any) => {\n entity[dataIndex] = value;\n entity[resolveIndex] = true;\n delete entity[promiseIndex];\n return value;\n };\n const setPromise = (entity: ObjectLiteral, value: Promise<any>) => {\n delete entity[resolveIndex];\n delete entity[dataIndex];\n entity[promiseIndex] = value;\n value.then(\n // ensure different value is not assigned yet\n result => entity[promiseIndex] === value ? setData(entity, result) : result\n );\n return value;\n };\n\n Object.defineProperty(entity, relation.propertyName, {\n get: function() {\n if (this[resolveIndex] === true || this[dataIndex] !== undefined) // if related data already was loaded then simply return it\n return Promise.resolve(this[dataIndex]);\n\n if (this[promiseIndex]) // if related data is loading then return a promise relationLoader loads it\n return this[promiseIndex];\n\n // nothing is loaded yet, load relation data and save it in the model once they are loaded\n const loader = relationLoader.load(relation, this, queryRunner).then(\n result => relation.isOneToOne || relation.isManyToOne ? (result.length === 0 ? null : result[0]) : result\n );\n return setPromise(this, loader);\n },\n set: function(value: any|Promise<any>) {\n if (value instanceof Promise) { // if set data is a promise then wait for its resolve and save in the object\n setPromise(this, value);\n } else { // if its direct data set (non promise, probably not safe-typed)\n setData(this, value);\n }\n },\n configurable: true\n });\n }\n\n}\n"],"sourceRoot":".."}
|
|
@@ -47,7 +47,7 @@ var RelationQueryBuilder = /** @class */ (function (_super) {
|
|
|
47
47
|
throw new TypeORMError("Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.");
|
|
48
48
|
if (relation.isManyToMany || relation.isOneToMany)
|
|
49
49
|
throw new TypeORMError("Set operation is only supported for many-to-one and one-to-one relations. " +
|
|
50
|
-
|
|
50
|
+
"However given \"".concat(relation.propertyPath, "\" has ").concat(relation.relationType, " relation. ") +
|
|
51
51
|
"Use .add() method instead.");
|
|
52
52
|
// if there are multiple join columns then user must send id map as "value" argument. check if he really did it
|
|
53
53
|
if (relation.joinColumns &&
|
|
@@ -77,7 +77,7 @@ var RelationQueryBuilder = /** @class */ (function (_super) {
|
|
|
77
77
|
throw new TypeORMError("Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.");
|
|
78
78
|
if (relation.isManyToOne || relation.isOneToOne)
|
|
79
79
|
throw new TypeORMError("Add operation is only supported for many-to-many and one-to-many relations. " +
|
|
80
|
-
|
|
80
|
+
"However given \"".concat(relation.propertyPath, "\" has ").concat(relation.relationType, " relation. ") +
|
|
81
81
|
"Use .set() method instead.");
|
|
82
82
|
// if there are multiple join columns then user must send id map as "value" argument. check if he really did it
|
|
83
83
|
if (relation.joinColumns &&
|
|
@@ -107,7 +107,7 @@ var RelationQueryBuilder = /** @class */ (function (_super) {
|
|
|
107
107
|
throw new TypeORMError("Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.");
|
|
108
108
|
if (relation.isManyToOne || relation.isOneToOne)
|
|
109
109
|
throw new TypeORMError("Add operation is only supported for many-to-many and one-to-many relations. " +
|
|
110
|
-
|
|
110
|
+
"However given \"".concat(relation.propertyPath, "\" has ").concat(relation.relationType, " relation. ") +
|
|
111
111
|
"Use .set(null) method instead.");
|
|
112
112
|
remover = new RelationRemover(this, this.expressionMap);
|
|
113
113
|
return [2 /*return*/, remover.remove(value)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/query-builder/RelationQueryBuilder.ts"],"names":[],"mappings":"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","file":"RelationQueryBuilder.js","sourcesContent":["import {QueryBuilder} from \"./QueryBuilder\";\nimport {RelationUpdater} from \"./RelationUpdater\";\nimport {RelationRemover} from \"./RelationRemover\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nexport class RelationQueryBuilder<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 return \"\";\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sets entity (target) which relations will be updated.\n */\n of(entity: any|any[]): this {\n this.expressionMap.of = entity;\n return this;\n }\n\n /**\n * Sets entity relation's value.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Works only for many-to-one and one-to-one relations.\n * For many-to-many and one-to-many relations use #add and #remove methods instead.\n */\n async set(value: any): Promise<void> {\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToMany || relation.isOneToMany)\n throw new TypeORMError(`Set operation is only supported for many-to-one and one-to-one relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .add() method instead.`);\n\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new TypeORMError(`Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \"...\", lastName: \"...\" })`);\n\n const updater = new RelationUpdater(this, this.expressionMap);\n return updater.update(value);\n }\n\n /**\n * Adds (binds) given value to entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async add(value: any|any[]): Promise<void> {\n if (Array.isArray(value) && value.length === 0)\n return;\n\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToOne || relation.isOneToOne)\n throw new TypeORMError(`Add operation is only supported for many-to-many and one-to-many relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .set() method instead.`);\n\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new TypeORMError(`Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \"...\", lastName: \"...\" })`);\n\n const updater = new RelationUpdater(this, this.expressionMap);\n return updater.update(value);\n }\n\n /**\n * Removes (unbinds) given value from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async remove(value: any|any[]): Promise<void> {\n if (Array.isArray(value) && value.length === 0)\n return;\n\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToOne || relation.isOneToOne)\n throw new TypeORMError(`Add operation is only supported for many-to-many and one-to-many relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .set(null) method instead.`);\n\n const remover = new RelationRemover(this, this.expressionMap);\n return remover.remove(value);\n }\n\n /**\n * Adds (binds) and removes (unbinds) given values to/from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async addAndRemove(added: any|any[], removed: any|any[]): Promise<void> {\n await this.remove(removed);\n await this.add(added);\n }\n\n /**\n * Gets entity's relation id.\n async getId(): Promise<any> {\n\n }*/\n\n /**\n * Gets entity's relation ids.\n async getIds(): Promise<any[]> {\n return [];\n }*/\n\n /**\n * Loads a single entity (relational) from the relation.\n * You can also provide id of relational entity to filter by.\n */\n async loadOne<T = any>(): Promise<T|undefined> {\n return this.loadMany<T>().then(results => results[0]);\n }\n\n /**\n * Loads many entities (relational) from the relation.\n * You can also provide ids of relational entities to filter by.\n */\n async loadMany<T = any>(): Promise<T[]> {\n let of = this.expressionMap.of;\n if (!(of instanceof Object)) {\n const metadata = this.expressionMap.mainAlias!.metadata;\n if (metadata.hasMultiplePrimaryKeys)\n throw new TypeORMError(`Cannot load entity because only one primary key was specified, however entity contains multiple primary keys`);\n\n of = metadata.primaryColumns[0].createValueMap(of);\n }\n\n return this.connection.relationLoader.load(this.expressionMap.relationMetadata, of, this.queryRunner);\n }\n\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/query-builder/RelationQueryBuilder.ts"],"names":[],"mappings":"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","file":"RelationQueryBuilder.js","sourcesContent":["import {QueryBuilder} from \"./QueryBuilder\";\nimport {RelationUpdater} from \"./RelationUpdater\";\nimport {RelationRemover} from \"./RelationRemover\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nexport class RelationQueryBuilder<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 return \"\";\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sets entity (target) which relations will be updated.\n */\n of(entity: any|any[]): this {\n this.expressionMap.of = entity;\n return this;\n }\n\n /**\n * Sets entity relation's value.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Works only for many-to-one and one-to-one relations.\n * For many-to-many and one-to-many relations use #add and #remove methods instead.\n */\n async set(value: any): Promise<void> {\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToMany || relation.isOneToMany)\n throw new TypeORMError(`Set operation is only supported for many-to-one and one-to-one relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .add() method instead.`);\n\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new TypeORMError(`Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \"...\", lastName: \"...\" })`);\n\n const updater = new RelationUpdater(this, this.expressionMap);\n return updater.update(value);\n }\n\n /**\n * Adds (binds) given value to entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async add(value: any|any[]): Promise<void> {\n if (Array.isArray(value) && value.length === 0)\n return;\n\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToOne || relation.isOneToOne)\n throw new TypeORMError(`Add operation is only supported for many-to-many and one-to-many relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .set() method instead.`);\n\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new TypeORMError(`Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \"...\", lastName: \"...\" })`);\n\n const updater = new RelationUpdater(this, this.expressionMap);\n return updater.update(value);\n }\n\n /**\n * Removes (unbinds) given value from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async remove(value: any|any[]): Promise<void> {\n if (Array.isArray(value) && value.length === 0)\n return;\n\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToOne || relation.isOneToOne)\n throw new TypeORMError(`Add operation is only supported for many-to-many and one-to-many relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .set(null) method instead.`);\n\n const remover = new RelationRemover(this, this.expressionMap);\n return remover.remove(value);\n }\n\n /**\n * Adds (binds) and removes (unbinds) given values to/from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async addAndRemove(added: any|any[], removed: any|any[]): Promise<void> {\n await this.remove(removed);\n await this.add(added);\n }\n\n /**\n * Gets entity's relation id.\n async getId(): Promise<any> {\n\n }*/\n\n /**\n * Gets entity's relation ids.\n async getIds(): Promise<any[]> {\n return [];\n }*/\n\n /**\n * Loads a single entity (relational) from the relation.\n * You can also provide id of relational entity to filter by.\n */\n async loadOne<T = any>(): Promise<T|undefined> {\n return this.loadMany<T>().then(results => results[0]);\n }\n\n /**\n * Loads many entities (relational) from the relation.\n * You can also provide ids of relational entities to filter by.\n */\n async loadMany<T = any>(): Promise<T[]> {\n let of = this.expressionMap.of;\n if (!(of instanceof Object)) {\n const metadata = this.expressionMap.mainAlias!.metadata;\n if (metadata.hasMultiplePrimaryKeys)\n throw new TypeORMError(`Cannot load entity because only one primary key was specified, however entity contains multiple primary keys`);\n\n of = metadata.primaryColumns[0].createValueMap(of);\n }\n\n return this.connection.relationLoader.load(this.expressionMap.relationMetadata, of, this.queryRunner);\n }\n\n}\n"],"sourceRoot":".."}
|
|
@@ -39,11 +39,11 @@ var RelationRemover = /** @class */ (function () {
|
|
|
39
39
|
return __spreadArray(__spreadArray([], __read(relation.inverseRelation.joinColumns.map(function (column, columnIndex) {
|
|
40
40
|
var parameterName = "joinColumn_" + ofIndex + "_" + valueIndex + "_" + columnIndex;
|
|
41
41
|
parameters_1[parameterName] = of instanceof Object ? column.referencedColumn.getEntityValue(of) : of;
|
|
42
|
-
return column.propertyPath
|
|
42
|
+
return "".concat(column.propertyPath, " = :").concat(parameterName);
|
|
43
43
|
})), false), __read(relation.inverseRelation.entityMetadata.primaryColumns.map(function (column, columnIndex) {
|
|
44
44
|
var parameterName = "primaryColumn_" + valueIndex + "_" + valueIndex + "_" + columnIndex;
|
|
45
45
|
parameters_1[parameterName] = value instanceof Object ? column.getEntityValue(value) : value;
|
|
46
|
-
return column.propertyPath
|
|
46
|
+
return "".concat(column.propertyPath, " = :").concat(parameterName);
|
|
47
47
|
})), false).join(" AND ");
|
|
48
48
|
})), false));
|
|
49
49
|
});
|
|
@@ -73,11 +73,11 @@ var RelationRemover = /** @class */ (function () {
|
|
|
73
73
|
return __spreadArray(__spreadArray([], __read(junctionMetadata_1.ownerColumns.map(function (column, columnIndex) {
|
|
74
74
|
var parameterName = "firstValue_" + firstColumnValIndex + "_" + secondColumnValIndex + "_" + columnIndex;
|
|
75
75
|
parameters_2[parameterName] = firstColumnVal instanceof Object ? column.referencedColumn.getEntityValue(firstColumnVal) : firstColumnVal;
|
|
76
|
-
return column.databaseName
|
|
76
|
+
return "".concat(column.databaseName, " = :").concat(parameterName);
|
|
77
77
|
})), false), __read(junctionMetadata_1.inverseColumns.map(function (column, columnIndex) {
|
|
78
78
|
var parameterName = "secondValue_" + firstColumnValIndex + "_" + secondColumnValIndex + "_" + columnIndex;
|
|
79
79
|
parameters_2[parameterName] = secondColumnVal instanceof Object ? column.referencedColumn.getEntityValue(secondColumnVal) : secondColumnVal;
|
|
80
|
-
return column.databaseName
|
|
80
|
+
return "".concat(column.databaseName, " = :").concat(parameterName);
|
|
81
81
|
})), false).join(" AND ");
|
|
82
82
|
})), false));
|
|
83
83
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/query-builder/RelationRemover.ts"],"names":[],"mappings":";AAIA;;;;GAIG;AACH;IAEI,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,yBAAsB,YAA+B,EAC/B,aAAiC;QADjC,iBAAY,GAAZ,YAAY,CAAmB;QAC/B,kBAAa,GAAb,aAAa,CAAoB;IACvD,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACG,gCAAM,GAAZ,UAAa,KAAgB;;;;;;wBACnB,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;6BAEjD,QAAQ,CAAC,WAAW,EAApB,wBAAoB;wBAMd,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;wBAC7F,WAAS,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;wBAEhD,cAA2B,EAAE,CAAC;wBACpC,QAAQ,CAAC,eAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,MAAM;4BAChD,WAAS,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;wBAC1C,CAAC,CAAC,CAAC;wBAEG,eAA4B,EAAE,CAAC;wBAC/B,eAAuB,EAAE,CAAC;wBAChC,GAAG,CAAC,OAAO,CAAC,UAAC,EAAE,EAAE,OAAO;4BACpB,YAAU,CAAC,IAAI,OAAf,YAAU,2BAAS,QAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,UAAU;gCAC5C,OAAO,uCACA,QAAQ,CAAC,eAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,UAAC,MAAM,EAAE,WAAW;oCAC7D,IAAM,aAAa,GAAG,aAAa,GAAG,OAAO,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,CAAC;oCACrF,YAAU,CAAC,aAAa,CAAC,GAAG,EAAE,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oCACpG,
|
|
1
|
+
{"version":3,"sources":["../browser/src/query-builder/RelationRemover.ts"],"names":[],"mappings":"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","file":"RelationRemover.js","sourcesContent":["import {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\n\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nexport class RelationRemover {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected queryBuilder: QueryBuilder<any>,\n protected expressionMap: QueryExpressionMap) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs remove operation on a relation.\n */\n async remove(value: any|any[]): Promise<void> {\n const relation = this.expressionMap.relationMetadata;\n\n if (relation.isOneToMany) {\n\n // if (this.expressionMap.of instanceof Array)\n // throw new TypeORMError(`You cannot update relations of multiple entities with the same related object. Provide a single entity into .of method.`);\n\n // DELETE FROM post WHERE post.categoryId = of AND post.id = id\n const ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n const values = Array.isArray(value) ? value : [value];\n\n const updateSet: ObjectLiteral = {};\n relation.inverseRelation!.joinColumns.forEach(column => {\n updateSet[column.propertyName] = null;\n });\n\n const parameters: ObjectLiteral = {};\n const conditions: string[] = [];\n ofs.forEach((of, ofIndex) => {\n conditions.push(...values.map((value, valueIndex) => {\n return [\n ...relation.inverseRelation!.joinColumns.map((column, columnIndex) => {\n const parameterName = \"joinColumn_\" + ofIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters[parameterName] = of instanceof Object ? column.referencedColumn!.getEntityValue(of) : of;\n return `${column.propertyPath} = :${parameterName}`;\n }),\n ...relation.inverseRelation!.entityMetadata.primaryColumns.map((column, columnIndex) => {\n const parameterName = \"primaryColumn_\" + valueIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters[parameterName] = value instanceof Object ? column.getEntityValue(value) : value;\n return `${column.propertyPath} = :${parameterName}`;\n })\n ].join(\" AND \");\n }));\n });\n const condition = conditions.map(str => \"(\" + str + \")\").join(\" OR \");\n if (!condition) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .where(condition)\n .setParameters(parameters)\n .execute();\n\n } else { // many to many\n\n const junctionMetadata = relation.junctionEntityMetadata!;\n const ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n const values = Array.isArray(value) ? value : [value];\n const firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n const secondColumnValues = relation.isManyToManyOwner ? values : ofs;\n\n const parameters: ObjectLiteral = {};\n const conditions: string[] = [];\n firstColumnValues.forEach((firstColumnVal, firstColumnValIndex) => {\n conditions.push(...secondColumnValues.map((secondColumnVal, secondColumnValIndex) => {\n return [\n ...junctionMetadata.ownerColumns.map((column, columnIndex) => {\n const parameterName = \"firstValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters[parameterName] = firstColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(firstColumnVal) : firstColumnVal;\n return `${column.databaseName} = :${parameterName}`;\n }),\n ...junctionMetadata.inverseColumns.map((column, columnIndex) => {\n const parameterName = \"secondValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters[parameterName] = secondColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(secondColumnVal) : secondColumnVal;\n return `${column.databaseName} = :${parameterName}`;\n })\n ].join(\" AND \");\n }));\n });\n const condition = conditions.map(str => \"(\" + str + \")\").join(\" OR \");\n\n await this.queryBuilder\n .createQueryBuilder()\n .delete()\n .from(junctionMetadata.tableName)\n .where(condition)\n .setParameters(parameters)\n .execute();\n }\n }\n\n}\n"],"sourceRoot":".."}
|
|
@@ -59,7 +59,7 @@ var RelationUpdater = /** @class */ (function () {
|
|
|
59
59
|
relation.inverseRelation.joinColumns.map(function (column, columnIndex) {
|
|
60
60
|
var parameterName = "joinColumn_" + ofIndex + "_" + columnIndex;
|
|
61
61
|
parameters_1[parameterName] = of instanceof Object ? column.referencedColumn.getEntityValue(of) : of;
|
|
62
|
-
conditions_1.push(column.propertyPath
|
|
62
|
+
conditions_1.push("".concat(column.propertyPath, " = :").concat(parameterName));
|
|
63
63
|
});
|
|
64
64
|
});
|
|
65
65
|
condition = conditions_1.map(function (str) { return "(" + str + ")"; }).join(" OR ");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/query-builder/RelationUpdater.ts"],"names":[],"mappings":"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","file":"RelationUpdater.js","sourcesContent":["import {SapDriver} from \"../driver/sap/SapDriver\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nexport class RelationUpdater {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected queryBuilder: QueryBuilder<any>,\n protected expressionMap: QueryExpressionMap) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs set or add operation on a relation.\n */\n async update(value: any|any[]): Promise<void> {\n const relation = this.expressionMap.relationMetadata;\n\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n\n const updateSet = relation.joinColumns.reduce((updateSet, joinColumn) => {\n const relationValue = value instanceof Object ? joinColumn.referencedColumn!.getEntityValue(value) : value;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {} as any);\n\n if (!this.expressionMap.of || (Array.isArray(this.expressionMap.of) && !this.expressionMap.of.length)) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.entityMetadata.target)\n .set(updateSet)\n .whereInIds(this.expressionMap.of)\n .execute();\n\n } else if ((relation.isOneToOneNotOwner || relation.isOneToMany) && value === null) { // we handle null a bit different way\n\n const updateSet: ObjectLiteral = {};\n relation.inverseRelation!.joinColumns.forEach(column => {\n updateSet[column.propertyName] = null;\n });\n\n const ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n const parameters: ObjectLiteral = {};\n const conditions: string[] = [];\n ofs.forEach((of, ofIndex) => {\n relation.inverseRelation!.joinColumns.map((column, columnIndex) => {\n const parameterName = \"joinColumn_\" + ofIndex + \"_\" + columnIndex;\n parameters[parameterName] = of instanceof Object ? column.referencedColumn!.getEntityValue(of) : of;\n conditions.push(`${column.propertyPath} = :${parameterName}`);\n });\n });\n const condition = conditions.map(str => \"(\" + str + \")\").join(\" OR \");\n if (!condition) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .where(condition)\n .setParameters(parameters)\n .execute();\n\n } else if (relation.isOneToOneNotOwner || relation.isOneToMany) {\n\n if (Array.isArray(this.expressionMap.of))\n throw new TypeORMError(`You cannot update relations of multiple entities with the same related object. Provide a single entity into .of method.`);\n\n const of = this.expressionMap.of;\n const updateSet = relation.inverseRelation!.joinColumns.reduce((updateSet, joinColumn) => {\n const relationValue = of instanceof Object ? joinColumn.referencedColumn!.getEntityValue(of) : of;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {} as any);\n\n if (!value || (Array.isArray(value) && !value.length)) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .whereInIds(value)\n .execute();\n\n } else { // many to many\n const junctionMetadata = relation.junctionEntityMetadata!;\n const ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n const values = Array.isArray(value) ? value : [value];\n const firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n const secondColumnValues = relation.isManyToManyOwner ? values : ofs;\n\n const bulkInserted: ObjectLiteral[] = [];\n firstColumnValues.forEach(firstColumnVal => {\n secondColumnValues.forEach(secondColumnVal => {\n const inserted: ObjectLiteral = {};\n junctionMetadata.ownerColumns.forEach(column => {\n inserted[column.databaseName] = firstColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(firstColumnVal) : firstColumnVal;\n });\n junctionMetadata.inverseColumns.forEach(column => {\n inserted[column.databaseName] = secondColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(secondColumnVal) : secondColumnVal;\n });\n bulkInserted.push(inserted);\n });\n });\n\n if (!bulkInserted.length) return;\n\n if (this.queryBuilder.connection.driver instanceof OracleDriver || this.queryBuilder.connection.driver instanceof SapDriver) {\n await Promise.all(bulkInserted.map(value => {\n return this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata.tableName)\n .values(value)\n .execute();\n }));\n } else {\n await this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata.tableName)\n .values(bulkInserted)\n .execute();\n }\n }\n }\n\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/query-builder/RelationUpdater.ts"],"names":[],"mappings":"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","file":"RelationUpdater.js","sourcesContent":["import {SapDriver} from \"../driver/sap/SapDriver\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nexport class RelationUpdater {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected queryBuilder: QueryBuilder<any>,\n protected expressionMap: QueryExpressionMap) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs set or add operation on a relation.\n */\n async update(value: any|any[]): Promise<void> {\n const relation = this.expressionMap.relationMetadata;\n\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n\n const updateSet = relation.joinColumns.reduce((updateSet, joinColumn) => {\n const relationValue = value instanceof Object ? joinColumn.referencedColumn!.getEntityValue(value) : value;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {} as any);\n\n if (!this.expressionMap.of || (Array.isArray(this.expressionMap.of) && !this.expressionMap.of.length)) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.entityMetadata.target)\n .set(updateSet)\n .whereInIds(this.expressionMap.of)\n .execute();\n\n } else if ((relation.isOneToOneNotOwner || relation.isOneToMany) && value === null) { // we handle null a bit different way\n\n const updateSet: ObjectLiteral = {};\n relation.inverseRelation!.joinColumns.forEach(column => {\n updateSet[column.propertyName] = null;\n });\n\n const ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n const parameters: ObjectLiteral = {};\n const conditions: string[] = [];\n ofs.forEach((of, ofIndex) => {\n relation.inverseRelation!.joinColumns.map((column, columnIndex) => {\n const parameterName = \"joinColumn_\" + ofIndex + \"_\" + columnIndex;\n parameters[parameterName] = of instanceof Object ? column.referencedColumn!.getEntityValue(of) : of;\n conditions.push(`${column.propertyPath} = :${parameterName}`);\n });\n });\n const condition = conditions.map(str => \"(\" + str + \")\").join(\" OR \");\n if (!condition) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .where(condition)\n .setParameters(parameters)\n .execute();\n\n } else if (relation.isOneToOneNotOwner || relation.isOneToMany) {\n\n if (Array.isArray(this.expressionMap.of))\n throw new TypeORMError(`You cannot update relations of multiple entities with the same related object. Provide a single entity into .of method.`);\n\n const of = this.expressionMap.of;\n const updateSet = relation.inverseRelation!.joinColumns.reduce((updateSet, joinColumn) => {\n const relationValue = of instanceof Object ? joinColumn.referencedColumn!.getEntityValue(of) : of;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {} as any);\n\n if (!value || (Array.isArray(value) && !value.length)) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .whereInIds(value)\n .execute();\n\n } else { // many to many\n const junctionMetadata = relation.junctionEntityMetadata!;\n const ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n const values = Array.isArray(value) ? value : [value];\n const firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n const secondColumnValues = relation.isManyToManyOwner ? values : ofs;\n\n const bulkInserted: ObjectLiteral[] = [];\n firstColumnValues.forEach(firstColumnVal => {\n secondColumnValues.forEach(secondColumnVal => {\n const inserted: ObjectLiteral = {};\n junctionMetadata.ownerColumns.forEach(column => {\n inserted[column.databaseName] = firstColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(firstColumnVal) : firstColumnVal;\n });\n junctionMetadata.inverseColumns.forEach(column => {\n inserted[column.databaseName] = secondColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(secondColumnVal) : secondColumnVal;\n });\n bulkInserted.push(inserted);\n });\n });\n\n if (!bulkInserted.length) return;\n\n if (this.queryBuilder.connection.driver instanceof OracleDriver || this.queryBuilder.connection.driver instanceof SapDriver) {\n await Promise.all(bulkInserted.map(value => {\n return this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata.tableName)\n .values(value)\n .execute();\n }));\n } else {\n await this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata.tableName)\n .values(bulkInserted)\n .execute();\n }\n }\n }\n\n}\n"],"sourceRoot":".."}
|
|
@@ -818,7 +818,7 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
818
818
|
cacheId = this.expressionMap.cacheId;
|
|
819
819
|
// Creates a new cacheId for the count query, or it will retreive the above query results
|
|
820
820
|
// and count will return 0.
|
|
821
|
-
this.expressionMap.cacheId = (cacheId) ? cacheId
|
|
821
|
+
this.expressionMap.cacheId = (cacheId) ? "".concat(cacheId, "-count") : cacheId;
|
|
822
822
|
return [4 /*yield*/, this.executeCountQuery(queryRunner)];
|
|
823
823
|
case 5:
|
|
824
824
|
count = _a.sent();
|
|
@@ -952,8 +952,8 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
952
952
|
this.expressionMap.joinAttributes.push(joinAttribute);
|
|
953
953
|
if (joinAttribute.metadata) {
|
|
954
954
|
if (joinAttribute.metadata.deleteDateColumn && !this.expressionMap.withDeleted) {
|
|
955
|
-
var conditionDeleteColumn = aliasName
|
|
956
|
-
joinAttribute.condition = joinAttribute.condition ? " "
|
|
955
|
+
var conditionDeleteColumn = "".concat(aliasName, ".").concat(joinAttribute.metadata.deleteDateColumn.propertyName, " IS NULL");
|
|
956
|
+
joinAttribute.condition = joinAttribute.condition ? " ".concat(joinAttribute.condition, " AND ").concat(conditionDeleteColumn) : "".concat(conditionDeleteColumn);
|
|
957
957
|
}
|
|
958
958
|
// todo: find and set metadata right there?
|
|
959
959
|
joinAttribute.alias = this.expressionMap.createAlias({
|
|
@@ -1030,7 +1030,7 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
1030
1030
|
var useIndex = "";
|
|
1031
1031
|
if (this.expressionMap.useIndex) {
|
|
1032
1032
|
if (this.connection.driver instanceof MysqlDriver) {
|
|
1033
|
-
useIndex = " USE INDEX ("
|
|
1033
|
+
useIndex = " USE INDEX (".concat(this.expressionMap.useIndex, ")");
|
|
1034
1034
|
}
|
|
1035
1035
|
}
|
|
1036
1036
|
// create a selection query
|
|
@@ -1055,12 +1055,12 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
1055
1055
|
var select = "SELECT ";
|
|
1056
1056
|
if (maxExecutionTime > 0) {
|
|
1057
1057
|
if (driver instanceof MysqlDriver) {
|
|
1058
|
-
select += "/*+ MAX_EXECUTION_TIME("
|
|
1058
|
+
select += "/*+ MAX_EXECUTION_TIME(".concat(this.expressionMap.maxExecutionTime, ") */ ");
|
|
1059
1059
|
}
|
|
1060
1060
|
}
|
|
1061
1061
|
if (driver instanceof PostgresDriver && selectDistinctOn.length > 0) {
|
|
1062
1062
|
var selectDistinctOnMap = selectDistinctOn.map(function (on) { return _this.replacePropertyNames(on); }).join(", ");
|
|
1063
|
-
select = "SELECT DISTINCT ON ("
|
|
1063
|
+
select = "SELECT DISTINCT ON (".concat(selectDistinctOnMap, ") ");
|
|
1064
1064
|
}
|
|
1065
1065
|
else if (selectDistinct) {
|
|
1066
1066
|
select = "SELECT DISTINCT ";
|
|
@@ -1373,18 +1373,18 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
1373
1373
|
if (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) {
|
|
1374
1374
|
var useLegacy = _this.connection.driver.options.legacySpatialSupport;
|
|
1375
1375
|
var asText = useLegacy ? "AsText" : "ST_AsText";
|
|
1376
|
-
selectionPath = asText
|
|
1376
|
+
selectionPath = "".concat(asText, "(").concat(selectionPath, ")");
|
|
1377
1377
|
}
|
|
1378
1378
|
if (_this.connection.driver instanceof PostgresDriver)
|
|
1379
1379
|
// cast to JSON to trigger parsing in the driver
|
|
1380
1380
|
if (column.precision) {
|
|
1381
|
-
selectionPath = "ST_AsGeoJSON("
|
|
1381
|
+
selectionPath = "ST_AsGeoJSON(".concat(selectionPath, ", ").concat(column.precision, ")::json");
|
|
1382
1382
|
}
|
|
1383
1383
|
else {
|
|
1384
|
-
selectionPath = "ST_AsGeoJSON("
|
|
1384
|
+
selectionPath = "ST_AsGeoJSON(".concat(selectionPath, ")::json");
|
|
1385
1385
|
}
|
|
1386
1386
|
if (_this.connection.driver instanceof SqlServerDriver)
|
|
1387
|
-
selectionPath = selectionPath
|
|
1387
|
+
selectionPath = "".concat(selectionPath, ".ToString()");
|
|
1388
1388
|
}
|
|
1389
1389
|
return {
|
|
1390
1390
|
selection: selectionPath,
|
|
@@ -1420,14 +1420,14 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
1420
1420
|
// Postgres and CockroachDB can pass multiple parameters to the `DISTINCT` function
|
|
1421
1421
|
// https://www.postgresql.org/docs/9.5/sql-select.html#SQL-DISTINCT
|
|
1422
1422
|
return "COUNT(DISTINCT(" +
|
|
1423
|
-
primaryColumns.map(function (c) { return distinctAlias
|
|
1423
|
+
primaryColumns.map(function (c) { return "".concat(distinctAlias, ".").concat(_this.escape(c.databaseName)); }).join(", ") +
|
|
1424
1424
|
"))";
|
|
1425
1425
|
}
|
|
1426
1426
|
if (this.connection.driver instanceof MysqlDriver) {
|
|
1427
1427
|
// MySQL & MariaDB can pass multiple parameters to the `DISTINCT` language construct
|
|
1428
1428
|
// https://mariadb.com/kb/en/count-distinct/
|
|
1429
1429
|
return "COUNT(DISTINCT " +
|
|
1430
|
-
primaryColumns.map(function (c) { return distinctAlias
|
|
1430
|
+
primaryColumns.map(function (c) { return "".concat(distinctAlias, ".").concat(_this.escape(c.databaseName)); }).join(", ") +
|
|
1431
1431
|
")";
|
|
1432
1432
|
}
|
|
1433
1433
|
if (this.connection.driver instanceof SqlServerDriver) {
|
|
@@ -1435,11 +1435,11 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
1435
1435
|
// distinct counting multiple columns & they don't have the same operator
|
|
1436
1436
|
// characteristic for concatenating, so we gotta use the `CONCAT` function.
|
|
1437
1437
|
// However, If it's exactly 1 column we can omit the `CONCAT` for better performance.
|
|
1438
|
-
var columnsExpression = primaryColumns.map(function (primaryColumn) { return distinctAlias
|
|
1438
|
+
var columnsExpression = primaryColumns.map(function (primaryColumn) { return "".concat(distinctAlias, ".").concat(_this.escape(primaryColumn.databaseName)); }).join(", '|;|', ");
|
|
1439
1439
|
if (primaryColumns.length === 1) {
|
|
1440
|
-
return "COUNT(DISTINCT("
|
|
1440
|
+
return "COUNT(DISTINCT(".concat(columnsExpression, "))");
|
|
1441
1441
|
}
|
|
1442
|
-
return "COUNT(DISTINCT(CONCAT("
|
|
1442
|
+
return "COUNT(DISTINCT(CONCAT(".concat(columnsExpression, ")))");
|
|
1443
1443
|
}
|
|
1444
1444
|
// If all else fails, fall back to a `COUNT` and `DISTINCT` across all the primary columns concatenated.
|
|
1445
1445
|
// Per the SQL spec, this is the canonical string concatenation mechanism which is most
|
|
@@ -1447,7 +1447,7 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
1447
1447
|
// Please note, if there is only one primary column that the concatenation does not occur in this
|
|
1448
1448
|
// query and the query is a standard `COUNT DISTINCT` in that case.
|
|
1449
1449
|
return "COUNT(DISTINCT(" +
|
|
1450
|
-
primaryColumns.map(function (c) { return distinctAlias
|
|
1450
|
+
primaryColumns.map(function (c) { return "".concat(distinctAlias, ".").concat(_this.escape(c.databaseName)); }).join(" || '|;|' || ") +
|
|
1451
1451
|
"))";
|
|
1452
1452
|
};
|
|
1453
1453
|
SelectQueryBuilder.prototype.executeCountQuery = function (queryRunner) {
|
|
@@ -1512,12 +1512,12 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
1512
1512
|
if (!orderBys_1[columnAlias]) // make sure we aren't overriding user-defined order in inverse direction
|
|
1513
1513
|
orderBys_1[columnAlias] = "ASC";
|
|
1514
1514
|
var alias = DriverUtils.buildAlias(_this.connection.driver, "ids_" + mainAliasName_1, primaryColumn.databaseName);
|
|
1515
|
-
return distinctAlias
|
|
1515
|
+
return "".concat(distinctAlias, ".").concat(columnAlias, " as \"").concat(alias, "\"");
|
|
1516
1516
|
});
|
|
1517
1517
|
return [4 /*yield*/, new SelectQueryBuilder(this.connection, queryRunner)
|
|
1518
|
-
.select("DISTINCT "
|
|
1518
|
+
.select("DISTINCT ".concat(querySelects.join(", ")))
|
|
1519
1519
|
.addSelect(selects)
|
|
1520
|
-
.from("("
|
|
1520
|
+
.from("(".concat(this.clone().orderBy().getQuery(), ")"), "distinctAlias")
|
|
1521
1521
|
.offset(this.expressionMap.skip)
|
|
1522
1522
|
.limit(this.expressionMap.take)
|
|
1523
1523
|
.orderBy(orderBys_1)
|
|
@@ -1533,9 +1533,9 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
1533
1533
|
if (metadata_1.hasMultiplePrimaryKeys) {
|
|
1534
1534
|
condition = rawResults.map(function (result, index) {
|
|
1535
1535
|
return metadata_1.primaryColumns.map(function (primaryColumn) {
|
|
1536
|
-
var paramKey = "orm_distinct_ids_"
|
|
1537
|
-
parameters_1[paramKey] = result["ids_"
|
|
1538
|
-
return mainAliasName_1
|
|
1536
|
+
var paramKey = "orm_distinct_ids_".concat(index, "_").concat(primaryColumn.databaseName);
|
|
1537
|
+
parameters_1[paramKey] = result["ids_".concat(mainAliasName_1, "_").concat(primaryColumn.databaseName)];
|
|
1538
|
+
return "".concat(mainAliasName_1, ".").concat(primaryColumn.propertyPath, "=:").concat(paramKey);
|
|
1539
1539
|
}).join(" AND ");
|
|
1540
1540
|
}).join(" OR ");
|
|
1541
1541
|
}
|
|
@@ -1545,7 +1545,7 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
1545
1545
|
areAllNumbers = ids.every(function (id) { return typeof id === "number"; });
|
|
1546
1546
|
if (areAllNumbers) {
|
|
1547
1547
|
// fixes #190. if all numbers then its safe to perform query without parameter
|
|
1548
|
-
condition = mainAliasName_1
|
|
1548
|
+
condition = "".concat(mainAliasName_1, ".").concat(metadata_1.primaryColumns[0].propertyPath, " IN (").concat(ids.join(", "), ")");
|
|
1549
1549
|
}
|
|
1550
1550
|
else {
|
|
1551
1551
|
parameters_1["orm_distinct_ids"] = ids;
|