typeorm 0.2.42-dev.f3e2b0e → 0.2.43-dev.a5493fb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/browser/cache/RedisQueryResultCache.js +40 -35
- package/browser/cache/RedisQueryResultCache.js.map +1 -1
- package/browser/common/DeepPartial.d.ts +3 -3
- package/browser/common/DeepPartial.js.map +1 -1
- package/browser/common/RelationType.d.ts +14 -0
- package/browser/common/RelationType.js +3 -0
- package/browser/common/RelationType.js.map +1 -0
- package/browser/connection/BaseConnectionOptions.d.ts +5 -0
- package/browser/connection/BaseConnectionOptions.js.map +1 -1
- package/browser/connection/Connection.d.ts +7 -3
- package/browser/connection/Connection.js +80 -55
- package/browser/connection/Connection.js.map +1 -1
- package/browser/connection/ConnectionMetadataBuilder.d.ts +3 -3
- package/browser/connection/ConnectionMetadataBuilder.js +54 -22
- package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
- package/browser/connection/ConnectionOptionsReader.js +36 -29
- package/browser/connection/ConnectionOptionsReader.js.map +1 -1
- package/browser/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
- package/browser/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
- package/browser/decorator/Unique.d.ts +5 -4
- package/browser/decorator/Unique.js +7 -3
- package/browser/decorator/Unique.js.map +1 -1
- package/browser/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
- package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
- package/browser/decorator/listeners/AfterRecover.d.ts +4 -0
- package/browser/decorator/listeners/AfterRecover.js +16 -0
- package/browser/decorator/listeners/AfterRecover.js.map +1 -0
- package/browser/decorator/listeners/AfterSoftRemove.d.ts +4 -0
- package/browser/decorator/listeners/AfterSoftRemove.js +16 -0
- package/browser/decorator/listeners/AfterSoftRemove.js.map +1 -0
- package/browser/decorator/listeners/BeforeRecover.d.ts +4 -0
- package/browser/decorator/listeners/BeforeRecover.js +16 -0
- package/browser/decorator/listeners/BeforeRecover.js.map +1 -0
- package/browser/decorator/listeners/BeforeSoftRemove.d.ts +4 -0
- package/browser/decorator/listeners/BeforeSoftRemove.js +16 -0
- package/browser/decorator/listeners/BeforeSoftRemove.js.map +1 -0
- package/browser/decorator/options/ColumnOptions.d.ts +4 -0
- package/browser/decorator/options/ColumnOptions.js.map +1 -1
- package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
- package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +3 -0
- package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
- package/browser/decorator/options/RelationOptions.d.ts +1 -1
- package/browser/decorator/options/RelationOptions.js.map +1 -1
- package/browser/decorator/options/UniqueOptions.d.ts +10 -0
- package/browser/decorator/options/UniqueOptions.js +3 -0
- package/browser/decorator/options/UniqueOptions.js.map +1 -0
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +2 -2
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +94 -9
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +64 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
- package/browser/driver/capacitor/CapacitorQueryRunner.js +30 -0
- package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/cordova/CordovaQueryRunner.d.ts +8 -0
- package/browser/driver/cordova/CordovaQueryRunner.js +30 -0
- package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/browser/driver/expo/ExpoQueryRunner.d.ts +8 -0
- package/browser/driver/expo/ExpoQueryRunner.js +30 -0
- package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/browser/driver/mongodb/MongoConnectionOptions.d.ts +1 -1
- package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
- package/browser/driver/mongodb/MongoQueryRunner.d.ts +8 -0
- package/browser/driver/mongodb/MongoQueryRunner.js +20 -0
- package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.js +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
- package/browser/driver/nativescript/NativescriptQueryRunner.js +30 -0
- package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleQueryRunner.js +1 -1
- package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +52 -19
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
- package/browser/driver/react-native/ReactNativeQueryRunner.js +30 -0
- package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.js +1 -1
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/driver/sqlite/SqliteDriver.d.ts +13 -0
- package/browser/driver/sqlite/SqliteDriver.js +95 -11
- package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
- package/browser/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
- package/browser/driver/sqlite/SqliteQueryRunner.js +30 -0
- package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +119 -58
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
- package/browser/driver/sqljs/SqljsQueryRunner.js +30 -0
- package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/browser/entity-manager/EntityManager.d.ts +2 -2
- package/browser/entity-manager/EntityManager.js +2 -12
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/entity-manager/MongoEntityManager.d.ts +2 -0
- package/browser/entity-manager/MongoEntityManager.js +37 -5
- package/browser/entity-manager/MongoEntityManager.js.map +1 -1
- package/browser/entity-schema/EntitySchemaOptions.d.ts +6 -0
- package/browser/entity-schema/EntitySchemaOptions.js.map +1 -1
- package/browser/entity-schema/EntitySchemaRelationOptions.d.ts +7 -1
- package/browser/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
- package/browser/entity-schema/EntitySchemaTransformer.js +4 -1
- package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/browser/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
- package/browser/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
- package/browser/find-options/FindOneOptions.d.ts +6 -0
- package/browser/find-options/FindOneOptions.js.map +1 -1
- package/browser/find-options/FindOptionsUtils.js +4 -0
- package/browser/find-options/FindOptionsUtils.js.map +1 -1
- package/browser/find-options/operator/Like.d.ts +1 -1
- package/browser/find-options/operator/Like.js +1 -1
- package/browser/find-options/operator/Like.js.map +1 -1
- package/browser/find-options/operator/Not.d.ts +1 -1
- package/browser/find-options/operator/Not.js +1 -1
- package/browser/find-options/operator/Not.js.map +1 -1
- package/browser/globals.js +34 -7
- package/browser/globals.js.map +1 -1
- package/browser/index.d.ts +6 -0
- package/browser/index.js +6 -0
- package/browser/index.js.map +1 -1
- package/browser/metadata/ColumnMetadata.d.ts +4 -0
- package/browser/metadata/ColumnMetadata.js +2 -0
- package/browser/metadata/ColumnMetadata.js.map +1 -1
- package/browser/metadata/EntityMetadata.d.ts +16 -0
- package/browser/metadata/EntityMetadata.js +16 -0
- package/browser/metadata/EntityMetadata.js.map +1 -1
- package/browser/metadata/RelationMetadata.d.ts +1 -1
- package/browser/metadata/RelationMetadata.js.map +1 -1
- package/browser/metadata/UniqueMetadata.d.ts +5 -0
- package/browser/metadata/UniqueMetadata.js +1 -0
- package/browser/metadata/UniqueMetadata.js.map +1 -1
- package/browser/metadata/types/EventListenerTypes.d.ts +5 -1
- package/browser/metadata/types/EventListenerTypes.js +4 -0
- package/browser/metadata/types/EventListenerTypes.js.map +1 -1
- package/browser/metadata-args/UniqueMetadataArgs.d.ts +5 -0
- package/browser/metadata-args/UniqueMetadataArgs.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataBuilder.js +4 -0
- package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js +2 -1
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/browser/migration/MigrationExecutor.js +38 -26
- package/browser/migration/MigrationExecutor.js.map +1 -1
- package/browser/persistence/SubjectExecutor.d.ts +4 -2
- package/browser/persistence/SubjectExecutor.js +105 -13
- package/browser/persistence/SubjectExecutor.js.map +1 -1
- package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
- package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
- package/browser/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
- package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/browser/platform/PlatformTools.d.ts +1 -0
- package/browser/platform/PlatformTools.js +5 -0
- package/browser/platform/PlatformTools.js.map +1 -1
- package/browser/query-builder/DeleteQueryBuilder.d.ts +4 -2
- package/browser/query-builder/DeleteQueryBuilder.js +4 -2
- package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/InsertQueryBuilder.d.ts +1 -1
- package/browser/query-builder/InsertQueryBuilder.js +12 -3
- package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
- package/browser/query-builder/NotBrackets.d.ts +7 -0
- package/browser/query-builder/NotBrackets.js +16 -0
- package/browser/query-builder/NotBrackets.js.map +1 -0
- package/browser/query-builder/QueryBuilder.d.ts +3 -2
- package/browser/query-builder/QueryBuilder.js +2 -1
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/RelationLoader.js +11 -6
- package/browser/query-builder/RelationLoader.js.map +1 -1
- package/browser/query-builder/RelationQueryBuilder.d.ts +1 -1
- package/browser/query-builder/RelationQueryBuilder.js +1 -1
- package/browser/query-builder/RelationQueryBuilder.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.d.ts +10 -1
- package/browser/query-builder/SelectQueryBuilder.js +28 -21
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.js +45 -31
- package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.d.ts +4 -2
- package/browser/query-builder/UpdateQueryBuilder.js +11 -6
- package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/browser/query-builder/WhereExpressionBuilder.d.ts +3 -1
- package/browser/query-builder/WhereExpressionBuilder.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdLoader.js +9 -9
- package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/browser/query-runner/BaseQueryRunner.d.ts +10 -2
- package/browser/query-runner/BaseQueryRunner.js +23 -3
- package/browser/query-runner/BaseQueryRunner.js.map +1 -1
- package/browser/query-runner/QueryRunner.d.ts +8 -0
- package/browser/query-runner/QueryRunner.js.map +1 -1
- package/browser/repository/AbstractRepository.d.ts +2 -2
- package/browser/repository/AbstractRepository.js +2 -2
- package/browser/repository/AbstractRepository.js.map +1 -1
- package/browser/repository/BaseEntity.d.ts +1 -1
- package/browser/repository/BaseEntity.js +1 -1
- package/browser/repository/BaseEntity.js.map +1 -1
- package/browser/repository/Repository.d.ts +1 -1
- package/browser/repository/Repository.js +1 -1
- package/browser/repository/Repository.js.map +1 -1
- package/browser/repository/TreeRepository.js +3 -2
- package/browser/repository/TreeRepository.js.map +1 -1
- package/browser/schema-builder/RdbmsSchemaBuilder.js +37 -31
- package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/browser/schema-builder/options/TableColumnOptions.d.ts +4 -0
- package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
- package/browser/schema-builder/options/TableUniqueOptions.d.ts +5 -0
- package/browser/schema-builder/options/TableUniqueOptions.js.map +1 -1
- package/browser/schema-builder/table/TableColumn.d.ts +4 -0
- package/browser/schema-builder/table/TableColumn.js +2 -0
- package/browser/schema-builder/table/TableColumn.js.map +1 -1
- package/browser/schema-builder/table/TableUnique.d.ts +5 -0
- package/browser/schema-builder/table/TableUnique.js +5 -2
- package/browser/schema-builder/table/TableUnique.js.map +1 -1
- package/browser/schema-builder/util/TableUtils.js +1 -0
- package/browser/schema-builder/util/TableUtils.js.map +1 -1
- package/browser/subscriber/Broadcaster.d.ts +40 -0
- package/browser/subscriber/Broadcaster.js +191 -31
- package/browser/subscriber/Broadcaster.js.map +1 -1
- package/browser/subscriber/EntitySubscriberInterface.d.ts +18 -0
- package/browser/subscriber/EntitySubscriberInterface.js.map +1 -1
- package/browser/subscriber/event/RecoverEvent.d.ts +6 -0
- package/browser/subscriber/event/RecoverEvent.js +3 -0
- package/browser/subscriber/event/RecoverEvent.js.map +1 -0
- package/browser/subscriber/event/SoftRemoveEvent.d.ts +6 -0
- package/browser/subscriber/event/SoftRemoveEvent.js +3 -0
- package/browser/subscriber/event/SoftRemoveEvent.js.map +1 -0
- package/browser/util/DirectoryExportedClassesLoader.d.ts +1 -1
- package/browser/util/DirectoryExportedClassesLoader.js +55 -31
- package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/browser/util/ImportUtils.d.ts +1 -0
- package/browser/util/ImportUtils.js +90 -0
- package/browser/util/ImportUtils.js.map +1 -0
- package/browser/util/PathUtils.d.ts +10 -0
- package/browser/util/PathUtils.js +28 -0
- package/browser/util/PathUtils.js.map +1 -0
- package/browser/util/RandomGenerator.d.ts +0 -4
- package/browser/util/RandomGenerator.js +0 -9
- package/browser/util/RandomGenerator.js.map +1 -1
- package/cache/RedisQueryResultCache.js +39 -34
- package/cache/RedisQueryResultCache.js.map +1 -1
- package/commands/CacheClearCommand.js +3 -3
- package/commands/CacheClearCommand.js.map +1 -1
- package/commands/CommandUtils.d.ts +4 -0
- package/commands/CommandUtils.js +10 -0
- package/commands/CommandUtils.js.map +1 -1
- package/commands/EntityCreateCommand.js +2 -2
- package/commands/EntityCreateCommand.js.map +1 -1
- package/commands/InitCommand.d.ts +9 -7
- package/commands/InitCommand.js +74 -45
- package/commands/InitCommand.js.map +1 -1
- package/commands/MigrationCreateCommand.d.ts +2 -0
- package/commands/MigrationCreateCommand.js +9 -3
- package/commands/MigrationCreateCommand.js.map +1 -1
- package/commands/MigrationGenerateCommand.d.ts +2 -0
- package/commands/MigrationGenerateCommand.js +9 -3
- package/commands/MigrationGenerateCommand.js.map +1 -1
- package/commands/MigrationRevertCommand.js +2 -3
- package/commands/MigrationRevertCommand.js.map +1 -1
- package/commands/MigrationRunCommand.js +2 -3
- package/commands/MigrationRunCommand.js.map +1 -1
- package/commands/MigrationShowCommand.js +5 -7
- package/commands/MigrationShowCommand.js.map +1 -1
- package/commands/QueryCommand.d.ts +1 -1
- package/commands/QueryCommand.js +2 -3
- package/commands/QueryCommand.js.map +1 -1
- package/commands/SchemaDropCommand.js +2 -2
- package/commands/SchemaDropCommand.js.map +1 -1
- package/commands/SchemaLogCommand.js +2 -2
- package/commands/SchemaLogCommand.js.map +1 -1
- package/commands/SchemaSyncCommand.js +2 -2
- package/commands/SchemaSyncCommand.js.map +1 -1
- package/commands/SubscriberCreateCommand.js +3 -3
- package/commands/SubscriberCreateCommand.js.map +1 -1
- package/common/DeepPartial.d.ts +3 -3
- package/common/DeepPartial.js.map +1 -1
- package/common/RelationType.d.ts +14 -0
- package/common/RelationType.js +4 -0
- package/common/RelationType.js.map +1 -0
- package/connection/BaseConnectionOptions.d.ts +5 -0
- package/connection/BaseConnectionOptions.js.map +1 -1
- package/connection/Connection.d.ts +7 -3
- package/connection/Connection.js +80 -55
- package/connection/Connection.js.map +1 -1
- package/connection/ConnectionMetadataBuilder.d.ts +3 -3
- package/connection/ConnectionMetadataBuilder.js +53 -21
- package/connection/ConnectionMetadataBuilder.js.map +1 -1
- package/connection/ConnectionOptionsReader.js +35 -28
- package/connection/ConnectionOptionsReader.js.map +1 -1
- package/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
- package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
- package/decorator/Unique.d.ts +5 -4
- package/decorator/Unique.js +7 -3
- package/decorator/Unique.js.map +1 -1
- package/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
- package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
- package/decorator/listeners/AfterRecover.d.ts +4 -0
- package/decorator/listeners/AfterRecover.js +20 -0
- package/decorator/listeners/AfterRecover.js.map +1 -0
- package/decorator/listeners/AfterSoftRemove.d.ts +4 -0
- package/decorator/listeners/AfterSoftRemove.js +20 -0
- package/decorator/listeners/AfterSoftRemove.js.map +1 -0
- package/decorator/listeners/BeforeRecover.d.ts +4 -0
- package/decorator/listeners/BeforeRecover.js +20 -0
- package/decorator/listeners/BeforeRecover.js.map +1 -0
- package/decorator/listeners/BeforeSoftRemove.d.ts +4 -0
- package/decorator/listeners/BeforeSoftRemove.js +20 -0
- package/decorator/listeners/BeforeSoftRemove.js.map +1 -0
- package/decorator/options/ColumnOptions.d.ts +4 -0
- package/decorator/options/ColumnOptions.js.map +1 -1
- package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
- package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +4 -0
- package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
- package/decorator/options/RelationOptions.d.ts +1 -1
- package/decorator/options/RelationOptions.js.map +1 -1
- package/decorator/options/UniqueOptions.d.ts +10 -0
- package/decorator/options/UniqueOptions.js +4 -0
- package/decorator/options/UniqueOptions.js.map +1 -0
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +2 -2
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.js +93 -8
- package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +63 -0
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
- package/driver/capacitor/CapacitorQueryRunner.js +30 -0
- package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/cordova/CordovaQueryRunner.d.ts +8 -0
- package/driver/cordova/CordovaQueryRunner.js +30 -0
- package/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.d.ts +8 -0
- package/driver/expo/ExpoQueryRunner.js +30 -0
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/mongodb/MongoConnectionOptions.d.ts +1 -1
- package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
- package/driver/mongodb/MongoQueryRunner.d.ts +8 -0
- package/driver/mongodb/MongoQueryRunner.js +20 -0
- package/driver/mongodb/MongoQueryRunner.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.js +1 -1
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
- package/driver/nativescript/NativescriptQueryRunner.js +30 -0
- package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/driver/oracle/OracleQueryRunner.js +1 -1
- package/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.js +52 -19
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
- package/driver/react-native/ReactNativeQueryRunner.js +30 -0
- package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/driver/sap/SapQueryRunner.js +1 -1
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/driver/sqlite/SqliteDriver.d.ts +13 -0
- package/driver/sqlite/SqliteDriver.js +94 -10
- package/driver/sqlite/SqliteDriver.js.map +1 -1
- package/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
- package/driver/sqlite/SqliteQueryRunner.js +30 -0
- package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +119 -58
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
- package/driver/sqljs/SqljsQueryRunner.js +30 -0
- package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/entity-manager/EntityManager.d.ts +2 -2
- package/entity-manager/EntityManager.js +2 -12
- package/entity-manager/EntityManager.js.map +1 -1
- package/entity-manager/MongoEntityManager.d.ts +2 -0
- package/entity-manager/MongoEntityManager.js +37 -5
- package/entity-manager/MongoEntityManager.js.map +1 -1
- package/entity-schema/EntitySchemaOptions.d.ts +6 -0
- package/entity-schema/EntitySchemaOptions.js.map +1 -1
- package/entity-schema/EntitySchemaRelationOptions.d.ts +7 -1
- package/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
- package/entity-schema/EntitySchemaTransformer.js +4 -1
- package/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
- package/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
- package/find-options/FindOneOptions.d.ts +6 -0
- package/find-options/FindOneOptions.js.map +1 -1
- package/find-options/FindOptionsUtils.js +4 -0
- package/find-options/FindOptionsUtils.js.map +1 -1
- package/find-options/operator/Like.d.ts +1 -1
- package/find-options/operator/Like.js +1 -1
- package/find-options/operator/Like.js.map +1 -1
- package/find-options/operator/Not.d.ts +1 -1
- package/find-options/operator/Not.js +1 -1
- package/find-options/operator/Not.js.map +1 -1
- package/globals.js +33 -6
- package/globals.js.map +1 -1
- package/index.d.ts +6 -0
- package/index.js +8 -1
- package/index.js.map +1 -1
- package/index.mjs +360 -0
- package/metadata/ColumnMetadata.d.ts +4 -0
- package/metadata/ColumnMetadata.js +2 -0
- package/metadata/ColumnMetadata.js.map +1 -1
- package/metadata/EntityMetadata.d.ts +16 -0
- package/metadata/EntityMetadata.js +16 -0
- package/metadata/EntityMetadata.js.map +1 -1
- package/metadata/RelationMetadata.d.ts +1 -1
- package/metadata/RelationMetadata.js.map +1 -1
- package/metadata/UniqueMetadata.d.ts +5 -0
- package/metadata/UniqueMetadata.js +1 -0
- package/metadata/UniqueMetadata.js.map +1 -1
- package/metadata/types/EventListenerTypes.d.ts +5 -1
- package/metadata/types/EventListenerTypes.js +4 -0
- package/metadata/types/EventListenerTypes.js.map +1 -1
- package/metadata-args/UniqueMetadataArgs.d.ts +5 -0
- package/metadata-args/UniqueMetadataArgs.js.map +1 -1
- package/metadata-builder/EntityMetadataBuilder.js +4 -0
- package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js +2 -1
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/migration/MigrationExecutor.js +38 -26
- package/migration/MigrationExecutor.js.map +1 -1
- package/package.json +1 -1
- package/persistence/SubjectExecutor.d.ts +4 -2
- package/persistence/SubjectExecutor.js +105 -13
- package/persistence/SubjectExecutor.js.map +1 -1
- package/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
- package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
- package/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
- package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/platform/PlatformTools.d.ts +1 -0
- package/platform/PlatformTools.js +5 -0
- package/platform/PlatformTools.js.map +1 -1
- package/query-builder/DeleteQueryBuilder.d.ts +4 -2
- package/query-builder/DeleteQueryBuilder.js +4 -2
- package/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/query-builder/InsertQueryBuilder.d.ts +1 -1
- package/query-builder/InsertQueryBuilder.js +12 -3
- package/query-builder/InsertQueryBuilder.js.map +1 -1
- package/query-builder/NotBrackets.d.ts +7 -0
- package/query-builder/NotBrackets.js +19 -0
- package/query-builder/NotBrackets.js.map +1 -0
- package/query-builder/QueryBuilder.d.ts +3 -2
- package/query-builder/QueryBuilder.js +2 -1
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/RelationLoader.js +11 -6
- package/query-builder/RelationLoader.js.map +1 -1
- package/query-builder/RelationQueryBuilder.d.ts +1 -1
- package/query-builder/RelationQueryBuilder.js +1 -1
- package/query-builder/RelationQueryBuilder.js.map +1 -1
- package/query-builder/SelectQueryBuilder.d.ts +10 -1
- package/query-builder/SelectQueryBuilder.js +28 -21
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
- package/query-builder/SoftDeleteQueryBuilder.js +45 -31
- package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/query-builder/UpdateQueryBuilder.d.ts +4 -2
- package/query-builder/UpdateQueryBuilder.js +11 -6
- package/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/query-builder/WhereExpressionBuilder.d.ts +3 -1
- package/query-builder/WhereExpressionBuilder.js.map +1 -1
- package/query-builder/relation-id/RelationIdLoader.js +9 -9
- package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/query-runner/BaseQueryRunner.d.ts +10 -2
- package/query-runner/BaseQueryRunner.js +23 -3
- package/query-runner/BaseQueryRunner.js.map +1 -1
- package/query-runner/QueryRunner.d.ts +8 -0
- package/query-runner/QueryRunner.js.map +1 -1
- package/repository/AbstractRepository.d.ts +2 -2
- package/repository/AbstractRepository.js +2 -2
- package/repository/AbstractRepository.js.map +1 -1
- package/repository/BaseEntity.d.ts +1 -1
- package/repository/BaseEntity.js +1 -1
- package/repository/BaseEntity.js.map +1 -1
- package/repository/Repository.d.ts +1 -1
- package/repository/Repository.js +1 -1
- package/repository/Repository.js.map +1 -1
- package/repository/TreeRepository.js +3 -2
- package/repository/TreeRepository.js.map +1 -1
- package/schema-builder/RdbmsSchemaBuilder.js +37 -31
- package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/schema-builder/options/TableColumnOptions.d.ts +4 -0
- package/schema-builder/options/TableColumnOptions.js.map +1 -1
- package/schema-builder/options/TableUniqueOptions.d.ts +5 -0
- package/schema-builder/options/TableUniqueOptions.js.map +1 -1
- package/schema-builder/table/TableColumn.d.ts +4 -0
- package/schema-builder/table/TableColumn.js +2 -0
- package/schema-builder/table/TableColumn.js.map +1 -1
- package/schema-builder/table/TableUnique.d.ts +5 -0
- package/schema-builder/table/TableUnique.js +5 -2
- package/schema-builder/table/TableUnique.js.map +1 -1
- package/schema-builder/util/TableUtils.js +1 -0
- package/schema-builder/util/TableUtils.js.map +1 -1
- package/subscriber/Broadcaster.d.ts +40 -0
- package/subscriber/Broadcaster.js +191 -31
- package/subscriber/Broadcaster.js.map +1 -1
- package/subscriber/EntitySubscriberInterface.d.ts +18 -0
- package/subscriber/EntitySubscriberInterface.js.map +1 -1
- package/subscriber/event/RecoverEvent.d.ts +6 -0
- package/subscriber/event/RecoverEvent.js +4 -0
- package/subscriber/event/RecoverEvent.js.map +1 -0
- package/subscriber/event/SoftRemoveEvent.d.ts +6 -0
- package/subscriber/event/SoftRemoveEvent.js +4 -0
- package/subscriber/event/SoftRemoveEvent.js.map +1 -0
- package/typeorm-class-transformer-shim.js +20 -0
- package/typeorm-model-shim.js +20 -0
- package/util/DirectoryExportedClassesLoader.d.ts +1 -1
- package/util/DirectoryExportedClassesLoader.js +54 -31
- package/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/util/ImportUtils.d.ts +1 -0
- package/util/ImportUtils.js +94 -0
- package/util/ImportUtils.js.map +1 -0
- package/util/PathUtils.d.ts +10 -0
- package/util/PathUtils.js +34 -0
- package/util/PathUtils.js.map +1 -0
- package/util/RandomGenerator.d.ts +0 -4
- package/util/RandomGenerator.js +0 -9
- package/util/RandomGenerator.js.map +1 -1
|
@@ -33,7 +33,7 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
33
33
|
// we expect it to load id of tag
|
|
34
34
|
if (relationIdAttr.queryBuilderFactory)
|
|
35
35
|
throw new TypeORMError_1.TypeORMError("Additional condition can not be used with ManyToOne or OneToOne owner relations.");
|
|
36
|
-
duplicates_1 =
|
|
36
|
+
duplicates_1 = {};
|
|
37
37
|
results = rawEntities.map(function (rawEntity) {
|
|
38
38
|
var result = {};
|
|
39
39
|
var duplicateParts = [];
|
|
@@ -53,10 +53,10 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
53
53
|
});
|
|
54
54
|
duplicateParts.sort();
|
|
55
55
|
var duplicate = duplicateParts.join("::");
|
|
56
|
-
if (duplicates_1
|
|
56
|
+
if (duplicates_1[duplicate]) {
|
|
57
57
|
return null;
|
|
58
58
|
}
|
|
59
|
-
duplicates_1
|
|
59
|
+
duplicates_1[duplicate] = true;
|
|
60
60
|
return result;
|
|
61
61
|
}).filter(function (v) { return v; });
|
|
62
62
|
return [2 /*return*/, {
|
|
@@ -70,7 +70,7 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
70
70
|
table = relation_1.inverseEntityMetadata.target;
|
|
71
71
|
tableName = relation_1.inverseEntityMetadata.tableName;
|
|
72
72
|
tableAlias_1 = relationIdAttr.alias || tableName;
|
|
73
|
-
duplicates_2 =
|
|
73
|
+
duplicates_2 = {};
|
|
74
74
|
parameters_1 = {};
|
|
75
75
|
condition = rawEntities.map(function (rawEntity, index) {
|
|
76
76
|
var duplicateParts = [];
|
|
@@ -88,10 +88,10 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
88
88
|
}).filter(function (v) { return v; }).join(" AND ");
|
|
89
89
|
duplicateParts.sort();
|
|
90
90
|
var duplicate = duplicateParts.join("::");
|
|
91
|
-
if (duplicates_2
|
|
91
|
+
if (duplicates_2[duplicate]) {
|
|
92
92
|
return "";
|
|
93
93
|
}
|
|
94
|
-
duplicates_2
|
|
94
|
+
duplicates_2[duplicate] = true;
|
|
95
95
|
Object.assign(parameters_1, parameterParts);
|
|
96
96
|
return queryPart;
|
|
97
97
|
}).filter(function (v) { return v; }).map(function (condition) { return "(" + condition + ")"; })
|
|
@@ -147,7 +147,7 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
147
147
|
if (mappedColumns.length === 0)
|
|
148
148
|
return [2 /*return*/, { relationIdAttribute: relationIdAttr, results: [] }];
|
|
149
149
|
parameters_2 = {};
|
|
150
|
-
duplicates_3 =
|
|
150
|
+
duplicates_3 = {};
|
|
151
151
|
joinColumnConditions = mappedColumns.map(function (mappedColumn, index) {
|
|
152
152
|
var duplicateParts = [];
|
|
153
153
|
var parameterParts = {};
|
|
@@ -164,10 +164,10 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
164
164
|
}).filter(function (s) { return s; }).join(" AND ");
|
|
165
165
|
duplicateParts.sort();
|
|
166
166
|
var duplicate = duplicateParts.join("::");
|
|
167
|
-
if (duplicates_3
|
|
167
|
+
if (duplicates_3[duplicate]) {
|
|
168
168
|
return "";
|
|
169
169
|
}
|
|
170
|
-
duplicates_3
|
|
170
|
+
duplicates_3[duplicate] = true;
|
|
171
171
|
Object.assign(parameters_2, parameterParts);
|
|
172
172
|
return queryPart;
|
|
173
173
|
}).filter(function (s) { return s; });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/query-builder/relation-id/RelationIdLoader.ts"],"names":[],"mappings":"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","file":"RelationIdLoader.js","sourcesContent":["import {RelationIdAttribute} from \"./RelationIdAttribute\";\nimport {Connection} from \"../../connection/Connection\";\nimport {RelationIdLoadResult} from \"./RelationIdLoadResult\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {DriverUtils} from \"../../driver/DriverUtils\";\nimport { TypeORMError } from \"../../error/TypeORMError\";\n\nexport class RelationIdLoader {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner: QueryRunner|undefined,\n protected relationIdAttributes: RelationIdAttribute[]) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n async load(rawEntities: any[]): Promise<RelationIdLoadResult[]> {\n\n const promises = this.relationIdAttributes.map(async relationIdAttr => {\n\n if (relationIdAttr.relation.isManyToOne || relationIdAttr.relation.isOneToOneOwner) {\n // example: Post and Tag\n // loadRelationIdAndMap(\"post.tagId\", \"post.tag\")\n // we expect it to load id of tag\n\n if (relationIdAttr.queryBuilderFactory)\n throw new TypeORMError(\"Additional condition can not be used with ManyToOne or OneToOne owner relations.\");\n\n const duplicates: Array<string> = [];\n const results = rawEntities.map(rawEntity => {\n const result: ObjectLiteral = {};\n const duplicateParts: Array<string> = [];\n relationIdAttr.relation.joinColumns.forEach(joinColumn => {\n result[joinColumn.databaseName] = this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.databaseName)], joinColumn.referencedColumn!);\n const duplicatePart = `${joinColumn.databaseName}:${result[joinColumn.databaseName]}`;\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n\n relationIdAttr.relation.entityMetadata.primaryColumns.forEach(primaryColumn => {\n result[primaryColumn.databaseName] = this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, primaryColumn.databaseName)], primaryColumn);\n const duplicatePart = `${primaryColumn.databaseName}:${result[primaryColumn.databaseName]}`;\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates.indexOf(duplicate) !== -1) {\n return null;\n }\n duplicates.push(duplicate);\n return result;\n }).filter(v => v);\n\n return {\n relationIdAttribute: relationIdAttr,\n results: results\n };\n\n } else if (relationIdAttr.relation.isOneToMany || relationIdAttr.relation.isOneToOneNotOwner) {\n // example: Post and Category\n // loadRelationIdAndMap(\"post.categoryIds\", \"post.categories\")\n // we expect it to load array of category ids\n\n const relation = relationIdAttr.relation; // \"post.categories\"\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.joinColumns;\n const table = relation.inverseEntityMetadata.target; // category\n const tableName = relation.inverseEntityMetadata.tableName; // category\n const tableAlias = relationIdAttr.alias || tableName; // if condition (custom query builder factory) is set then relationIdAttr.alias defined\n\n const duplicates: Array<string> = [];\n const parameters: ObjectLiteral = {};\n const condition = rawEntities.map((rawEntity, index) => {\n const duplicateParts: Array<string> = [];\n const parameterParts: ObjectLiteral = {};\n const queryPart = joinColumns.map(joinColumn => {\n const parameterName = joinColumn.databaseName + index;\n const parameterValue = rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn!.databaseName)];\n const duplicatePart = `${tableAlias}:${joinColumn.propertyPath}:${parameterValue}`;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return tableAlias + \".\" + joinColumn.propertyPath + \" = :\" + parameterName;\n }).filter(v => v).join(\" AND \");\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates.push(duplicate);\n Object.assign(parameters, parameterParts);\n return queryPart;\n }).filter(v => v).map(condition => \"(\" + condition + \")\")\n .join(\" OR \");\n\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (!condition)\n return { relationIdAttribute: relationIdAttr, results: [] };\n\n // generate query:\n // SELECT category.id, category.postId FROM category category ON category.postId = :postId\n const qb = this.connection.createQueryBuilder(this.queryRunner);\n\n joinColumns.forEach(joinColumn => {\n qb.addSelect(tableAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName);\n });\n\n relation.inverseRelation!.entityMetadata.primaryColumns.forEach(primaryColumn => {\n qb.addSelect(tableAlias + \".\" + primaryColumn.propertyPath, primaryColumn.databaseName);\n });\n\n qb.from(table, tableAlias)\n .where(\"(\" + condition + \")\") // need brackets because if we have additional condition and no brackets, it looks like (a = 1) OR (a = 2) AND b = 1, that is incorrect\n .setParameters(parameters);\n\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb);\n\n const results = await qb.getRawMany();\n results.forEach(result => {\n joinColumns.forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn!);\n });\n relation.inverseRelation!.entityMetadata.primaryColumns.forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column);\n });\n });\n\n return {\n relationIdAttribute: relationIdAttr,\n results\n };\n\n } else {\n // many-to-many\n // example: Post and Category\n // owner side: loadRelationIdAndMap(\"post.categoryIds\", \"post.categories\")\n // inverse side: loadRelationIdAndMap(\"category.postIds\", \"category.posts\")\n // we expect it to load array of post ids\n\n const relation = relationIdAttr.relation;\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.inverseJoinColumns;\n const inverseJoinColumns = relation.isOwning ? relation.inverseJoinColumns : relation.inverseRelation!.joinColumns;\n const junctionAlias = relationIdAttr.junctionAlias;\n const inverseSideTableName = relationIdAttr.joinInverseSideMetadata.tableName;\n const inverseSideTableAlias = relationIdAttr.alias || inverseSideTableName;\n const junctionTableName = relation.isOwning ? relation.junctionEntityMetadata!.tableName : relation.inverseRelation!.junctionEntityMetadata!.tableName;\n\n\n const mappedColumns = rawEntities.map(rawEntity => {\n return joinColumns.reduce((map, joinColumn) => {\n map[joinColumn.propertyPath] = rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn!.databaseName)];\n return map;\n }, {} as ObjectLiteral);\n });\n\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (mappedColumns.length === 0)\n return { relationIdAttribute: relationIdAttr, results: [] };\n\n const parameters: ObjectLiteral = {};\n const duplicates: Array<string> = [];\n const joinColumnConditions = mappedColumns.map((mappedColumn, index) => {\n const duplicateParts: Array<string> = [];\n const parameterParts: ObjectLiteral = {};\n const queryPart = Object.keys(mappedColumn).map(key => {\n const parameterName = key + index;\n const parameterValue = mappedColumn[key];\n const duplicatePart = `${junctionAlias}:${key}:${parameterValue}`;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return junctionAlias + \".\" + key + \" = :\" + parameterName;\n }).filter(s => s).join(\" AND \");\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates.push(duplicate);\n Object.assign(parameters, parameterParts);\n return queryPart;\n }).filter(s => s);\n\n const inverseJoinColumnCondition = inverseJoinColumns.map(joinColumn => {\n return junctionAlias + \".\" + joinColumn.propertyPath + \" = \" + inverseSideTableAlias + \".\" + joinColumn.referencedColumn!.propertyPath;\n }).join(\" AND \");\n\n const condition = joinColumnConditions.map(condition => {\n return \"(\" + condition + \" AND \" + inverseJoinColumnCondition + \")\";\n }).join(\" OR \");\n\n const qb = this.connection.createQueryBuilder(this.queryRunner);\n\n inverseJoinColumns.forEach(joinColumn => {\n qb.addSelect(junctionAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias + \".\" + joinColumn.propertyPath);\n });\n\n joinColumns.forEach(joinColumn => {\n qb.addSelect(junctionAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias + \".\" + joinColumn.propertyPath);\n });\n\n qb.from(inverseSideTableName, inverseSideTableAlias)\n .innerJoin(junctionTableName, junctionAlias, condition)\n .setParameters(parameters);\n\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb);\n\n const results = await qb.getRawMany();\n results.forEach(result => {\n [...joinColumns, ...inverseJoinColumns].forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn!);\n });\n });\n\n return {\n relationIdAttribute: relationIdAttr,\n results\n };\n }\n });\n\n return Promise.all(promises);\n }\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/query-builder/relation-id/RelationIdLoader.ts"],"names":[],"mappings":"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","file":"RelationIdLoader.js","sourcesContent":["import {RelationIdAttribute} from \"./RelationIdAttribute\";\nimport {Connection} from \"../../connection/Connection\";\nimport {RelationIdLoadResult} from \"./RelationIdLoadResult\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {DriverUtils} from \"../../driver/DriverUtils\";\nimport { TypeORMError } from \"../../error/TypeORMError\";\n\nexport class RelationIdLoader {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner: QueryRunner|undefined,\n protected relationIdAttributes: RelationIdAttribute[]) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n async load(rawEntities: any[]): Promise<RelationIdLoadResult[]> {\n\n const promises = this.relationIdAttributes.map(async relationIdAttr => {\n\n if (relationIdAttr.relation.isManyToOne || relationIdAttr.relation.isOneToOneOwner) {\n // example: Post and Tag\n // loadRelationIdAndMap(\"post.tagId\", \"post.tag\")\n // we expect it to load id of tag\n\n if (relationIdAttr.queryBuilderFactory)\n throw new TypeORMError(\"Additional condition can not be used with ManyToOne or OneToOne owner relations.\");\n\n const duplicates: {[duplicateKey: string]: boolean} = {};\n const results = rawEntities.map(rawEntity => {\n const result: ObjectLiteral = {};\n const duplicateParts: Array<string> = [];\n relationIdAttr.relation.joinColumns.forEach(joinColumn => {\n result[joinColumn.databaseName] = this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.databaseName)], joinColumn.referencedColumn!);\n const duplicatePart = `${joinColumn.databaseName}:${result[joinColumn.databaseName]}`;\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n\n relationIdAttr.relation.entityMetadata.primaryColumns.forEach(primaryColumn => {\n result[primaryColumn.databaseName] = this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, primaryColumn.databaseName)], primaryColumn);\n const duplicatePart = `${primaryColumn.databaseName}:${result[primaryColumn.databaseName]}`;\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates[duplicate]) {\n return null;\n }\n duplicates[duplicate] = true;\n return result;\n }).filter(v => v);\n\n return {\n relationIdAttribute: relationIdAttr,\n results: results\n };\n\n } else if (relationIdAttr.relation.isOneToMany || relationIdAttr.relation.isOneToOneNotOwner) {\n // example: Post and Category\n // loadRelationIdAndMap(\"post.categoryIds\", \"post.categories\")\n // we expect it to load array of category ids\n\n const relation = relationIdAttr.relation; // \"post.categories\"\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.joinColumns;\n const table = relation.inverseEntityMetadata.target; // category\n const tableName = relation.inverseEntityMetadata.tableName; // category\n const tableAlias = relationIdAttr.alias || tableName; // if condition (custom query builder factory) is set then relationIdAttr.alias defined\n\n const duplicates: {[duplicateKey: string]: boolean} = {};\n const parameters: ObjectLiteral = {};\n const condition = rawEntities.map((rawEntity, index) => {\n const duplicateParts: Array<string> = [];\n const parameterParts: ObjectLiteral = {};\n const queryPart = joinColumns.map(joinColumn => {\n const parameterName = joinColumn.databaseName + index;\n const parameterValue = rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn!.databaseName)];\n const duplicatePart = `${tableAlias}:${joinColumn.propertyPath}:${parameterValue}`;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return tableAlias + \".\" + joinColumn.propertyPath + \" = :\" + parameterName;\n }).filter(v => v).join(\" AND \");\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates[duplicate]) {\n return \"\";\n }\n duplicates[duplicate] = true;\n Object.assign(parameters, parameterParts);\n return queryPart;\n }).filter(v => v).map(condition => \"(\" + condition + \")\")\n .join(\" OR \");\n\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (!condition)\n return { relationIdAttribute: relationIdAttr, results: [] };\n\n // generate query:\n // SELECT category.id, category.postId FROM category category ON category.postId = :postId\n const qb = this.connection.createQueryBuilder(this.queryRunner);\n\n joinColumns.forEach(joinColumn => {\n qb.addSelect(tableAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName);\n });\n\n relation.inverseRelation!.entityMetadata.primaryColumns.forEach(primaryColumn => {\n qb.addSelect(tableAlias + \".\" + primaryColumn.propertyPath, primaryColumn.databaseName);\n });\n\n qb.from(table, tableAlias)\n .where(\"(\" + condition + \")\") // need brackets because if we have additional condition and no brackets, it looks like (a = 1) OR (a = 2) AND b = 1, that is incorrect\n .setParameters(parameters);\n\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb);\n\n const results = await qb.getRawMany();\n results.forEach(result => {\n joinColumns.forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn!);\n });\n relation.inverseRelation!.entityMetadata.primaryColumns.forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column);\n });\n });\n\n return {\n relationIdAttribute: relationIdAttr,\n results\n };\n\n } else {\n // many-to-many\n // example: Post and Category\n // owner side: loadRelationIdAndMap(\"post.categoryIds\", \"post.categories\")\n // inverse side: loadRelationIdAndMap(\"category.postIds\", \"category.posts\")\n // we expect it to load array of post ids\n\n const relation = relationIdAttr.relation;\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.inverseJoinColumns;\n const inverseJoinColumns = relation.isOwning ? relation.inverseJoinColumns : relation.inverseRelation!.joinColumns;\n const junctionAlias = relationIdAttr.junctionAlias;\n const inverseSideTableName = relationIdAttr.joinInverseSideMetadata.tableName;\n const inverseSideTableAlias = relationIdAttr.alias || inverseSideTableName;\n const junctionTableName = relation.isOwning ? relation.junctionEntityMetadata!.tableName : relation.inverseRelation!.junctionEntityMetadata!.tableName;\n\n\n const mappedColumns = rawEntities.map(rawEntity => {\n return joinColumns.reduce((map, joinColumn) => {\n map[joinColumn.propertyPath] = rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn!.databaseName)];\n return map;\n }, {} as ObjectLiteral);\n });\n\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (mappedColumns.length === 0)\n return { relationIdAttribute: relationIdAttr, results: [] };\n\n const parameters: ObjectLiteral = {};\n const duplicates: {[duplicateKey: string]: boolean} = {};\n const joinColumnConditions = mappedColumns.map((mappedColumn, index) => {\n const duplicateParts: Array<string> = [];\n const parameterParts: ObjectLiteral = {};\n const queryPart = Object.keys(mappedColumn).map(key => {\n const parameterName = key + index;\n const parameterValue = mappedColumn[key];\n const duplicatePart = `${junctionAlias}:${key}:${parameterValue}`;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return junctionAlias + \".\" + key + \" = :\" + parameterName;\n }).filter(s => s).join(\" AND \");\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates[duplicate]) {\n return \"\";\n }\n duplicates[duplicate] = true;\n Object.assign(parameters, parameterParts);\n return queryPart;\n }).filter(s => s);\n\n const inverseJoinColumnCondition = inverseJoinColumns.map(joinColumn => {\n return junctionAlias + \".\" + joinColumn.propertyPath + \" = \" + inverseSideTableAlias + \".\" + joinColumn.referencedColumn!.propertyPath;\n }).join(\" AND \");\n\n const condition = joinColumnConditions.map(condition => {\n return \"(\" + condition + \" AND \" + inverseJoinColumnCondition + \")\";\n }).join(\" OR \");\n\n const qb = this.connection.createQueryBuilder(this.queryRunner);\n\n inverseJoinColumns.forEach(joinColumn => {\n qb.addSelect(junctionAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias + \".\" + joinColumn.propertyPath);\n });\n\n joinColumns.forEach(joinColumn => {\n qb.addSelect(junctionAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias + \".\" + joinColumn.propertyPath);\n });\n\n qb.from(inverseSideTableName, inverseSideTableAlias)\n .innerJoin(junctionTableName, junctionAlias, condition)\n .setParameters(parameters);\n\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb);\n\n const results = await qb.getRawMany();\n results.forEach(result => {\n [...joinColumns, ...inverseJoinColumns].forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn!);\n });\n });\n\n return {\n relationIdAttribute: relationIdAttr,\n results\n };\n }\n });\n\n return Promise.all(promises);\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -16,6 +16,11 @@ export declare class RawSqlResultsToEntityTransformer {
|
|
|
16
16
|
protected rawRelationIdResults: RelationIdLoadResult[];
|
|
17
17
|
protected rawRelationCountResults: RelationCountLoadResult[];
|
|
18
18
|
protected queryRunner?: QueryRunner | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Contains a hashmap for every rawRelationIdResults given.
|
|
21
|
+
* In the hashmap you will find the idMaps of a result under the hash of this.hashEntityIds for the result.
|
|
22
|
+
*/
|
|
23
|
+
private relationIdMaps;
|
|
19
24
|
constructor(expressionMap: QueryExpressionMap, driver: Driver, rawRelationIdResults: RelationIdLoadResult[], rawRelationCountResults: RelationCountLoadResult[], queryRunner?: QueryRunner | undefined);
|
|
20
25
|
/**
|
|
21
26
|
* Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated
|
|
@@ -39,4 +44,12 @@ export declare class RawSqlResultsToEntityTransformer {
|
|
|
39
44
|
protected transformRelationCounts(rawSqlResults: any[], alias: Alias, entity: ObjectLiteral): boolean;
|
|
40
45
|
private createValueMapFromJoinColumns;
|
|
41
46
|
private extractEntityPrimaryIds;
|
|
47
|
+
/** Prepare data to run #transformRelationIds, as a lot of result independent data is needed in every call */
|
|
48
|
+
private prepareDataForTransformRelationIds;
|
|
49
|
+
/**
|
|
50
|
+
* Use a simple JSON.stringify to create a simple hash of the primary ids of an entity.
|
|
51
|
+
* As this.extractEntityPrimaryIds always creates the primary id object in the same order, if the same relation is
|
|
52
|
+
* given, a simple JSON.stringify should be enough to get a unique hash per entity!
|
|
53
|
+
*/
|
|
54
|
+
private hashEntityIds;
|
|
42
55
|
}
|
|
@@ -113,7 +113,7 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
113
113
|
var hasData = false;
|
|
114
114
|
metadata.columns.forEach(function (column) {
|
|
115
115
|
// if table inheritance is used make sure this column is not child's column
|
|
116
|
-
if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.
|
|
116
|
+
if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.findIndex(function (childMetadata) { return childMetadata.target === column.target; }) !== -1)
|
|
117
117
|
return;
|
|
118
118
|
var value = rawResults[0][DriverUtils_1.DriverUtils.buildAlias(_this.driver, alias.name, column.databaseName)];
|
|
119
119
|
if (value === undefined || column.isVirtual)
|
|
@@ -177,56 +177,20 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
177
177
|
RawSqlResultsToEntityTransformer.prototype.transformRelationIds = function (rawSqlResults, alias, entity, metadata) {
|
|
178
178
|
var _this = this;
|
|
179
179
|
var hasData = false;
|
|
180
|
-
this.rawRelationIdResults.forEach(function (rawRelationIdResult) {
|
|
180
|
+
this.rawRelationIdResults.forEach(function (rawRelationIdResult, index) {
|
|
181
181
|
if (rawRelationIdResult.relationIdAttribute.parentAlias !== alias.name)
|
|
182
182
|
return;
|
|
183
183
|
var relation = rawRelationIdResult.relationIdAttribute.relation;
|
|
184
184
|
var valueMap = _this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);
|
|
185
|
-
if (valueMap === undefined || valueMap === null)
|
|
185
|
+
if (valueMap === undefined || valueMap === null) {
|
|
186
186
|
return;
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
else if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
196
|
-
columns = relation.inverseEntityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });
|
|
197
|
-
// columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn.referencedColumn!); //.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);
|
|
198
|
-
}
|
|
199
|
-
else { // ManyToMany
|
|
200
|
-
if (relation.isOwning) {
|
|
201
|
-
columns = relation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
var idMap = columns.reduce(function (idMap, column) {
|
|
208
|
-
var value = result[column.databaseName];
|
|
209
|
-
if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
210
|
-
if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) // if column is a relation
|
|
211
|
-
value = column.referencedColumn.createValueMap(value);
|
|
212
|
-
return OrmUtils_1.OrmUtils.mergeDeep(idMap, column.createValueMap(value));
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
if (column.referencedColumn.referencedColumn) // if column is a relation
|
|
216
|
-
value = column.referencedColumn.referencedColumn.createValueMap(value);
|
|
217
|
-
return OrmUtils_1.OrmUtils.mergeDeep(idMap, column.referencedColumn.createValueMap(value));
|
|
218
|
-
}
|
|
219
|
-
}, {});
|
|
220
|
-
if (columns.length === 1 && rawRelationIdResult.relationIdAttribute.disableMixedMap === false) {
|
|
221
|
-
if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
222
|
-
return columns[0].getEntityValue(idMap);
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
return columns[0].referencedColumn.getEntityValue(idMap);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
return idMap;
|
|
229
|
-
}).filter(function (result) { return result !== undefined; });
|
|
187
|
+
}
|
|
188
|
+
// prepare common data for this call
|
|
189
|
+
_this.prepareDataForTransformRelationIds();
|
|
190
|
+
// Extract idMaps from prepared data by hash
|
|
191
|
+
var hash = _this.hashEntityIds(relation, valueMap);
|
|
192
|
+
var idMaps = _this.relationIdMaps[index][hash] || [];
|
|
193
|
+
// Map data to properties
|
|
230
194
|
var properties = rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(".");
|
|
231
195
|
var mapToProperty = function (properties, map, value) {
|
|
232
196
|
var property = properties.shift();
|
|
@@ -234,7 +198,7 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
234
198
|
map[property] = value;
|
|
235
199
|
return map;
|
|
236
200
|
}
|
|
237
|
-
|
|
201
|
+
if (property && properties.length > 0) {
|
|
238
202
|
mapToProperty(properties, map[property], value);
|
|
239
203
|
}
|
|
240
204
|
else {
|
|
@@ -249,9 +213,7 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
249
213
|
}
|
|
250
214
|
else {
|
|
251
215
|
mapToProperty(properties, entity, idMaps);
|
|
252
|
-
|
|
253
|
-
hasData = true;
|
|
254
|
-
}
|
|
216
|
+
hasData = hasData || idMaps.length > 0;
|
|
255
217
|
}
|
|
256
218
|
});
|
|
257
219
|
return hasData;
|
|
@@ -333,6 +295,88 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
333
295
|
return data;
|
|
334
296
|
}, {});
|
|
335
297
|
};
|
|
298
|
+
/*private removeVirtualColumns(entity: ObjectLiteral, alias: Alias) {
|
|
299
|
+
const virtualColumns = this.expressionMap.selects
|
|
300
|
+
.filter(select => select.virtual)
|
|
301
|
+
.map(select => select.selection.replace(alias.name + ".", ""));
|
|
302
|
+
|
|
303
|
+
virtualColumns.forEach(virtualColumn => delete entity[virtualColumn]);
|
|
304
|
+
}*/
|
|
305
|
+
/** Prepare data to run #transformRelationIds, as a lot of result independent data is needed in every call */
|
|
306
|
+
RawSqlResultsToEntityTransformer.prototype.prepareDataForTransformRelationIds = function () {
|
|
307
|
+
var _this = this;
|
|
308
|
+
// Return early if the relationIdMaps were already calculated
|
|
309
|
+
if (this.relationIdMaps) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
// Ensure this prepare function is only called once
|
|
313
|
+
this.relationIdMaps = this.rawRelationIdResults.map(function (rawRelationIdResult) {
|
|
314
|
+
var relation = rawRelationIdResult.relationIdAttribute.relation;
|
|
315
|
+
// Calculate column metadata
|
|
316
|
+
var columns;
|
|
317
|
+
if (relation.isManyToOne || relation.isOneToOneOwner) {
|
|
318
|
+
columns = relation.joinColumns;
|
|
319
|
+
}
|
|
320
|
+
else if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
321
|
+
columns = relation.inverseEntityMetadata.primaryColumns;
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
// ManyToMany
|
|
325
|
+
if (relation.isOwning) {
|
|
326
|
+
columns = relation.inverseJoinColumns;
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
columns = relation.inverseRelation.joinColumns;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// Calculate the idMaps for the rawRelationIdResult
|
|
333
|
+
return rawRelationIdResult.results.reduce(function (agg, result) {
|
|
334
|
+
var idMap = columns.reduce(function (idMap, column) {
|
|
335
|
+
var value = result[column.databaseName];
|
|
336
|
+
if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
337
|
+
if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) {
|
|
338
|
+
// if column is a relation
|
|
339
|
+
value = column.referencedColumn.createValueMap(value);
|
|
340
|
+
}
|
|
341
|
+
return OrmUtils_1.OrmUtils.mergeDeep(idMap, column.createValueMap(value));
|
|
342
|
+
}
|
|
343
|
+
if (column.referencedColumn.referencedColumn) {
|
|
344
|
+
// if column is a relation
|
|
345
|
+
value = column.referencedColumn.referencedColumn.createValueMap(value);
|
|
346
|
+
}
|
|
347
|
+
return OrmUtils_1.OrmUtils.mergeDeep(idMap, column.referencedColumn.createValueMap(value));
|
|
348
|
+
}, {});
|
|
349
|
+
if (columns.length === 1 && !rawRelationIdResult.relationIdAttribute.disableMixedMap) {
|
|
350
|
+
if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
351
|
+
idMap = columns[0].getEntityValue(idMap);
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
idMap = columns[0].referencedColumn.getEntityValue(idMap);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
// If an idMap is found, set it in the aggregator under the correct hash
|
|
358
|
+
if (idMap !== undefined) {
|
|
359
|
+
var hash = _this.hashEntityIds(relation, result);
|
|
360
|
+
if (agg[hash]) {
|
|
361
|
+
agg[hash].push(idMap);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
agg[hash] = [idMap];
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return agg;
|
|
368
|
+
}, {});
|
|
369
|
+
});
|
|
370
|
+
};
|
|
371
|
+
/**
|
|
372
|
+
* Use a simple JSON.stringify to create a simple hash of the primary ids of an entity.
|
|
373
|
+
* As this.extractEntityPrimaryIds always creates the primary id object in the same order, if the same relation is
|
|
374
|
+
* given, a simple JSON.stringify should be enough to get a unique hash per entity!
|
|
375
|
+
*/
|
|
376
|
+
RawSqlResultsToEntityTransformer.prototype.hashEntityIds = function (relation, data) {
|
|
377
|
+
var entityPrimaryIds = this.extractEntityPrimaryIds(relation, data);
|
|
378
|
+
return JSON.stringify(entityPrimaryIds);
|
|
379
|
+
};
|
|
336
380
|
return RawSqlResultsToEntityTransformer;
|
|
337
381
|
}());
|
|
338
382
|
exports.RawSqlResultsToEntityTransformer = RawSqlResultsToEntityTransformer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/query-builder/transformer/RawSqlResultsToEntityTransformer.ts"],"names":[],"mappings":"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","file":"RawSqlResultsToEntityTransformer.js","sourcesContent":["import {Driver} from \"../../driver/Driver\";\nimport {RelationIdLoadResult} from \"../relation-id/RelationIdLoadResult\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {ColumnMetadata} from \"../../metadata/ColumnMetadata\";\nimport {Alias} from \"../Alias\";\nimport {RelationCountLoadResult} from \"../relation-count/RelationCountLoadResult\";\nimport {RelationMetadata} from \"../../metadata/RelationMetadata\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {QueryExpressionMap} from \"../QueryExpressionMap\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {QueryRunner} from \"../..\";\nimport {DriverUtils} from \"../../driver/DriverUtils\";\n\n/**\n * Transforms raw sql results returned from the database into entity object.\n * Entity is constructed based on its entity metadata.\n */\nexport class RawSqlResultsToEntityTransformer {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected expressionMap: QueryExpressionMap,\n protected driver: Driver,\n protected rawRelationIdResults: RelationIdLoadResult[],\n protected rawRelationCountResults: RelationCountLoadResult[],\n protected queryRunner?: QueryRunner) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n transform(rawResults: any[], alias: Alias): any[] {\n const group = this.group(rawResults, alias);\n const entities: any[] = [];\n group.forEach(results => {\n const entity = this.transformRawResultsGroup(results, alias);\n if (entity !== undefined && !Object.values(entity).every((value) => value === null))\n entities.push(entity);\n });\n return entities;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Groups given raw results by ids of given alias.\n */\n protected group(rawResults: any[], alias: Alias): Map<string, any[]> {\n const map = new Map();\n const keys: string[] = [];\n if (alias.metadata.tableType === \"view\") {\n keys.push(...alias.metadata.columns.map(column => DriverUtils.buildAlias(this.driver, alias.name, column.databaseName)));\n } else {\n keys.push(...alias.metadata.primaryColumns.map(column => DriverUtils.buildAlias(this.driver, alias.name, column.databaseName)));\n }\n rawResults.forEach(rawResult => {\n const id = keys.map(key => {\n const keyValue = rawResult[key];\n\n if (Buffer.isBuffer(keyValue)) {\n return keyValue.toString(\"hex\");\n }\n\n if (typeof keyValue === \"object\") {\n return JSON.stringify(keyValue);\n }\n\n return keyValue;\n }).join(\"_\"); // todo: check partial\n\n const items = map.get(id);\n if (!items) {\n map.set(id, [rawResult]);\n } else {\n items.push(rawResult);\n }\n });\n return map;\n }\n\n /**\n * Transforms set of data results into single entity.\n */\n protected transformRawResultsGroup(rawResults: any[], alias: Alias): ObjectLiteral|undefined {\n // let hasColumns = false; // , hasEmbeddedColumns = false, hasParentColumns = false, hasParentEmbeddedColumns = false;\n let metadata = alias.metadata;\n\n if (metadata.discriminatorColumn) {\n const discriminatorValues = rawResults.map(result => result[DriverUtils.buildAlias(this.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)]);\n const discriminatorMetadata = metadata.childEntityMetadatas.find(childEntityMetadata => {\n return typeof discriminatorValues.find(value => value === childEntityMetadata.discriminatorValue) !== 'undefined';\n });\n if (discriminatorMetadata)\n metadata = discriminatorMetadata;\n }\n let entity: any = this.expressionMap.options.indexOf(\"create-pojo\") !== -1 ? {} : metadata.create(this.queryRunner, { fromDeserializer: true });\n\n // get value from columns selections and put them into newly created entity\n const hasColumns = this.transformColumns(rawResults, alias, entity, metadata);\n const hasRelations = this.transformJoins(rawResults, entity, alias, metadata);\n const hasRelationIds = this.transformRelationIds(rawResults, alias, entity, metadata);\n const hasRelationCounts = this.transformRelationCounts(rawResults, alias, entity);\n\n // if we have at least one selected column then return this entity\n // since entity must have at least primary columns to be really selected and transformed into entity\n if (hasColumns)\n return entity;\n\n // if we don't have any selected column we should not return entity,\n // except for the case when entity only contain a primary column as a relation to another entity\n // in this case its absolutely possible our entity to not have any columns except a single relation\n const hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.filter(column => column.isVirtual === false).length === 0; // todo: create metadata.hasOnlyVirtualPrimaryColumns\n if (hasOnlyVirtualPrimaryColumns && (hasRelations || hasRelationIds || hasRelationCounts))\n return entity;\n\n return undefined;\n }\n\n // get value from columns selections and put them into object\n protected transformColumns(rawResults: any[], alias: Alias, entity: ObjectLiteral, metadata: EntityMetadata): boolean {\n let hasData = false;\n metadata.columns.forEach(column => {\n\n // if table inheritance is used make sure this column is not child's column\n if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.map(metadata => metadata.target).indexOf(column.target) !== -1)\n return;\n\n const value = rawResults[0][DriverUtils.buildAlias(this.driver, alias.name, column.databaseName)];\n if (value === undefined || column.isVirtual)\n return;\n\n // if user does not selected the whole entity or he used partial selection and does not select this particular column\n // then we don't add this column and its value into the entity\n if (!this.expressionMap.selects.find(select => select.selection === alias.name || select.selection === alias.name + \".\" + column.propertyPath))\n return;\n\n column.setEntityValue(entity, this.driver.prepareHydratedValue(value, column));\n if (value !== null) // we don't mark it as has data because if we will have all nulls in our object - we don't need such object\n hasData = true;\n });\n return hasData;\n }\n\n /**\n * Transforms joined entities in the given raw results by a given alias and stores to the given (parent) entity\n */\n protected transformJoins(rawResults: any[], entity: ObjectLiteral, alias: Alias, metadata: EntityMetadata) {\n let hasData = false;\n\n // let discriminatorValue: string = \"\";\n // if (metadata.discriminatorColumn)\n // discriminatorValue = rawResults[0][DriverUtils.buildAlias(this.connection.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)];\n\n this.expressionMap.joinAttributes.forEach(join => { // todo: we have problem here - when inner joins are used without selects it still create empty array\n\n // skip joins without metadata\n if (!join.metadata)\n return;\n\n // if simple left or inner join was performed without selection then we don't need to do anything\n if (!join.isSelected)\n return;\n\n // this check need to avoid setting properties than not belong to entity when single table inheritance used. (todo: check if we still need it)\n // const metadata = metadata.childEntityMetadatas.find(childEntityMetadata => discriminatorValue === childEntityMetadata.discriminatorValue);\n if (join.relation && !metadata.relations.find(relation => relation === join.relation))\n return;\n\n // some checks to make sure this join is for current alias\n if (join.mapToProperty) {\n if (join.mapToPropertyParentAlias !== alias.name)\n return;\n } else {\n if (!join.relation || join.parentAlias !== alias.name || join.relationPropertyPath !== join.relation!.propertyPath)\n return;\n }\n\n // transform joined data into entities\n let result: any = this.transform(rawResults, join.alias);\n result = !join.isMany ? result[0] : result;\n result = !join.isMany && result === undefined ? null : result; // this is needed to make relations to return null when its joined but nothing was found in the database\n if (result === undefined) // if nothing was joined then simply return\n return;\n\n // if join was mapped to some property then save result to that property\n if (join.mapToPropertyPropertyName) {\n entity[join.mapToPropertyPropertyName] = result; // todo: fix embeds\n\n } else { // otherwise set to relation\n join.relation!.setEntityValue(entity, result);\n }\n\n hasData = true;\n });\n return hasData;\n }\n\n protected transformRelationIds(rawSqlResults: any[], alias: Alias, entity: ObjectLiteral, metadata: EntityMetadata): boolean {\n let hasData = false;\n this.rawRelationIdResults.forEach(rawRelationIdResult => {\n if (rawRelationIdResult.relationIdAttribute.parentAlias !== alias.name)\n return;\n\n const relation = rawRelationIdResult.relationIdAttribute.relation;\n const valueMap = this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);\n if (valueMap === undefined || valueMap === null)\n return;\n\n const idMaps = rawRelationIdResult.results.map(result => {\n const entityPrimaryIds = this.extractEntityPrimaryIds(relation, result);\n if (OrmUtils.compareIds(entityPrimaryIds, valueMap) === false)\n return;\n\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(joinColumn => joinColumn);\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);\n // columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn.referencedColumn!); //.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);\n } else { // ManyToMany\n if (relation.isOwning) {\n columns = relation.inverseJoinColumns.map(joinColumn => joinColumn);\n } else {\n columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn);\n }\n }\n\n const idMap = columns.reduce((idMap, column) => {\n let value = result[column.databaseName];\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) // if column is a relation\n value = column.referencedColumn.createValueMap(value);\n\n return OrmUtils.mergeDeep(idMap, column.createValueMap(value));\n } else {\n if (column.referencedColumn!.referencedColumn) // if column is a relation\n value = column.referencedColumn!.referencedColumn!.createValueMap(value);\n\n return OrmUtils.mergeDeep(idMap, column.referencedColumn!.createValueMap(value));\n }\n }, {} as ObjectLiteral);\n\n if (columns.length === 1 && rawRelationIdResult.relationIdAttribute.disableMixedMap === false) {\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return columns[0].getEntityValue(idMap);\n } else {\n return columns[0].referencedColumn!.getEntityValue(idMap);\n }\n }\n return idMap;\n }).filter(result => result !== undefined);\n\n const properties = rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(\".\");\n const mapToProperty = (properties: string[], map: ObjectLiteral, value: any): any => {\n\n const property = properties.shift();\n if (property && properties.length === 0) {\n map[property] = value;\n return map;\n } else if (property && properties.length > 0) {\n mapToProperty(properties, map[property], value);\n } else {\n return map;\n }\n };\n if (relation.isOneToOne || relation.isManyToOne) {\n if (idMaps[0] !== undefined) {\n mapToProperty(properties, entity, idMaps[0]);\n hasData = true;\n }\n } else {\n mapToProperty(properties, entity, idMaps);\n if (idMaps.length > 0) {\n hasData = true;\n }\n }\n });\n\n return hasData;\n }\n\n protected transformRelationCounts(rawSqlResults: any[], alias: Alias, entity: ObjectLiteral): boolean {\n let hasData = false;\n this.rawRelationCountResults\n .filter(rawRelationCountResult => rawRelationCountResult.relationCountAttribute.parentAlias === alias.name)\n .forEach(rawRelationCountResult => {\n const relation = rawRelationCountResult.relationCountAttribute.relation;\n let referenceColumnName: string;\n\n if (relation.isOneToMany) {\n referenceColumnName = relation.inverseRelation!.joinColumns[0].referencedColumn!.databaseName; // todo: fix joinColumns[0]\n\n } else {\n referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn!.databaseName : relation.inverseRelation!.joinColumns[0].referencedColumn!.databaseName;\n }\n\n const referenceColumnValue = rawSqlResults[0][DriverUtils.buildAlias(this.driver, alias.name, referenceColumnName)]; // we use zero index since its grouped data // todo: selection with alias for entity columns wont work\n if (referenceColumnValue !== undefined && referenceColumnValue !== null) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = 0;\n rawRelationCountResult.results\n .filter(result => result[\"parentId\"] === referenceColumnValue)\n .forEach(result => {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = parseInt(result[\"cnt\"]);\n hasData = true;\n });\n }\n });\n\n return hasData;\n }\n\n private createValueMapFromJoinColumns(relation: RelationMetadata, parentAlias: string, rawSqlResults: any[]): ObjectLiteral {\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(joinColumn => joinColumn);\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn);\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(joinColumn => joinColumn);\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(joinColumn => joinColumn);\n }\n }\n return columns.reduce((valueMap, column) => {\n rawSqlResults.forEach(rawSqlResult => {\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n valueMap[column.databaseName] = this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildAlias(this.driver, parentAlias, column.databaseName)], column);\n } else {\n valueMap[column.databaseName] = this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildAlias(this.driver, parentAlias, column.referencedColumn!.databaseName)], column);\n }\n });\n return valueMap;\n }, {} as ObjectLiteral);\n\n }\n\n private extractEntityPrimaryIds(relation: RelationMetadata, relationIdRawResult: any) {\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(joinColumn => joinColumn);\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn);\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(joinColumn => joinColumn);\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(joinColumn => joinColumn);\n }\n }\n return columns.reduce((data, column) => {\n data[column.databaseName] = relationIdRawResult[column.databaseName];\n return data;\n }, {} as ObjectLiteral);\n }\n\n /*private removeVirtualColumns(entity: ObjectLiteral, alias: Alias) {\n const virtualColumns = this.expressionMap.selects\n .filter(select => select.virtual)\n .map(select => select.selection.replace(alias.name + \".\", \"\"));\n\n virtualColumns.forEach(virtualColumn => delete entity[virtualColumn]);\n }*/\n\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/query-builder/transformer/RawSqlResultsToEntityTransformer.ts"],"names":[],"mappings":"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","file":"RawSqlResultsToEntityTransformer.js","sourcesContent":["import {Driver} from \"../../driver/Driver\";\nimport {RelationIdLoadResult} from \"../relation-id/RelationIdLoadResult\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {ColumnMetadata} from \"../../metadata/ColumnMetadata\";\nimport {Alias} from \"../Alias\";\nimport {RelationCountLoadResult} from \"../relation-count/RelationCountLoadResult\";\nimport {RelationMetadata} from \"../../metadata/RelationMetadata\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {QueryExpressionMap} from \"../QueryExpressionMap\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {QueryRunner} from \"../..\";\nimport {DriverUtils} from \"../../driver/DriverUtils\";\n\n/**\n * Transforms raw sql results returned from the database into entity object.\n * Entity is constructed based on its entity metadata.\n */\nexport class RawSqlResultsToEntityTransformer {\n\n /**\n * Contains a hashmap for every rawRelationIdResults given.\n * In the hashmap you will find the idMaps of a result under the hash of this.hashEntityIds for the result.\n */\n private relationIdMaps: Array<{ [idHash: string]: any[] }>;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected expressionMap: QueryExpressionMap,\n protected driver: Driver,\n protected rawRelationIdResults: RelationIdLoadResult[],\n protected rawRelationCountResults: RelationCountLoadResult[],\n protected queryRunner?: QueryRunner) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n transform(rawResults: any[], alias: Alias): any[] {\n const group = this.group(rawResults, alias);\n const entities: any[] = [];\n group.forEach(results => {\n const entity = this.transformRawResultsGroup(results, alias);\n if (entity !== undefined && !Object.values(entity).every((value) => value === null))\n entities.push(entity);\n });\n return entities;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Groups given raw results by ids of given alias.\n */\n protected group(rawResults: any[], alias: Alias): Map<string, any[]> {\n const map = new Map();\n const keys: string[] = [];\n if (alias.metadata.tableType === \"view\") {\n keys.push(...alias.metadata.columns.map(column => DriverUtils.buildAlias(this.driver, alias.name, column.databaseName)));\n } else {\n keys.push(...alias.metadata.primaryColumns.map(column => DriverUtils.buildAlias(this.driver, alias.name, column.databaseName)));\n }\n rawResults.forEach(rawResult => {\n const id = keys.map(key => {\n const keyValue = rawResult[key];\n\n if (Buffer.isBuffer(keyValue)) {\n return keyValue.toString(\"hex\");\n }\n\n if (typeof keyValue === \"object\") {\n return JSON.stringify(keyValue);\n }\n\n return keyValue;\n }).join(\"_\"); // todo: check partial\n\n const items = map.get(id);\n if (!items) {\n map.set(id, [rawResult]);\n } else {\n items.push(rawResult);\n }\n });\n return map;\n }\n\n /**\n * Transforms set of data results into single entity.\n */\n protected transformRawResultsGroup(rawResults: any[], alias: Alias): ObjectLiteral|undefined {\n // let hasColumns = false; // , hasEmbeddedColumns = false, hasParentColumns = false, hasParentEmbeddedColumns = false;\n let metadata = alias.metadata;\n\n if (metadata.discriminatorColumn) {\n const discriminatorValues = rawResults.map(result => result[DriverUtils.buildAlias(this.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)]);\n const discriminatorMetadata = metadata.childEntityMetadatas.find(childEntityMetadata => {\n return typeof discriminatorValues.find(value => value === childEntityMetadata.discriminatorValue) !== 'undefined';\n });\n if (discriminatorMetadata)\n metadata = discriminatorMetadata;\n }\n let entity: any = this.expressionMap.options.indexOf(\"create-pojo\") !== -1 ? {} : metadata.create(this.queryRunner, { fromDeserializer: true });\n\n // get value from columns selections and put them into newly created entity\n const hasColumns = this.transformColumns(rawResults, alias, entity, metadata);\n const hasRelations = this.transformJoins(rawResults, entity, alias, metadata);\n const hasRelationIds = this.transformRelationIds(rawResults, alias, entity, metadata);\n const hasRelationCounts = this.transformRelationCounts(rawResults, alias, entity);\n\n // if we have at least one selected column then return this entity\n // since entity must have at least primary columns to be really selected and transformed into entity\n if (hasColumns)\n return entity;\n\n // if we don't have any selected column we should not return entity,\n // except for the case when entity only contain a primary column as a relation to another entity\n // in this case its absolutely possible our entity to not have any columns except a single relation\n const hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.filter(column => column.isVirtual === false).length === 0; // todo: create metadata.hasOnlyVirtualPrimaryColumns\n if (hasOnlyVirtualPrimaryColumns && (hasRelations || hasRelationIds || hasRelationCounts))\n return entity;\n\n return undefined;\n }\n\n // get value from columns selections and put them into object\n protected transformColumns(rawResults: any[], alias: Alias, entity: ObjectLiteral, metadata: EntityMetadata): boolean {\n let hasData = false;\n metadata.columns.forEach(column => {\n\n // if table inheritance is used make sure this column is not child's column\n if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.findIndex(childMetadata => childMetadata.target === column.target) !== -1)\n return;\n\n const value = rawResults[0][DriverUtils.buildAlias(this.driver, alias.name, column.databaseName)];\n if (value === undefined || column.isVirtual)\n return;\n\n // if user does not selected the whole entity or he used partial selection and does not select this particular column\n // then we don't add this column and its value into the entity\n if (!this.expressionMap.selects.find(select => select.selection === alias.name || select.selection === alias.name + \".\" + column.propertyPath))\n return;\n\n column.setEntityValue(entity, this.driver.prepareHydratedValue(value, column));\n if (value !== null) // we don't mark it as has data because if we will have all nulls in our object - we don't need such object\n hasData = true;\n });\n return hasData;\n }\n\n /**\n * Transforms joined entities in the given raw results by a given alias and stores to the given (parent) entity\n */\n protected transformJoins(rawResults: any[], entity: ObjectLiteral, alias: Alias, metadata: EntityMetadata) {\n let hasData = false;\n\n // let discriminatorValue: string = \"\";\n // if (metadata.discriminatorColumn)\n // discriminatorValue = rawResults[0][DriverUtils.buildAlias(this.connection.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)];\n\n this.expressionMap.joinAttributes.forEach(join => { // todo: we have problem here - when inner joins are used without selects it still create empty array\n\n // skip joins without metadata\n if (!join.metadata)\n return;\n\n // if simple left or inner join was performed without selection then we don't need to do anything\n if (!join.isSelected)\n return;\n\n // this check need to avoid setting properties than not belong to entity when single table inheritance used. (todo: check if we still need it)\n // const metadata = metadata.childEntityMetadatas.find(childEntityMetadata => discriminatorValue === childEntityMetadata.discriminatorValue);\n if (join.relation && !metadata.relations.find(relation => relation === join.relation))\n return;\n\n // some checks to make sure this join is for current alias\n if (join.mapToProperty) {\n if (join.mapToPropertyParentAlias !== alias.name)\n return;\n } else {\n if (!join.relation || join.parentAlias !== alias.name || join.relationPropertyPath !== join.relation!.propertyPath)\n return;\n }\n\n // transform joined data into entities\n let result: any = this.transform(rawResults, join.alias);\n result = !join.isMany ? result[0] : result;\n result = !join.isMany && result === undefined ? null : result; // this is needed to make relations to return null when its joined but nothing was found in the database\n if (result === undefined) // if nothing was joined then simply return\n return;\n\n // if join was mapped to some property then save result to that property\n if (join.mapToPropertyPropertyName) {\n entity[join.mapToPropertyPropertyName] = result; // todo: fix embeds\n\n } else { // otherwise set to relation\n join.relation!.setEntityValue(entity, result);\n }\n\n hasData = true;\n });\n return hasData;\n }\n\n protected transformRelationIds(rawSqlResults: any[], alias: Alias, entity: ObjectLiteral, metadata: EntityMetadata): boolean {\n let hasData = false;\n this.rawRelationIdResults.forEach((rawRelationIdResult, index) => {\n if (rawRelationIdResult.relationIdAttribute.parentAlias !== alias.name) \n return;\n \n const relation = rawRelationIdResult.relationIdAttribute.relation;\n const valueMap = this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);\n if (valueMap === undefined || valueMap === null) {\n return;\n }\n \n // prepare common data for this call\n this.prepareDataForTransformRelationIds();\n \n // Extract idMaps from prepared data by hash\n const hash = this.hashEntityIds(relation, valueMap);\n const idMaps = this.relationIdMaps[index][hash] || [];\n \n // Map data to properties\n const properties = rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(\".\");\n const mapToProperty = (properties: string[], map: ObjectLiteral, value: any): any => {\n const property = properties.shift();\n if (property && properties.length === 0) {\n map[property] = value;\n return map;\n }\n if (property && properties.length > 0) {\n mapToProperty(properties, map[property], value);\n } else {\n return map;\n }\n };\n if (relation.isOneToOne || relation.isManyToOne) {\n if (idMaps[0] !== undefined) {\n mapToProperty(properties, entity, idMaps[0]);\n hasData = true;\n }\n } else {\n mapToProperty(properties, entity, idMaps);\n hasData = hasData || idMaps.length > 0;\n }\n });\n \n return hasData;\n }\n\n protected transformRelationCounts(rawSqlResults: any[], alias: Alias, entity: ObjectLiteral): boolean {\n let hasData = false;\n this.rawRelationCountResults\n .filter(rawRelationCountResult => rawRelationCountResult.relationCountAttribute.parentAlias === alias.name)\n .forEach(rawRelationCountResult => {\n const relation = rawRelationCountResult.relationCountAttribute.relation;\n let referenceColumnName: string;\n\n if (relation.isOneToMany) {\n referenceColumnName = relation.inverseRelation!.joinColumns[0].referencedColumn!.databaseName; // todo: fix joinColumns[0]\n\n } else {\n referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn!.databaseName : relation.inverseRelation!.joinColumns[0].referencedColumn!.databaseName;\n }\n\n const referenceColumnValue = rawSqlResults[0][DriverUtils.buildAlias(this.driver, alias.name, referenceColumnName)]; // we use zero index since its grouped data // todo: selection with alias for entity columns wont work\n if (referenceColumnValue !== undefined && referenceColumnValue !== null) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = 0;\n rawRelationCountResult.results\n .filter(result => result[\"parentId\"] === referenceColumnValue)\n .forEach(result => {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = parseInt(result[\"cnt\"]);\n hasData = true;\n });\n }\n });\n\n return hasData;\n }\n\n private createValueMapFromJoinColumns(relation: RelationMetadata, parentAlias: string, rawSqlResults: any[]): ObjectLiteral {\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(joinColumn => joinColumn);\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn);\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(joinColumn => joinColumn);\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(joinColumn => joinColumn);\n }\n }\n return columns.reduce((valueMap, column) => {\n rawSqlResults.forEach(rawSqlResult => {\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n valueMap[column.databaseName] = this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildAlias(this.driver, parentAlias, column.databaseName)], column);\n } else {\n valueMap[column.databaseName] = this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildAlias(this.driver, parentAlias, column.referencedColumn!.databaseName)], column);\n }\n });\n return valueMap;\n }, {} as ObjectLiteral);\n\n }\n\n private extractEntityPrimaryIds(relation: RelationMetadata, relationIdRawResult: any) {\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(joinColumn => joinColumn);\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn);\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(joinColumn => joinColumn);\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(joinColumn => joinColumn);\n }\n }\n return columns.reduce((data, column) => {\n data[column.databaseName] = relationIdRawResult[column.databaseName];\n return data;\n }, {} as ObjectLiteral);\n }\n\n /*private removeVirtualColumns(entity: ObjectLiteral, alias: Alias) {\n const virtualColumns = this.expressionMap.selects\n .filter(select => select.virtual)\n .map(select => select.selection.replace(alias.name + \".\", \"\"));\n\n virtualColumns.forEach(virtualColumn => delete entity[virtualColumn]);\n }*/\n\n\n\n /** Prepare data to run #transformRelationIds, as a lot of result independent data is needed in every call */\n private prepareDataForTransformRelationIds() {\n\n // Return early if the relationIdMaps were already calculated\n if(this.relationIdMaps) {\n return;\n }\n\n // Ensure this prepare function is only called once\n this.relationIdMaps = this.rawRelationIdResults.map(rawRelationIdResult => {\n const relation = rawRelationIdResult.relationIdAttribute.relation;\n\n // Calculate column metadata\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns;\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseEntityMetadata.primaryColumns;\n } else {\n // ManyToMany\n if (relation.isOwning) {\n columns = relation.inverseJoinColumns;\n } else {\n columns = relation.inverseRelation!.joinColumns;\n }\n }\n\n // Calculate the idMaps for the rawRelationIdResult\n return rawRelationIdResult.results.reduce((agg, result) => {\n let idMap = columns.reduce((idMap, column) => {\n let value = result[column.databaseName];\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) {\n // if column is a relation\n value = column.referencedColumn.createValueMap(value);\n }\n\n return OrmUtils.mergeDeep(idMap, column.createValueMap(value));\n }\n if (column.referencedColumn!.referencedColumn) {\n // if column is a relation\n value = column.referencedColumn!.referencedColumn!.createValueMap(value);\n }\n\n return OrmUtils.mergeDeep(idMap, column.referencedColumn!.createValueMap(value));\n }, {} as ObjectLiteral);\n\n if (columns.length === 1 && !rawRelationIdResult.relationIdAttribute.disableMixedMap) {\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n idMap = columns[0].getEntityValue(idMap);\n } else {\n idMap = columns[0].referencedColumn!.getEntityValue(idMap);\n }\n }\n\n // If an idMap is found, set it in the aggregator under the correct hash\n if (idMap !== undefined) {\n const hash = this.hashEntityIds(relation, result);\n\n if (agg[hash]) {\n agg[hash].push(idMap);\n } else {\n agg[hash] = [idMap];\n }\n }\n\n return agg;\n }, {});\n });\n \n }\n\n /**\n * Use a simple JSON.stringify to create a simple hash of the primary ids of an entity.\n * As this.extractEntityPrimaryIds always creates the primary id object in the same order, if the same relation is\n * given, a simple JSON.stringify should be enough to get a unique hash per entity!\n */\n private hashEntityIds(relation: RelationMetadata, data: ObjectLiteral) {\n const entityPrimaryIds = this.extractEntityPrimaryIds(relation, data);\n return JSON.stringify(entityPrimaryIds);\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -70,6 +70,14 @@ export declare abstract class BaseQueryRunner {
|
|
|
70
70
|
abstract query(query: string, parameters?: any[], useStructuredResult?: boolean): Promise<any>;
|
|
71
71
|
protected abstract loadTables(tablePaths?: string[]): Promise<Table[]>;
|
|
72
72
|
protected abstract loadViews(tablePaths?: string[]): Promise<View[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Called before migrations are run.
|
|
75
|
+
*/
|
|
76
|
+
beforeMigration(): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Called after migrations are run.
|
|
79
|
+
*/
|
|
80
|
+
afterMigration(): Promise<void>;
|
|
73
81
|
/**
|
|
74
82
|
* Loads given table's data from the database.
|
|
75
83
|
*/
|
|
@@ -131,7 +139,7 @@ export declare abstract class BaseQueryRunner {
|
|
|
131
139
|
protected getTablePath(target: EntityMetadata | Table | View | TableForeignKey | string): string;
|
|
132
140
|
protected getTypeormMetadataTableName(): string;
|
|
133
141
|
/**
|
|
134
|
-
* Generates SQL query to insert a record into
|
|
142
|
+
* Generates SQL query to insert a record into typeorm metadata table.
|
|
135
143
|
*/
|
|
136
144
|
protected insertTypeormMetadataSql({ database, schema, table, type, name, value }: {
|
|
137
145
|
database?: string;
|
|
@@ -142,7 +150,7 @@ export declare abstract class BaseQueryRunner {
|
|
|
142
150
|
value?: string;
|
|
143
151
|
}): Query;
|
|
144
152
|
/**
|
|
145
|
-
* Generates SQL query to delete a record from
|
|
153
|
+
* Generates SQL query to delete a record from typeorm metadata table.
|
|
146
154
|
*/
|
|
147
155
|
protected deleteTypeormMetadataSql({ database, schema, table, type, name }: {
|
|
148
156
|
database?: string;
|