typeorm 0.3.20-dev.fa86f6f → 0.3.21-dev.0d08246
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 +11 -14
- package/browser/cache/DbQueryResultCache.js +1 -1
- package/browser/cache/DbQueryResultCache.js.map +1 -1
- package/browser/cache/QueryResultCache.d.ts +4 -2
- package/browser/cache/QueryResultCache.js.map +1 -1
- package/browser/cache/QueryResultCacheFactory.js.map +1 -1
- package/browser/cache/RedisQueryResultCache.js +1 -1
- package/browser/cache/RedisQueryResultCache.js.map +1 -1
- package/browser/cli-ts-node-esm.js.map +1 -1
- package/browser/connection/ConnectionManager.js.map +1 -1
- package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
- package/browser/connection/ConnectionOptionsReader.d.ts +4 -4
- package/browser/connection/ConnectionOptionsReader.js.map +1 -1
- package/browser/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
- package/browser/container.js.map +1 -1
- package/browser/data-source/DataSource.d.ts +2 -0
- package/browser/data-source/DataSource.js +5 -1
- package/browser/data-source/DataSource.js.map +1 -1
- package/browser/decorator/Unique.js.map +1 -1
- package/browser/decorator/columns/Column.js.map +1 -1
- package/browser/decorator/columns/PrimaryColumn.js.map +1 -1
- package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
- package/browser/decorator/columns/VirtualColumn.js +1 -1
- package/browser/decorator/columns/VirtualColumn.js.map +1 -1
- package/browser/decorator/entity/ChildEntity.js.map +1 -1
- package/browser/decorator/relations/ManyToMany.js.map +1 -1
- package/browser/decorator/relations/ManyToOne.js.map +1 -1
- package/browser/decorator/relations/OneToMany.js.map +1 -1
- package/browser/decorator/relations/OneToOne.d.ts +4 -4
- package/browser/decorator/relations/OneToOne.js +2 -2
- package/browser/decorator/relations/OneToOne.js.map +1 -1
- package/browser/driver/DriverFactory.js.map +1 -1
- package/browser/driver/DriverUtils.js.map +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.d.ts +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.js.map +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +10 -10
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +0 -1
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +2 -2
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/browser/driver/aurora-postgres/AuroraPostgresDriver.js.map +1 -1
- package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js +2 -2
- package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +2 -2
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +4 -0
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/browser/driver/capacitor/CapacitorDriver.js.map +1 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.js +2 -2
- package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachConnectionCredentialsOptions.d.ts +1 -2
- package/browser/driver/cockroachdb/CockroachConnectionCredentialsOptions.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachConnectionOptions.d.ts +1 -1
- package/browser/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +0 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +8 -6
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/cordova/CordovaDriver.js.map +1 -1
- package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/browser/driver/expo/ExpoDriver.js.map +1 -1
- package/browser/driver/expo/ExpoQueryRunner.js +2 -2
- package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/browser/driver/mongodb/MongoConnectionOptions.d.ts +1 -2
- package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
- package/browser/driver/mongodb/MongoDriver.js.map +1 -1
- package/browser/driver/mongodb/MongoQueryRunner.d.ts +0 -1
- package/browser/driver/mongodb/typings.d.ts +0 -8
- package/browser/driver/mongodb/typings.js +0 -1
- package/browser/driver/mongodb/typings.js.map +1 -1
- package/browser/driver/mysql/MysqlConnectionCredentialsOptions.d.ts +1 -1
- package/browser/driver/mysql/MysqlConnectionCredentialsOptions.js.map +1 -1
- package/browser/driver/mysql/MysqlConnectionOptions.d.ts +1 -1
- package/browser/driver/mysql/MysqlConnectionOptions.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.js +12 -14
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.d.ts +0 -1
- package/browser/driver/mysql/MysqlQueryRunner.js +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/nativescript/NativescriptDriver.js.map +1 -1
- package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleConnectionCredentialsOptions.d.ts +1 -1
- package/browser/driver/oracle/OracleConnectionCredentialsOptions.js.map +1 -1
- package/browser/driver/oracle/OracleConnectionOptions.d.ts +1 -1
- package/browser/driver/oracle/OracleConnectionOptions.js.map +1 -1
- package/browser/driver/oracle/OracleDriver.js +18 -10
- package/browser/driver/oracle/OracleDriver.js.map +1 -1
- package/browser/driver/oracle/OracleQueryRunner.d.ts +0 -1
- package/browser/driver/oracle/OracleQueryRunner.js +8 -10
- package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresConnectionCredentialsOptions.d.ts +1 -2
- package/browser/driver/postgres/PostgresConnectionCredentialsOptions.js.map +1 -1
- package/browser/driver/postgres/PostgresConnectionOptions.d.ts +1 -1
- package/browser/driver/postgres/PostgresConnectionOptions.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.js +11 -6
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.d.ts +1 -2
- package/browser/driver/postgres/PostgresQueryRunner.js +35 -12
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/react-native/ReactNativeDriver.js +4 -6
- package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
- package/browser/driver/react-native/ReactNativeQueryRunner.js +2 -2
- package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapDriver.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.d.ts +0 -1
- package/browser/driver/sap/SapQueryRunner.js +4 -4
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +1 -1
- package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -1
- package/browser/driver/spanner/SpannerConnectionOptions.d.ts +1 -1
- package/browser/driver/spanner/SpannerConnectionOptions.js.map +1 -1
- package/browser/driver/spanner/SpannerDriver.js.map +1 -1
- package/browser/driver/spanner/SpannerQueryRunner.d.ts +0 -1
- package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
- package/browser/driver/sqlite/SqliteDriver.js +2 -2
- package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
- package/browser/driver/sqlite/SqliteQueryRunner.js +3 -2
- package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -6
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +0 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +4 -4
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqljs/SqljsDriver.js +1 -2
- package/browser/driver/sqljs/SqljsDriver.js.map +1 -1
- package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerConnectionCredentialsOptions.d.ts +1 -1
- package/browser/driver/sqlserver/SqlServerConnectionCredentialsOptions.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerConnectionOptions.d.ts +1 -1
- package/browser/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +0 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +9 -7
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/driver/types/ColumnTypes.d.ts +1 -1
- package/browser/driver/types/ColumnTypes.js.map +1 -1
- package/browser/entity-manager/EntityManager.d.ts +4 -2
- package/browser/entity-manager/EntityManager.js +4 -2
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/entity-manager/MongoEntityManager.js +1 -1
- package/browser/entity-manager/MongoEntityManager.js.map +1 -1
- package/browser/entity-schema/EntitySchemaTransformer.js +2 -3
- package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/browser/error/EntityMetadataNotFoundError.js.map +1 -1
- package/browser/error/EntityNotFoundError.js.map +1 -1
- package/browser/error/FindRelationsNotFoundError.js.map +1 -1
- package/browser/error/MissingJoinColumnError.js.map +1 -1
- package/browser/error/MissingJoinTableError.js.map +1 -1
- package/browser/error/QueryFailedError.js.map +1 -1
- package/browser/error/RepositoryNotTreeError.js.map +1 -1
- package/browser/error/TypeORMError.js.map +1 -1
- package/browser/find-options/FindOperator.js.map +1 -1
- package/browser/find-options/FindOptionsOrder.d.ts +0 -1
- package/browser/find-options/FindOptionsRelations.d.ts +0 -1
- package/browser/find-options/FindOptionsSelect.d.ts +0 -1
- package/browser/find-options/FindOptionsUtils.js +1 -1
- package/browser/find-options/FindOptionsUtils.js.map +1 -1
- package/browser/find-options/FindOptionsWhere.d.ts +0 -1
- package/browser/find-options/operator/Raw.js.map +1 -1
- package/browser/globals.js.map +1 -1
- package/browser/logger/AbstractLogger.js.map +1 -1
- package/browser/logger/AdvancedConsoleLogger.js +1 -2
- package/browser/logger/AdvancedConsoleLogger.js.map +1 -1
- package/browser/logger/DebugLogger.js +1 -2
- package/browser/logger/DebugLogger.js.map +1 -1
- package/browser/logger/FileLogger.js +2 -3
- package/browser/logger/FileLogger.js.map +1 -1
- package/browser/logger/LoggerFactory.js.map +1 -1
- package/browser/logger/SimpleConsoleLogger.js +1 -2
- package/browser/logger/SimpleConsoleLogger.js.map +1 -1
- package/browser/metadata/CheckMetadata.js.map +1 -1
- package/browser/metadata/ColumnMetadata.js +19 -15
- package/browser/metadata/ColumnMetadata.js.map +1 -1
- package/browser/metadata/EmbeddedMetadata.js +1 -1
- package/browser/metadata/EmbeddedMetadata.js.map +1 -1
- package/browser/metadata/EntityListenerMetadata.js.map +1 -1
- package/browser/metadata/EntityMetadata.js +3 -7
- package/browser/metadata/EntityMetadata.js.map +1 -1
- package/browser/metadata/ExclusionMetadata.js.map +1 -1
- package/browser/metadata/IndexMetadata.js.map +1 -1
- package/browser/metadata/RelationIdMetadata.js.map +1 -1
- package/browser/metadata/RelationMetadata.js.map +1 -1
- package/browser/metadata/UniqueMetadata.js.map +1 -1
- package/browser/metadata-args/MetadataArgsStorage.js.map +1 -1
- package/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataBuilder.js +5 -8
- package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +7 -8
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/MetadataUtils.js.map +1 -1
- package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -3
- package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
- package/browser/migration/MigrationExecutor.js +2 -2
- package/browser/migration/MigrationExecutor.js.map +1 -1
- package/browser/naming-strategy/DefaultNamingStrategy.js.map +1 -1
- package/browser/naming-strategy/LegacyOracleNamingStrategy.js.map +1 -1
- package/browser/persistence/EntityPersistExecutor.js.map +1 -1
- package/browser/persistence/Subject.js.map +1 -1
- package/browser/persistence/SubjectChangedColumnsComputer.js.map +1 -1
- package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
- package/browser/persistence/SubjectExecutor.js +3 -3
- package/browser/persistence/SubjectExecutor.js.map +1 -1
- package/browser/persistence/{SubjectTopoligicalSorter.d.ts → SubjectTopologicalSorter.d.ts} +1 -1
- package/browser/persistence/{SubjectTopoligicalSorter.js → SubjectTopologicalSorter.js} +2 -2
- package/browser/persistence/SubjectTopologicalSorter.js.map +1 -0
- package/browser/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
- package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
- package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +1 -2
- package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
- package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
- package/browser/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
- package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/browser/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
- package/browser/platform/BrowserPlatformTools.js.map +1 -1
- package/browser/platform/PlatformTools.d.ts +0 -1
- package/browser/platform/PlatformTools.js +3 -9
- package/browser/platform/PlatformTools.js.map +1 -1
- package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/InsertQueryBuilder.js +15 -15
- package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
- package/browser/query-builder/JoinAttribute.js.map +1 -1
- package/browser/query-builder/QueryBuilder.d.ts +1 -1
- package/browser/query-builder/QueryBuilder.js +12 -14
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/QueryExpressionMap.js +2 -2
- package/browser/query-builder/QueryExpressionMap.js.map +1 -1
- package/browser/query-builder/RelationIdLoader.js.map +1 -1
- package/browser/query-builder/RelationLoader.js.map +1 -1
- package/browser/query-builder/RelationQueryBuilder.js.map +1 -1
- package/browser/query-builder/RelationRemover.js.map +1 -1
- package/browser/query-builder/RelationUpdater.js.map +1 -1
- package/browser/query-builder/ReturningResultsEntityUpdator.js +5 -2
- package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.d.ts +4 -5
- package/browser/query-builder/SelectQueryBuilder.js +23 -22
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/browser/query-builder/relation-count/RelationCountLoader.js.map +1 -1
- package/browser/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js +2 -2
- package/browser/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js +2 -2
- package/browser/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js.map +1 -1
- package/browser/query-builder/transformer/DocumentToEntityTransformer.js.map +1 -1
- package/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
- package/browser/query-builder/transformer/PlainObjectToNewEntityTransformer.js.map +1 -1
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +9 -9
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -88
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/browser/query-runner/BaseQueryRunner.js.map +1 -1
- package/browser/query-runner/QueryLock.js.map +1 -1
- package/browser/query-runner/QueryRunner.d.ts +0 -1
- package/browser/repository/BaseEntity.js.map +1 -1
- package/browser/repository/Repository.d.ts +2 -0
- package/browser/repository/Repository.js +2 -0
- package/browser/repository/Repository.js.map +1 -1
- package/browser/repository/TreeRepository.js.map +1 -1
- package/browser/schema-builder/RdbmsSchemaBuilder.js +2 -1
- package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/browser/schema-builder/table/Table.js +2 -2
- package/browser/schema-builder/table/Table.js.map +1 -1
- package/browser/schema-builder/table/TableColumn.js.map +1 -1
- package/browser/schema-builder/util/ViewUtils.js.map +1 -1
- package/browser/schema-builder/view/View.js.map +1 -1
- package/browser/subscriber/Broadcaster.js +6 -6
- package/browser/subscriber/Broadcaster.js.map +1 -1
- package/browser/subscriber/BroadcasterResult.js.map +1 -1
- package/browser/util/ApplyValueTransformers.js.map +1 -1
- package/browser/util/DateUtils.js.map +1 -1
- package/browser/util/DepGraph.js +2 -2
- package/browser/util/DepGraph.js.map +1 -1
- package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/browser/util/ImportUtils.js +23 -35
- package/browser/util/ImportUtils.js.map +1 -1
- package/browser/util/ObjectUtils.js.map +1 -1
- package/browser/util/OrmUtils.js.map +1 -1
- package/browser/util/PathUtils.js +1 -1
- package/browser/util/PathUtils.js.map +1 -1
- package/browser/util/RandomGenerator.js.map +1 -1
- package/browser/util/StringUtils.js.map +1 -1
- package/browser/util/TreeRepositoryUtils.js +3 -6
- package/browser/util/TreeRepositoryUtils.js.map +1 -1
- package/cache/DbQueryResultCache.js +1 -1
- package/cache/DbQueryResultCache.js.map +1 -1
- package/cache/QueryResultCache.d.ts +4 -2
- package/cache/QueryResultCache.js.map +1 -1
- package/cache/QueryResultCacheFactory.js.map +1 -1
- package/cache/RedisQueryResultCache.js +1 -1
- package/cache/RedisQueryResultCache.js.map +1 -1
- package/cli-ts-node-esm.js.map +1 -1
- package/commands/CacheClearCommand.js.map +1 -1
- package/commands/CommandUtils.d.ts +1 -1
- package/commands/CommandUtils.js +18 -16
- package/commands/CommandUtils.js.map +1 -1
- package/commands/EntityCreateCommand.js.map +1 -1
- package/commands/InitCommand.js +2 -2
- package/commands/InitCommand.js.map +1 -1
- package/commands/MigrationCreateCommand.js.map +1 -1
- package/commands/MigrationGenerateCommand.js.map +1 -1
- package/commands/MigrationRevertCommand.js +2 -2
- package/commands/MigrationRevertCommand.js.map +1 -1
- package/commands/MigrationRunCommand.js +2 -2
- package/commands/MigrationRunCommand.js.map +1 -1
- package/commands/MigrationShowCommand.js.map +1 -1
- package/commands/QueryCommand.js.map +1 -1
- package/commands/SchemaDropCommand.js.map +1 -1
- package/commands/SchemaLogCommand.js.map +1 -1
- package/commands/SchemaSyncCommand.js.map +1 -1
- package/commands/SubscriberCreateCommand.js.map +1 -1
- package/commands/VersionCommand.js.map +1 -1
- package/connection/ConnectionManager.js.map +1 -1
- package/connection/ConnectionMetadataBuilder.js.map +1 -1
- package/connection/ConnectionOptionsReader.d.ts +4 -4
- package/connection/ConnectionOptionsReader.js.map +1 -1
- package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
- package/container.js +2 -3
- package/container.js.map +1 -1
- package/data-source/DataSource.d.ts +2 -0
- package/data-source/DataSource.js +5 -1
- package/data-source/DataSource.js.map +1 -1
- package/decorator/Check.js +1 -2
- package/decorator/Check.js.map +1 -1
- package/decorator/EntityRepository.js +1 -2
- package/decorator/EntityRepository.js.map +1 -1
- package/decorator/Exclusion.js +1 -2
- package/decorator/Exclusion.js.map +1 -1
- package/decorator/Generated.js +1 -2
- package/decorator/Generated.js.map +1 -1
- package/decorator/Index.js +1 -2
- package/decorator/Index.js.map +1 -1
- package/decorator/Unique.js +1 -2
- package/decorator/Unique.js.map +1 -1
- package/decorator/columns/Column.js +1 -2
- package/decorator/columns/Column.js.map +1 -1
- package/decorator/columns/CreateDateColumn.js +1 -2
- package/decorator/columns/CreateDateColumn.js.map +1 -1
- package/decorator/columns/DeleteDateColumn.js +1 -2
- package/decorator/columns/DeleteDateColumn.js.map +1 -1
- package/decorator/columns/ObjectIdColumn.js +1 -2
- package/decorator/columns/ObjectIdColumn.js.map +1 -1
- package/decorator/columns/PrimaryColumn.js +1 -2
- package/decorator/columns/PrimaryColumn.js.map +1 -1
- package/decorator/columns/PrimaryGeneratedColumn.js +1 -2
- package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
- package/decorator/columns/UpdateDateColumn.js +1 -2
- package/decorator/columns/UpdateDateColumn.js.map +1 -1
- package/decorator/columns/VersionColumn.js +1 -2
- package/decorator/columns/VersionColumn.js.map +1 -1
- package/decorator/columns/ViewColumn.js +1 -2
- package/decorator/columns/ViewColumn.js.map +1 -1
- package/decorator/columns/VirtualColumn.js +2 -3
- package/decorator/columns/VirtualColumn.js.map +1 -1
- package/decorator/entity/ChildEntity.js +1 -2
- package/decorator/entity/ChildEntity.js.map +1 -1
- package/decorator/entity/Entity.js +1 -2
- package/decorator/entity/Entity.js.map +1 -1
- package/decorator/entity/TableInheritance.js +1 -2
- package/decorator/entity/TableInheritance.js.map +1 -1
- package/decorator/entity-view/ViewEntity.js +1 -2
- package/decorator/entity-view/ViewEntity.js.map +1 -1
- package/decorator/listeners/AfterInsert.js +1 -2
- package/decorator/listeners/AfterInsert.js.map +1 -1
- package/decorator/listeners/AfterLoad.js +1 -2
- package/decorator/listeners/AfterLoad.js.map +1 -1
- package/decorator/listeners/AfterRecover.js +1 -2
- package/decorator/listeners/AfterRecover.js.map +1 -1
- package/decorator/listeners/AfterRemove.js +1 -2
- package/decorator/listeners/AfterRemove.js.map +1 -1
- package/decorator/listeners/AfterSoftRemove.js +1 -2
- package/decorator/listeners/AfterSoftRemove.js.map +1 -1
- package/decorator/listeners/AfterUpdate.js +1 -2
- package/decorator/listeners/AfterUpdate.js.map +1 -1
- package/decorator/listeners/BeforeInsert.js +1 -2
- package/decorator/listeners/BeforeInsert.js.map +1 -1
- package/decorator/listeners/BeforeRecover.js +1 -2
- package/decorator/listeners/BeforeRecover.js.map +1 -1
- package/decorator/listeners/BeforeRemove.js +1 -2
- package/decorator/listeners/BeforeRemove.js.map +1 -1
- package/decorator/listeners/BeforeSoftRemove.js +1 -2
- package/decorator/listeners/BeforeSoftRemove.js.map +1 -1
- package/decorator/listeners/BeforeUpdate.js +1 -2
- package/decorator/listeners/BeforeUpdate.js.map +1 -1
- package/decorator/listeners/EventSubscriber.js +1 -2
- package/decorator/listeners/EventSubscriber.js.map +1 -1
- package/decorator/relations/JoinColumn.js +1 -2
- package/decorator/relations/JoinColumn.js.map +1 -1
- package/decorator/relations/JoinTable.js +1 -2
- package/decorator/relations/JoinTable.js.map +1 -1
- package/decorator/relations/ManyToMany.js +1 -2
- package/decorator/relations/ManyToMany.js.map +1 -1
- package/decorator/relations/ManyToOne.js +1 -2
- package/decorator/relations/ManyToOne.js.map +1 -1
- package/decorator/relations/OneToMany.js +1 -2
- package/decorator/relations/OneToMany.js.map +1 -1
- package/decorator/relations/OneToOne.d.ts +4 -4
- package/decorator/relations/OneToOne.js +3 -4
- package/decorator/relations/OneToOne.js.map +1 -1
- package/decorator/relations/RelationCount.js +1 -2
- package/decorator/relations/RelationCount.js.map +1 -1
- package/decorator/relations/RelationId.js +1 -2
- package/decorator/relations/RelationId.js.map +1 -1
- package/decorator/tree/Tree.js +1 -2
- package/decorator/tree/Tree.js.map +1 -1
- package/decorator/tree/TreeChildren.js +1 -2
- package/decorator/tree/TreeChildren.js.map +1 -1
- package/decorator/tree/TreeLevelColumn.js +1 -2
- package/decorator/tree/TreeLevelColumn.js.map +1 -1
- package/decorator/tree/TreeParent.js +1 -2
- package/decorator/tree/TreeParent.js.map +1 -1
- package/driver/DriverFactory.js.map +1 -1
- package/driver/DriverUtils.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.d.ts +1 -1
- package/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlDriver.js +10 -10
- package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +0 -1
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +2 -2
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/driver/aurora-postgres/AuroraPostgresDriver.js.map +1 -1
- package/driver/aurora-postgres/AuroraPostgresQueryRunner.js +2 -2
- package/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.js +2 -2
- package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +4 -0
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/driver/capacitor/CapacitorDriver.js.map +1 -1
- package/driver/capacitor/CapacitorQueryRunner.js +2 -2
- package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/driver/cockroachdb/CockroachConnectionCredentialsOptions.d.ts +1 -2
- package/driver/cockroachdb/CockroachConnectionCredentialsOptions.js.map +1 -1
- package/driver/cockroachdb/CockroachConnectionOptions.d.ts +1 -1
- package/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
- package/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.d.ts +0 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +8 -6
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/cordova/CordovaDriver.js.map +1 -1
- package/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/driver/expo/ExpoDriver.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.js +2 -2
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/mongodb/MongoConnectionOptions.d.ts +1 -2
- package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
- package/driver/mongodb/MongoDriver.js.map +1 -1
- package/driver/mongodb/MongoQueryRunner.d.ts +0 -1
- package/driver/mongodb/typings.d.ts +0 -8
- package/driver/mongodb/typings.js +0 -1
- package/driver/mongodb/typings.js.map +1 -1
- package/driver/mysql/MysqlConnectionCredentialsOptions.d.ts +1 -1
- package/driver/mysql/MysqlConnectionCredentialsOptions.js.map +1 -1
- package/driver/mysql/MysqlConnectionOptions.d.ts +1 -1
- package/driver/mysql/MysqlConnectionOptions.js.map +1 -1
- package/driver/mysql/MysqlDriver.js +12 -14
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.d.ts +0 -1
- package/driver/mysql/MysqlQueryRunner.js +1 -1
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/nativescript/NativescriptDriver.js.map +1 -1
- package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/driver/oracle/OracleConnectionCredentialsOptions.d.ts +1 -1
- package/driver/oracle/OracleConnectionCredentialsOptions.js.map +1 -1
- package/driver/oracle/OracleConnectionOptions.d.ts +1 -1
- package/driver/oracle/OracleConnectionOptions.js.map +1 -1
- package/driver/oracle/OracleDriver.js +18 -10
- package/driver/oracle/OracleDriver.js.map +1 -1
- package/driver/oracle/OracleQueryRunner.d.ts +0 -1
- package/driver/oracle/OracleQueryRunner.js +8 -10
- package/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresConnectionCredentialsOptions.d.ts +1 -2
- package/driver/postgres/PostgresConnectionCredentialsOptions.js.map +1 -1
- package/driver/postgres/PostgresConnectionOptions.d.ts +1 -1
- package/driver/postgres/PostgresConnectionOptions.js.map +1 -1
- package/driver/postgres/PostgresDriver.js +11 -6
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.d.ts +1 -2
- package/driver/postgres/PostgresQueryRunner.js +35 -12
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/react-native/ReactNativeDriver.js +4 -6
- package/driver/react-native/ReactNativeDriver.js.map +1 -1
- package/driver/react-native/ReactNativeQueryRunner.js +2 -2
- package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/sap/SapQueryRunner.d.ts +0 -1
- package/driver/sap/SapQueryRunner.js +4 -4
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +1 -1
- package/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -1
- package/driver/spanner/SpannerConnectionOptions.d.ts +1 -1
- package/driver/spanner/SpannerConnectionOptions.js.map +1 -1
- package/driver/spanner/SpannerDriver.js.map +1 -1
- package/driver/spanner/SpannerQueryRunner.d.ts +0 -1
- package/driver/spanner/SpannerQueryRunner.js.map +1 -1
- package/driver/sqlite/SqliteDriver.js +2 -2
- package/driver/sqlite/SqliteDriver.js.map +1 -1
- package/driver/sqlite/SqliteQueryRunner.js +3 -2
- package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -6
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +0 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +4 -4
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqljs/SqljsDriver.js +1 -2
- package/driver/sqljs/SqljsDriver.js.map +1 -1
- package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/driver/sqlserver/SqlServerConnectionCredentialsOptions.d.ts +1 -1
- package/driver/sqlserver/SqlServerConnectionCredentialsOptions.js.map +1 -1
- package/driver/sqlserver/SqlServerConnectionOptions.d.ts +1 -1
- package/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
- package/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.d.ts +0 -1
- package/driver/sqlserver/SqlServerQueryRunner.js +9 -7
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/driver/types/ColumnTypes.d.ts +1 -1
- package/driver/types/ColumnTypes.js.map +1 -1
- package/driver/types/MetadataTableType.js +1 -1
- package/driver/types/MetadataTableType.js.map +1 -1
- package/entity-manager/EntityManager.d.ts +4 -2
- package/entity-manager/EntityManager.js +4 -2
- package/entity-manager/EntityManager.js.map +1 -1
- package/entity-manager/MongoEntityManager.js +1 -1
- package/entity-manager/MongoEntityManager.js.map +1 -1
- package/entity-schema/EntitySchemaTransformer.js +2 -3
- package/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/error/EntityMetadataNotFoundError.js.map +1 -1
- package/error/EntityNotFoundError.js.map +1 -1
- package/error/FindRelationsNotFoundError.js.map +1 -1
- package/error/MissingJoinColumnError.js.map +1 -1
- package/error/MissingJoinTableError.js.map +1 -1
- package/error/QueryFailedError.js.map +1 -1
- package/error/RepositoryNotTreeError.js.map +1 -1
- package/error/TypeORMError.js.map +1 -1
- package/find-options/FindOperator.js.map +1 -1
- package/find-options/FindOptionsOrder.d.ts +0 -1
- package/find-options/FindOptionsRelations.d.ts +0 -1
- package/find-options/FindOptionsSelect.d.ts +0 -1
- package/find-options/FindOptionsUtils.js +1 -1
- package/find-options/FindOptionsUtils.js.map +1 -1
- package/find-options/FindOptionsWhere.d.ts +0 -1
- package/find-options/operator/And.js +1 -2
- package/find-options/operator/And.js.map +1 -1
- package/find-options/operator/Any.js +1 -2
- package/find-options/operator/Any.js.map +1 -1
- package/find-options/operator/ArrayContainedBy.js +1 -2
- package/find-options/operator/ArrayContainedBy.js.map +1 -1
- package/find-options/operator/ArrayContains.js +1 -2
- package/find-options/operator/ArrayContains.js.map +1 -1
- package/find-options/operator/ArrayOverlap.js +1 -2
- package/find-options/operator/ArrayOverlap.js.map +1 -1
- package/find-options/operator/Between.js +1 -2
- package/find-options/operator/Between.js.map +1 -1
- package/find-options/operator/Equal.js +1 -2
- package/find-options/operator/Equal.js.map +1 -1
- package/find-options/operator/ILike.js +1 -2
- package/find-options/operator/ILike.js.map +1 -1
- package/find-options/operator/In.js +1 -2
- package/find-options/operator/In.js.map +1 -1
- package/find-options/operator/IsNull.js +1 -2
- package/find-options/operator/IsNull.js.map +1 -1
- package/find-options/operator/JsonContains.js +1 -2
- package/find-options/operator/JsonContains.js.map +1 -1
- package/find-options/operator/LessThan.js +1 -2
- package/find-options/operator/LessThan.js.map +1 -1
- package/find-options/operator/LessThanOrEqual.js +1 -2
- package/find-options/operator/LessThanOrEqual.js.map +1 -1
- package/find-options/operator/Like.js +1 -2
- package/find-options/operator/Like.js.map +1 -1
- package/find-options/operator/MoreThan.js +1 -2
- package/find-options/operator/MoreThan.js.map +1 -1
- package/find-options/operator/MoreThanOrEqual.js +1 -2
- package/find-options/operator/MoreThanOrEqual.js.map +1 -1
- package/find-options/operator/Not.js +1 -2
- package/find-options/operator/Not.js.map +1 -1
- package/find-options/operator/Or.js +1 -2
- package/find-options/operator/Or.js.map +1 -1
- package/find-options/operator/Raw.js +1 -2
- package/find-options/operator/Raw.js.map +1 -1
- package/globals.js +14 -15
- package/globals.js.map +1 -1
- package/logger/AbstractLogger.js.map +1 -1
- package/logger/AdvancedConsoleLogger.js +1 -2
- package/logger/AdvancedConsoleLogger.js.map +1 -1
- package/logger/DebugLogger.js +1 -2
- package/logger/DebugLogger.js.map +1 -1
- package/logger/FileLogger.js +2 -3
- package/logger/FileLogger.js.map +1 -1
- package/logger/LoggerFactory.js.map +1 -1
- package/logger/SimpleConsoleLogger.js +1 -2
- package/logger/SimpleConsoleLogger.js.map +1 -1
- package/metadata/CheckMetadata.js.map +1 -1
- package/metadata/ColumnMetadata.js +19 -15
- package/metadata/ColumnMetadata.js.map +1 -1
- package/metadata/EmbeddedMetadata.js +1 -1
- package/metadata/EmbeddedMetadata.js.map +1 -1
- package/metadata/EntityListenerMetadata.js.map +1 -1
- package/metadata/EntityMetadata.js +3 -7
- package/metadata/EntityMetadata.js.map +1 -1
- package/metadata/ExclusionMetadata.js.map +1 -1
- package/metadata/IndexMetadata.js.map +1 -1
- package/metadata/RelationIdMetadata.js.map +1 -1
- package/metadata/RelationMetadata.js.map +1 -1
- package/metadata/UniqueMetadata.js.map +1 -1
- package/metadata-args/MetadataArgsStorage.js.map +1 -1
- package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/EntityMetadataBuilder.js +5 -8
- package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/metadata-builder/JunctionEntityMetadataBuilder.js +7 -8
- package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/MetadataUtils.js.map +1 -1
- package/metadata-builder/RelationJoinColumnBuilder.js +2 -3
- package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
- package/migration/MigrationExecutor.js +2 -2
- package/migration/MigrationExecutor.js.map +1 -1
- package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
- package/naming-strategy/LegacyOracleNamingStrategy.js.map +1 -1
- package/package.json +1 -1
- package/persistence/EntityPersistExecutor.js.map +1 -1
- package/persistence/Subject.js.map +1 -1
- package/persistence/SubjectChangedColumnsComputer.js.map +1 -1
- package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
- package/persistence/SubjectExecutor.js +3 -3
- package/persistence/SubjectExecutor.js.map +1 -1
- package/persistence/{SubjectTopoligicalSorter.d.ts → SubjectTopologicalSorter.d.ts} +1 -1
- package/persistence/{SubjectTopoligicalSorter.js → SubjectTopologicalSorter.js} +4 -4
- package/persistence/SubjectTopologicalSorter.js.map +1 -0
- package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
- package/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
- package/persistence/subject-builder/OneToManySubjectBuilder.js +1 -2
- package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
- package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
- package/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
- package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
- package/platform/PlatformTools.d.ts +0 -1
- package/platform/PlatformTools.js +12 -18
- package/platform/PlatformTools.js.map +1 -1
- package/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/query-builder/InsertQueryBuilder.js +15 -15
- package/query-builder/InsertQueryBuilder.js.map +1 -1
- package/query-builder/JoinAttribute.js.map +1 -1
- package/query-builder/QueryBuilder.d.ts +1 -1
- package/query-builder/QueryBuilder.js +12 -14
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/QueryExpressionMap.js +2 -2
- package/query-builder/QueryExpressionMap.js.map +1 -1
- package/query-builder/RelationIdLoader.js.map +1 -1
- package/query-builder/RelationLoader.js.map +1 -1
- package/query-builder/RelationQueryBuilder.js.map +1 -1
- package/query-builder/RelationRemover.js.map +1 -1
- package/query-builder/RelationUpdater.js.map +1 -1
- package/query-builder/ReturningResultsEntityUpdator.js +5 -2
- package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
- package/query-builder/SelectQueryBuilder.d.ts +4 -5
- package/query-builder/SelectQueryBuilder.js +23 -22
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/query-builder/index.js +1 -2
- package/query-builder/index.js.map +1 -1
- package/query-builder/relation-count/RelationCountLoader.js.map +1 -1
- package/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js +2 -2
- package/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js.map +1 -1
- package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js +2 -2
- package/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js.map +1 -1
- package/query-builder/transformer/DocumentToEntityTransformer.js.map +1 -1
- package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
- package/query-builder/transformer/PlainObjectToNewEntityTransformer.js.map +1 -1
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +9 -9
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -88
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/query-runner/BaseQueryRunner.js.map +1 -1
- package/query-runner/QueryLock.js.map +1 -1
- package/query-runner/QueryRunner.d.ts +0 -1
- package/repository/BaseEntity.js.map +1 -1
- package/repository/Repository.d.ts +2 -0
- package/repository/Repository.js +2 -0
- package/repository/Repository.js.map +1 -1
- package/repository/TreeRepository.js.map +1 -1
- package/schema-builder/RdbmsSchemaBuilder.js +2 -1
- package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/schema-builder/table/Table.js +2 -2
- package/schema-builder/table/Table.js.map +1 -1
- package/schema-builder/table/TableColumn.js.map +1 -1
- package/schema-builder/util/ViewUtils.js.map +1 -1
- package/schema-builder/view/View.js.map +1 -1
- package/subscriber/Broadcaster.js +6 -6
- package/subscriber/Broadcaster.js.map +1 -1
- package/subscriber/BroadcasterResult.js.map +1 -1
- package/util/ApplyValueTransformers.js.map +1 -1
- package/util/DateUtils.js.map +1 -1
- package/util/DepGraph.js +2 -2
- package/util/DepGraph.js.map +1 -1
- package/util/DirectoryExportedClassesLoader.js +2 -3
- package/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/util/ImportUtils.js +24 -37
- package/util/ImportUtils.js.map +1 -1
- package/util/ObjectUtils.js.map +1 -1
- package/util/OrmUtils.js.map +1 -1
- package/util/PathUtils.js +4 -5
- package/util/PathUtils.js.map +1 -1
- package/util/RandomGenerator.js.map +1 -1
- package/util/StringUtils.js +6 -7
- package/util/StringUtils.js.map +1 -1
- package/util/TreeRepositoryUtils.js +3 -6
- package/util/TreeRepositoryUtils.js.map +1 -1
- package/browser/persistence/SubjectTopoligicalSorter.js.map +0 -1
- package/persistence/SubjectTopoligicalSorter.js.map +0 -1
|
@@ -15,6 +15,10 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
15
15
|
this.rawRelationIdResults = rawRelationIdResults;
|
|
16
16
|
this.rawRelationCountResults = rawRelationCountResults;
|
|
17
17
|
this.queryRunner = queryRunner;
|
|
18
|
+
this.pojo = this.expressionMap.options.includes("create-pojo");
|
|
19
|
+
this.selections = new Set(this.expressionMap.selects.map((s) => s.selection));
|
|
20
|
+
this.aliasCache = new Map();
|
|
21
|
+
this.columnsCache = new Map();
|
|
18
22
|
}
|
|
19
23
|
// -------------------------------------------------------------------------
|
|
20
24
|
// Public Methods
|
|
@@ -26,17 +30,32 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
26
30
|
transform(rawResults, alias) {
|
|
27
31
|
const group = this.group(rawResults, alias);
|
|
28
32
|
const entities = [];
|
|
29
|
-
group.
|
|
33
|
+
for (const results of group.values()) {
|
|
30
34
|
const entity = this.transformRawResultsGroup(results, alias);
|
|
31
|
-
if (entity !== undefined
|
|
32
|
-
!Object.values(entity).every((value) => value === null))
|
|
35
|
+
if (entity !== undefined)
|
|
33
36
|
entities.push(entity);
|
|
34
|
-
}
|
|
37
|
+
}
|
|
35
38
|
return entities;
|
|
36
39
|
}
|
|
37
40
|
// -------------------------------------------------------------------------
|
|
38
41
|
// Protected Methods
|
|
39
42
|
// -------------------------------------------------------------------------
|
|
43
|
+
/**
|
|
44
|
+
* Build an alias from a name and column name.
|
|
45
|
+
*/
|
|
46
|
+
buildAlias(aliasName, columnName) {
|
|
47
|
+
let aliases = this.aliasCache.get(aliasName);
|
|
48
|
+
if (!aliases) {
|
|
49
|
+
aliases = new Map();
|
|
50
|
+
this.aliasCache.set(aliasName, aliases);
|
|
51
|
+
}
|
|
52
|
+
let columnAlias = aliases.get(columnName);
|
|
53
|
+
if (!columnAlias) {
|
|
54
|
+
columnAlias = DriverUtils.buildAlias(this.driver, undefined, aliasName, columnName);
|
|
55
|
+
aliases.set(columnName, columnAlias);
|
|
56
|
+
}
|
|
57
|
+
return columnAlias;
|
|
58
|
+
}
|
|
40
59
|
/**
|
|
41
60
|
* Groups given raw results by ids of given alias.
|
|
42
61
|
*/
|
|
@@ -44,12 +63,12 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
44
63
|
const map = new Map();
|
|
45
64
|
const keys = [];
|
|
46
65
|
if (alias.metadata.tableType === "view") {
|
|
47
|
-
keys.push(...alias.metadata.columns.map((column) =>
|
|
66
|
+
keys.push(...alias.metadata.columns.map((column) => this.buildAlias(alias.name, column.databaseName)));
|
|
48
67
|
}
|
|
49
68
|
else {
|
|
50
|
-
keys.push(...alias.metadata.primaryColumns.map((column) =>
|
|
69
|
+
keys.push(...alias.metadata.primaryColumns.map((column) => this.buildAlias(alias.name, column.databaseName)));
|
|
51
70
|
}
|
|
52
|
-
|
|
71
|
+
for (const rawResult of rawResults) {
|
|
53
72
|
const id = keys
|
|
54
73
|
.map((key) => {
|
|
55
74
|
const keyValue = rawResult[key];
|
|
@@ -69,7 +88,7 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
69
88
|
else {
|
|
70
89
|
items.push(rawResult);
|
|
71
90
|
}
|
|
72
|
-
}
|
|
91
|
+
}
|
|
73
92
|
return map;
|
|
74
93
|
}
|
|
75
94
|
/**
|
|
@@ -79,7 +98,7 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
79
98
|
// let hasColumns = false; // , hasEmbeddedColumns = false, hasParentColumns = false, hasParentEmbeddedColumns = false;
|
|
80
99
|
let metadata = alias.metadata;
|
|
81
100
|
if (metadata.discriminatorColumn) {
|
|
82
|
-
const discriminatorValues = rawResults.map((result) => result[
|
|
101
|
+
const discriminatorValues = rawResults.map((result) => result[this.buildAlias(alias.name, alias.metadata.discriminatorColumn.databaseName)]);
|
|
83
102
|
const discriminatorMetadata = metadata.childEntityMetadatas.find((childEntityMetadata) => {
|
|
84
103
|
return (typeof discriminatorValues.find((value) => value ===
|
|
85
104
|
childEntityMetadata.discriminatorValue) !== "undefined");
|
|
@@ -89,7 +108,7 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
89
108
|
}
|
|
90
109
|
let entity = metadata.create(this.queryRunner, {
|
|
91
110
|
fromDeserializer: true,
|
|
92
|
-
pojo: this.
|
|
111
|
+
pojo: this.pojo,
|
|
93
112
|
});
|
|
94
113
|
// get value from columns selections and put them into newly created entity
|
|
95
114
|
const hasColumns = this.transformColumns(rawResults, alias, entity, metadata);
|
|
@@ -103,7 +122,7 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
103
122
|
// if we don't have any selected column we should not return entity,
|
|
104
123
|
// except for the case when entity only contain a primary column as a relation to another entity
|
|
105
124
|
// in this case its absolutely possible our entity to not have any columns except a single relation
|
|
106
|
-
const hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.
|
|
125
|
+
const hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.every((column) => column.isVirtual === true); // todo: create metadata.hasOnlyVirtualPrimaryColumns
|
|
107
126
|
if (hasOnlyVirtualPrimaryColumns &&
|
|
108
127
|
(hasRelations || hasRelationIds || hasRelationCounts))
|
|
109
128
|
return entity;
|
|
@@ -112,55 +131,18 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
112
131
|
// get value from columns selections and put them into object
|
|
113
132
|
transformColumns(rawResults, alias, entity, metadata) {
|
|
114
133
|
let hasData = false;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
if (value
|
|
122
|
-
return;
|
|
123
|
-
// if user does not selected the whole entity or he used partial selection and does not select this particular column
|
|
124
|
-
// then we don't add this column and its value into the entity
|
|
125
|
-
if (!this.expressionMap.selects.find((select) => select.selection === alias.name ||
|
|
126
|
-
select.selection ===
|
|
127
|
-
alias.name + "." + column.propertyPath))
|
|
128
|
-
return;
|
|
129
|
-
column.setEntityValue(entity, this.driver.prepareHydratedValue(value, column));
|
|
130
|
-
if (value !== null)
|
|
131
|
-
// we don't mark it as has data because if we will have all nulls in our object - we don't need such object
|
|
134
|
+
const result = rawResults[0];
|
|
135
|
+
for (const [key, column] of this.getColumnsToProcess(alias.name, metadata)) {
|
|
136
|
+
const value = result[key];
|
|
137
|
+
if (value === undefined)
|
|
138
|
+
continue;
|
|
139
|
+
// we don't mark it as has data because if we will have all nulls in our object - we don't need such object
|
|
140
|
+
else if (value !== null)
|
|
132
141
|
hasData = true;
|
|
133
|
-
|
|
134
|
-
// Set all embedded column values to null if all their child columns are null
|
|
135
|
-
if (entity) {
|
|
136
|
-
metadata.embeddeds.forEach((embedded) => {
|
|
137
|
-
if (embedded.propertyName in entity) {
|
|
138
|
-
entity[embedded.propertyName] = this.deeplyNullify(entity[embedded.propertyName]);
|
|
139
|
-
}
|
|
140
|
-
});
|
|
142
|
+
column.setEntityValue(entity, this.driver.prepareHydratedValue(value, column));
|
|
141
143
|
}
|
|
142
144
|
return hasData;
|
|
143
145
|
}
|
|
144
|
-
/**
|
|
145
|
-
* Returns whether an object is an iterrable
|
|
146
|
-
* This is useful when trying to avoid objects such as Dates
|
|
147
|
-
*/
|
|
148
|
-
isIterrableObject(obj) {
|
|
149
|
-
const prototype = Object.prototype.toString.call(obj);
|
|
150
|
-
return prototype === "[object Object]" || prototype === "[object Array]";
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Deeply nullify an object if all its properties values are null or undefined
|
|
154
|
-
*/
|
|
155
|
-
deeplyNullify(obj) {
|
|
156
|
-
if (!this.isIterrableObject(obj))
|
|
157
|
-
return obj;
|
|
158
|
-
for (const key in obj) {
|
|
159
|
-
obj[key] = this.deeplyNullify(obj[key]);
|
|
160
|
-
}
|
|
161
|
-
const nullify = Object.values(obj).every((value) => value == null);
|
|
162
|
-
return nullify ? null : obj;
|
|
163
|
-
}
|
|
164
146
|
/**
|
|
165
147
|
* Transforms joined entities in the given raw results by a given alias and stores to the given (parent) entity
|
|
166
148
|
*/
|
|
@@ -168,38 +150,38 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
168
150
|
let hasData = false;
|
|
169
151
|
// let discriminatorValue: string = "";
|
|
170
152
|
// if (metadata.discriminatorColumn)
|
|
171
|
-
// discriminatorValue = rawResults[0][
|
|
172
|
-
this.expressionMap.joinAttributes
|
|
153
|
+
// discriminatorValue = rawResults[0][this.buildAlias(alias.name, alias.metadata.discriminatorColumn!.databaseName)];
|
|
154
|
+
for (const join of this.expressionMap.joinAttributes) {
|
|
173
155
|
// todo: we have problem here - when inner joins are used without selects it still create empty array
|
|
174
156
|
// skip joins without metadata
|
|
175
157
|
if (!join.metadata)
|
|
176
|
-
|
|
158
|
+
continue;
|
|
177
159
|
// if simple left or inner join was performed without selection then we don't need to do anything
|
|
178
160
|
if (!join.isSelected)
|
|
179
|
-
|
|
161
|
+
continue;
|
|
180
162
|
// this check need to avoid setting properties than not belong to entity when single table inheritance used. (todo: check if we still need it)
|
|
181
163
|
// const metadata = metadata.childEntityMetadatas.find(childEntityMetadata => discriminatorValue === childEntityMetadata.discriminatorValue);
|
|
182
164
|
if (join.relation &&
|
|
183
165
|
!metadata.relations.find((relation) => relation === join.relation))
|
|
184
|
-
|
|
166
|
+
continue;
|
|
185
167
|
// some checks to make sure this join is for current alias
|
|
186
168
|
if (join.mapToProperty) {
|
|
187
169
|
if (join.mapToPropertyParentAlias !== alias.name)
|
|
188
|
-
|
|
170
|
+
continue;
|
|
189
171
|
}
|
|
190
172
|
else {
|
|
191
173
|
if (!join.relation ||
|
|
192
174
|
join.parentAlias !== alias.name ||
|
|
193
175
|
join.relationPropertyPath !== join.relation.propertyPath)
|
|
194
|
-
|
|
176
|
+
continue;
|
|
195
177
|
}
|
|
196
178
|
// transform joined data into entities
|
|
197
179
|
let result = this.transform(rawResults, join.alias);
|
|
198
180
|
result = !join.isMany ? result[0] : result;
|
|
199
181
|
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
|
|
182
|
+
// if nothing was joined then simply continue
|
|
200
183
|
if (result === undefined)
|
|
201
|
-
|
|
202
|
-
return;
|
|
184
|
+
continue;
|
|
203
185
|
// if join was mapped to some property then save result to that property
|
|
204
186
|
if (join.mapToPropertyPropertyName) {
|
|
205
187
|
entity[join.mapToPropertyPropertyName] = result; // todo: fix embeds
|
|
@@ -209,19 +191,19 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
209
191
|
join.relation.setEntityValue(entity, result);
|
|
210
192
|
}
|
|
211
193
|
hasData = true;
|
|
212
|
-
}
|
|
194
|
+
}
|
|
213
195
|
return hasData;
|
|
214
196
|
}
|
|
215
197
|
transformRelationIds(rawSqlResults, alias, entity, metadata) {
|
|
216
198
|
let hasData = false;
|
|
217
|
-
this.rawRelationIdResults.
|
|
199
|
+
for (const [index, rawRelationIdResult,] of this.rawRelationIdResults.entries()) {
|
|
218
200
|
if (rawRelationIdResult.relationIdAttribute.parentAlias !==
|
|
219
201
|
alias.name)
|
|
220
|
-
|
|
202
|
+
continue;
|
|
221
203
|
const relation = rawRelationIdResult.relationIdAttribute.relation;
|
|
222
204
|
const valueMap = this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);
|
|
223
205
|
if (valueMap === undefined || valueMap === null) {
|
|
224
|
-
|
|
206
|
+
continue;
|
|
225
207
|
}
|
|
226
208
|
// prepare common data for this call
|
|
227
209
|
this.prepareDataForTransformRelationIds();
|
|
@@ -253,42 +235,66 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
253
235
|
mapToProperty(properties, entity, idMaps);
|
|
254
236
|
hasData = hasData || idMaps.length > 0;
|
|
255
237
|
}
|
|
256
|
-
}
|
|
238
|
+
}
|
|
257
239
|
return hasData;
|
|
258
240
|
}
|
|
259
241
|
transformRelationCounts(rawSqlResults, alias, entity) {
|
|
260
242
|
let hasData = false;
|
|
261
|
-
this.rawRelationCountResults
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
243
|
+
for (const rawRelationCountResult of this.rawRelationCountResults) {
|
|
244
|
+
if (rawRelationCountResult.relationCountAttribute.parentAlias !==
|
|
245
|
+
alias.name)
|
|
246
|
+
continue;
|
|
265
247
|
const relation = rawRelationCountResult.relationCountAttribute.relation;
|
|
266
248
|
let referenceColumnName;
|
|
267
249
|
if (relation.isOneToMany) {
|
|
268
250
|
referenceColumnName =
|
|
269
|
-
relation.inverseRelation.joinColumns[0]
|
|
270
|
-
.
|
|
251
|
+
relation.inverseRelation.joinColumns[0].referencedColumn
|
|
252
|
+
.databaseName; // todo: fix joinColumns[0]
|
|
271
253
|
}
|
|
272
254
|
else {
|
|
273
255
|
referenceColumnName = relation.isOwning
|
|
274
256
|
? relation.joinColumns[0].referencedColumn.databaseName
|
|
275
|
-
: relation.inverseRelation.joinColumns[0]
|
|
276
|
-
.
|
|
257
|
+
: relation.inverseRelation.joinColumns[0].referencedColumn
|
|
258
|
+
.databaseName;
|
|
277
259
|
}
|
|
278
|
-
const referenceColumnValue = rawSqlResults[0][
|
|
260
|
+
const referenceColumnValue = rawSqlResults[0][this.buildAlias(alias.name, referenceColumnName)]; // we use zero index since its grouped data // todo: selection with alias for entity columns wont work
|
|
279
261
|
if (referenceColumnValue !== undefined &&
|
|
280
262
|
referenceColumnValue !== null) {
|
|
281
263
|
entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = 0;
|
|
282
|
-
rawRelationCountResult.results
|
|
283
|
-
|
|
284
|
-
|
|
264
|
+
for (const result of rawRelationCountResult.results) {
|
|
265
|
+
if (result["parentId"] !== referenceColumnValue)
|
|
266
|
+
continue;
|
|
285
267
|
entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = parseInt(result["cnt"]);
|
|
286
268
|
hasData = true;
|
|
287
|
-
}
|
|
269
|
+
}
|
|
288
270
|
}
|
|
289
|
-
}
|
|
271
|
+
}
|
|
290
272
|
return hasData;
|
|
291
273
|
}
|
|
274
|
+
getColumnsToProcess(aliasName, metadata) {
|
|
275
|
+
let metadatas = this.columnsCache.get(aliasName);
|
|
276
|
+
if (!metadatas) {
|
|
277
|
+
metadatas = new Map();
|
|
278
|
+
this.columnsCache.set(aliasName, metadatas);
|
|
279
|
+
}
|
|
280
|
+
let columns = metadatas.get(metadata);
|
|
281
|
+
if (!columns) {
|
|
282
|
+
columns = metadata.columns
|
|
283
|
+
.filter((column) => !column.isVirtual &&
|
|
284
|
+
// if user does not selected the whole entity or he used partial selection and does not select this particular column
|
|
285
|
+
// then we don't add this column and its value into the entity
|
|
286
|
+
(this.selections.has(aliasName) ||
|
|
287
|
+
this.selections.has(`${aliasName}.${column.propertyPath}`)) &&
|
|
288
|
+
// if table inheritance is used make sure this column is not child's column
|
|
289
|
+
!metadata.childEntityMetadatas.some((childMetadata) => childMetadata.target === column.target))
|
|
290
|
+
.map((column) => [
|
|
291
|
+
this.buildAlias(aliasName, column.databaseName),
|
|
292
|
+
column,
|
|
293
|
+
]);
|
|
294
|
+
metadatas.set(metadata, columns);
|
|
295
|
+
}
|
|
296
|
+
return columns;
|
|
297
|
+
}
|
|
292
298
|
createValueMapFromJoinColumns(relation, parentAlias, rawSqlResults) {
|
|
293
299
|
let columns;
|
|
294
300
|
if (relation.isManyToOne || relation.isOneToOneOwner) {
|
|
@@ -306,16 +312,16 @@ export class RawSqlResultsToEntityTransformer {
|
|
|
306
312
|
}
|
|
307
313
|
}
|
|
308
314
|
return columns.reduce((valueMap, column) => {
|
|
309
|
-
|
|
315
|
+
for (const rawSqlResult of rawSqlResults) {
|
|
310
316
|
if (relation.isManyToOne || relation.isOneToOneOwner) {
|
|
311
317
|
valueMap[column.databaseName] =
|
|
312
|
-
this.driver.prepareHydratedValue(rawSqlResult[
|
|
318
|
+
this.driver.prepareHydratedValue(rawSqlResult[this.buildAlias(parentAlias, column.databaseName)], column);
|
|
313
319
|
}
|
|
314
320
|
else {
|
|
315
321
|
valueMap[column.databaseName] =
|
|
316
|
-
this.driver.prepareHydratedValue(rawSqlResult[
|
|
322
|
+
this.driver.prepareHydratedValue(rawSqlResult[this.buildAlias(parentAlias, column.referencedColumn.databaseName)], column.referencedColumn);
|
|
317
323
|
}
|
|
318
|
-
}
|
|
324
|
+
}
|
|
319
325
|
return valueMap;
|
|
320
326
|
}, {});
|
|
321
327
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/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\"\nimport { ObjectUtils } from \"../../util/ObjectUtils\"\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 * 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(\n 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 (\n entity !== undefined &&\n !Object.values(entity).every((value) => value === null)\n )\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(\n ...alias.metadata.columns.map((column) =>\n DriverUtils.buildAlias(\n this.driver,\n undefined,\n alias.name,\n column.databaseName,\n ),\n ),\n )\n } else {\n keys.push(\n ...alias.metadata.primaryColumns.map((column) =>\n DriverUtils.buildAlias(\n this.driver,\n undefined,\n alias.name,\n column.databaseName,\n ),\n ),\n )\n }\n rawResults.forEach((rawResult) => {\n const id = keys\n .map((key) => {\n const keyValue = rawResult[key]\n\n if (Buffer.isBuffer(keyValue)) {\n return keyValue.toString(\"hex\")\n }\n\n if (ObjectUtils.isObject(keyValue)) {\n return JSON.stringify(keyValue)\n }\n\n return keyValue\n })\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(\n rawResults: any[],\n alias: Alias,\n ): 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(\n (result) =>\n result[\n DriverUtils.buildAlias(\n this.driver,\n undefined,\n alias.name,\n alias.metadata.discriminatorColumn!.databaseName,\n )\n ],\n )\n const discriminatorMetadata = metadata.childEntityMetadatas.find(\n (childEntityMetadata) => {\n return (\n typeof discriminatorValues.find(\n (value) =>\n value ===\n childEntityMetadata.discriminatorValue,\n ) !== \"undefined\"\n )\n },\n )\n if (discriminatorMetadata) metadata = discriminatorMetadata\n }\n let entity: any = metadata.create(this.queryRunner, {\n fromDeserializer: true,\n pojo: this.expressionMap.options.indexOf(\"create-pojo\") !== -1,\n })\n\n // get value from columns selections and put them into newly created entity\n const hasColumns = this.transformColumns(\n rawResults,\n alias,\n entity,\n metadata,\n )\n const hasRelations = this.transformJoins(\n rawResults,\n entity,\n alias,\n metadata,\n )\n const hasRelationIds = this.transformRelationIds(\n rawResults,\n alias,\n entity,\n metadata,\n )\n const hasRelationCounts = this.transformRelationCounts(\n rawResults,\n alias,\n entity,\n )\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) 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 =\n metadata.primaryColumns.filter(\n (column) => column.isVirtual === false,\n ).length === 0 // todo: create metadata.hasOnlyVirtualPrimaryColumns\n if (\n hasOnlyVirtualPrimaryColumns &&\n (hasRelations || hasRelationIds || hasRelationCounts)\n )\n return entity\n\n return undefined\n }\n\n // get value from columns selections and put them into object\n protected transformColumns(\n rawResults: any[],\n alias: Alias,\n entity: ObjectLiteral,\n metadata: EntityMetadata,\n ): boolean {\n let hasData = false\n metadata.columns.forEach((column) => {\n // if table inheritance is used make sure this column is not child's column\n if (\n metadata.childEntityMetadatas.length > 0 &&\n metadata.childEntityMetadatas.findIndex(\n (childMetadata) => childMetadata.target === column.target,\n ) !== -1\n )\n return\n\n const value =\n rawResults[0][\n DriverUtils.buildAlias(\n this.driver,\n undefined,\n alias.name,\n column.databaseName,\n )\n ]\n if (value === undefined || column.isVirtual) 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 (\n !this.expressionMap.selects.find(\n (select) =>\n select.selection === alias.name ||\n select.selection ===\n alias.name + \".\" + column.propertyPath,\n )\n )\n return\n\n column.setEntityValue(\n entity,\n this.driver.prepareHydratedValue(value, column),\n )\n if (value !== null)\n // 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 // Set all embedded column values to null if all their child columns are null\n if (entity) {\n metadata.embeddeds.forEach((embedded) => {\n if (embedded.propertyName in entity) {\n entity[embedded.propertyName] = this.deeplyNullify(\n entity[embedded.propertyName],\n )\n }\n })\n }\n return hasData\n }\n\n /**\n * Returns whether an object is an iterrable\n * This is useful when trying to avoid objects such as Dates\n */\n private isIterrableObject(obj: any): obj is object {\n const prototype = Object.prototype.toString.call(obj)\n return prototype === \"[object Object]\" || prototype === \"[object Array]\"\n }\n\n /**\n * Deeply nullify an object if all its properties values are null or undefined\n */\n private deeplyNullify<T>(obj: T): T | null {\n if (!this.isIterrableObject(obj)) return obj\n\n for (const key in obj) {\n obj[key] = this.deeplyNullify(obj[key] as any)\n }\n const nullify = Object.values(obj).every((value) => value == null)\n return nullify ? null : obj\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(\n rawResults: any[],\n entity: ObjectLiteral,\n alias: Alias,\n metadata: EntityMetadata,\n ) {\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) => {\n // 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) 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) 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 (\n join.relation &&\n !metadata.relations.find(\n (relation) => relation === join.relation,\n )\n )\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) return\n } else {\n if (\n !join.relation ||\n join.parentAlias !== alias.name ||\n join.relationPropertyPath !== join.relation!.propertyPath\n )\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)\n // 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 } else {\n // otherwise set to relation\n join.relation!.setEntityValue(entity, result)\n }\n\n hasData = true\n })\n return hasData\n }\n\n protected transformRelationIds(\n rawSqlResults: any[],\n alias: Alias,\n entity: ObjectLiteral,\n metadata: EntityMetadata,\n ): boolean {\n let hasData = false\n this.rawRelationIdResults.forEach((rawRelationIdResult, index) => {\n if (\n rawRelationIdResult.relationIdAttribute.parentAlias !==\n alias.name\n )\n return\n\n const relation = rawRelationIdResult.relationIdAttribute.relation\n const valueMap = this.createValueMapFromJoinColumns(\n relation,\n rawRelationIdResult.relationIdAttribute.parentAlias,\n rawSqlResults,\n )\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 =\n rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(\n \".\",\n )\n const mapToProperty = (\n properties: string[],\n map: ObjectLiteral,\n value: any,\n ): 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(\n rawSqlResults: any[],\n alias: Alias,\n entity: ObjectLiteral,\n ): boolean {\n let hasData = false\n this.rawRelationCountResults\n .filter(\n (rawRelationCountResult) =>\n rawRelationCountResult.relationCountAttribute\n .parentAlias === alias.name,\n )\n .forEach((rawRelationCountResult) => {\n const relation =\n rawRelationCountResult.relationCountAttribute.relation\n let referenceColumnName: string\n\n if (relation.isOneToMany) {\n referenceColumnName =\n relation.inverseRelation!.joinColumns[0]\n .referencedColumn!.databaseName // todo: fix joinColumns[0]\n } else {\n referenceColumnName = relation.isOwning\n ? relation.joinColumns[0].referencedColumn!.databaseName\n : relation.inverseRelation!.joinColumns[0]\n .referencedColumn!.databaseName\n }\n\n const referenceColumnValue =\n rawSqlResults[0][\n DriverUtils.buildAlias(\n this.driver,\n undefined,\n alias.name,\n referenceColumnName,\n )\n ] // we use zero index since its grouped data // todo: selection with alias for entity columns wont work\n if (\n referenceColumnValue !== undefined &&\n referenceColumnValue !== null\n ) {\n entity[\n rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName\n ] = 0\n rawRelationCountResult.results\n .filter(\n (result) =>\n result[\"parentId\"] === referenceColumnValue,\n )\n .forEach((result) => {\n entity[\n rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName\n ] = parseInt(result[\"cnt\"])\n hasData = true\n })\n }\n })\n\n return hasData\n }\n\n private createValueMapFromJoinColumns(\n relation: RelationMetadata,\n parentAlias: string,\n rawSqlResults: any[],\n ): ObjectLiteral {\n let columns: ColumnMetadata[]\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(\n (joinColumn) => joinColumn,\n )\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(\n (joinColumn) => joinColumn,\n )\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map((joinColumn) => joinColumn)\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(\n (joinColumn) => joinColumn,\n )\n }\n }\n return columns.reduce((valueMap, column) => {\n rawSqlResults.forEach((rawSqlResult) => {\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n valueMap[column.databaseName] =\n this.driver.prepareHydratedValue(\n rawSqlResult[\n DriverUtils.buildAlias(\n this.driver,\n undefined,\n parentAlias,\n column.databaseName,\n )\n ],\n column,\n )\n } else {\n valueMap[column.databaseName] =\n this.driver.prepareHydratedValue(\n rawSqlResult[\n DriverUtils.buildAlias(\n this.driver,\n undefined,\n parentAlias,\n column.referencedColumn!.databaseName,\n )\n ],\n column.referencedColumn!,\n )\n }\n })\n return valueMap\n }, {} as ObjectLiteral)\n }\n\n private extractEntityPrimaryIds(\n relation: RelationMetadata,\n relationIdRawResult: any,\n ) {\n let columns: ColumnMetadata[]\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(\n (joinColumn) => joinColumn,\n )\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(\n (joinColumn) => joinColumn,\n )\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map((joinColumn) => joinColumn)\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(\n (joinColumn) => joinColumn,\n )\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 /** Prepare data to run #transformRelationIds, as a lot of result independent data is needed in every call */\n private prepareDataForTransformRelationIds() {\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(\n (rawRelationIdResult) => {\n const relation =\n 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 (\n relation.isOneToMany ||\n relation.isOneToOneNotOwner\n ) {\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 (\n relation.isOneToMany ||\n relation.isOneToOneNotOwner\n ) {\n if (\n column.isVirtual &&\n column.referencedColumn &&\n column.referencedColumn.propertyName !==\n column.propertyName\n ) {\n // if column is a relation\n value =\n column.referencedColumn.createValueMap(\n value,\n )\n }\n\n return OrmUtils.mergeDeep(\n idMap,\n column.createValueMap(value),\n )\n }\n if (\n !column.isPrimary &&\n column.referencedColumn!.referencedColumn\n ) {\n // if column is a relation\n value =\n column.referencedColumn!.referencedColumn!.createValueMap(\n value,\n )\n }\n\n return OrmUtils.mergeDeep(\n idMap,\n column.referencedColumn!.createValueMap(value),\n )\n }, {} as ObjectLiteral)\n\n if (\n columns.length === 1 &&\n !rawRelationIdResult.relationIdAttribute.disableMixedMap\n ) {\n if (\n relation.isOneToMany ||\n relation.isOneToOneNotOwner\n ) {\n idMap = columns[0].getEntityValue(idMap)\n } else {\n idMap =\n columns[0].referencedColumn!.getEntityValue(\n idMap,\n )\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":"../.."}
|
|
1
|
+
{"version":3,"sources":["../browser/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\"\nimport { ObjectUtils } from \"../../util/ObjectUtils\"\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 * 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 private pojo: boolean\n private selections: Set<string>\n private aliasCache: Map<string, Map<string, string>>\n private columnsCache: Map<\n string,\n Map<EntityMetadata, [string, ColumnMetadata][]>\n >\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected expressionMap: QueryExpressionMap,\n protected driver: Driver,\n protected rawRelationIdResults: RelationIdLoadResult[],\n protected rawRelationCountResults: RelationCountLoadResult[],\n protected queryRunner?: QueryRunner,\n ) {\n this.pojo = this.expressionMap.options.includes(\"create-pojo\")\n this.selections = new Set(\n this.expressionMap.selects.map((s) => s.selection),\n )\n this.aliasCache = new Map()\n this.columnsCache = new Map()\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 for (const results of group.values()) {\n const entity = this.transformRawResultsGroup(results, alias)\n if (entity !== undefined) entities.push(entity)\n }\n return entities\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Build an alias from a name and column name.\n */\n protected buildAlias(aliasName: string, columnName: string) {\n let aliases = this.aliasCache.get(aliasName)\n if (!aliases) {\n aliases = new Map()\n this.aliasCache.set(aliasName, aliases)\n }\n let columnAlias = aliases.get(columnName)\n if (!columnAlias) {\n columnAlias = DriverUtils.buildAlias(\n this.driver,\n undefined,\n aliasName,\n columnName,\n )\n aliases.set(columnName, columnAlias)\n }\n return columnAlias\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(\n ...alias.metadata.columns.map((column) =>\n this.buildAlias(alias.name, column.databaseName),\n ),\n )\n } else {\n keys.push(\n ...alias.metadata.primaryColumns.map((column) =>\n this.buildAlias(alias.name, column.databaseName),\n ),\n )\n }\n for (const rawResult of rawResults) {\n const id = keys\n .map((key) => {\n const keyValue = rawResult[key]\n\n if (Buffer.isBuffer(keyValue)) {\n return keyValue.toString(\"hex\")\n }\n\n if (ObjectUtils.isObject(keyValue)) {\n return JSON.stringify(keyValue)\n }\n\n return keyValue\n })\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(\n rawResults: any[],\n alias: Alias,\n ): 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(\n (result) =>\n result[\n this.buildAlias(\n alias.name,\n alias.metadata.discriminatorColumn!.databaseName,\n )\n ],\n )\n const discriminatorMetadata = metadata.childEntityMetadatas.find(\n (childEntityMetadata) => {\n return (\n typeof discriminatorValues.find(\n (value) =>\n value ===\n childEntityMetadata.discriminatorValue,\n ) !== \"undefined\"\n )\n },\n )\n if (discriminatorMetadata) metadata = discriminatorMetadata\n }\n let entity: any = metadata.create(this.queryRunner, {\n fromDeserializer: true,\n pojo: this.pojo,\n })\n\n // get value from columns selections and put them into newly created entity\n const hasColumns = this.transformColumns(\n rawResults,\n alias,\n entity,\n metadata,\n )\n const hasRelations = this.transformJoins(\n rawResults,\n entity,\n alias,\n metadata,\n )\n const hasRelationIds = this.transformRelationIds(\n rawResults,\n alias,\n entity,\n metadata,\n )\n const hasRelationCounts = this.transformRelationCounts(\n rawResults,\n alias,\n entity,\n )\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) 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.every(\n (column) => column.isVirtual === true,\n ) // todo: create metadata.hasOnlyVirtualPrimaryColumns\n if (\n hasOnlyVirtualPrimaryColumns &&\n (hasRelations || hasRelationIds || hasRelationCounts)\n )\n return entity\n\n return undefined\n }\n\n // get value from columns selections and put them into object\n protected transformColumns(\n rawResults: any[],\n alias: Alias,\n entity: ObjectLiteral,\n metadata: EntityMetadata,\n ): boolean {\n let hasData = false\n const result = rawResults[0]\n for (const [key, column] of this.getColumnsToProcess(\n alias.name,\n metadata,\n )) {\n const value = result[key]\n\n if (value === undefined) continue\n // 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 else if (value !== null) hasData = true\n\n column.setEntityValue(\n entity,\n this.driver.prepareHydratedValue(value, column),\n )\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(\n rawResults: any[],\n entity: ObjectLiteral,\n alias: Alias,\n metadata: EntityMetadata,\n ) {\n let hasData = false\n\n // let discriminatorValue: string = \"\";\n // if (metadata.discriminatorColumn)\n // discriminatorValue = rawResults[0][this.buildAlias(alias.name, alias.metadata.discriminatorColumn!.databaseName)];\n\n for (const join of this.expressionMap.joinAttributes) {\n // 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) continue\n\n // if simple left or inner join was performed without selection then we don't need to do anything\n if (!join.isSelected) continue\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 (\n join.relation &&\n !metadata.relations.find(\n (relation) => relation === join.relation,\n )\n )\n continue\n\n // some checks to make sure this join is for current alias\n if (join.mapToProperty) {\n if (join.mapToPropertyParentAlias !== alias.name) continue\n } else {\n if (\n !join.relation ||\n join.parentAlias !== alias.name ||\n join.relationPropertyPath !== join.relation!.propertyPath\n )\n continue\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 nothing was joined then simply continue\n if (result === undefined) continue\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 } else {\n // otherwise set to relation\n join.relation!.setEntityValue(entity, result)\n }\n\n hasData = true\n }\n return hasData\n }\n\n protected transformRelationIds(\n rawSqlResults: any[],\n alias: Alias,\n entity: ObjectLiteral,\n metadata: EntityMetadata,\n ): boolean {\n let hasData = false\n for (const [\n index,\n rawRelationIdResult,\n ] of this.rawRelationIdResults.entries()) {\n if (\n rawRelationIdResult.relationIdAttribute.parentAlias !==\n alias.name\n )\n continue\n\n const relation = rawRelationIdResult.relationIdAttribute.relation\n const valueMap = this.createValueMapFromJoinColumns(\n relation,\n rawRelationIdResult.relationIdAttribute.parentAlias,\n rawSqlResults,\n )\n if (valueMap === undefined || valueMap === null) {\n continue\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 =\n rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(\n \".\",\n )\n const mapToProperty = (\n properties: string[],\n map: ObjectLiteral,\n value: any,\n ): 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(\n rawSqlResults: any[],\n alias: Alias,\n entity: ObjectLiteral,\n ): boolean {\n let hasData = false\n for (const rawRelationCountResult of this.rawRelationCountResults) {\n if (\n rawRelationCountResult.relationCountAttribute.parentAlias !==\n alias.name\n )\n continue\n const relation =\n rawRelationCountResult.relationCountAttribute.relation\n let referenceColumnName: string\n\n if (relation.isOneToMany) {\n referenceColumnName =\n relation.inverseRelation!.joinColumns[0].referencedColumn!\n .databaseName // todo: fix joinColumns[0]\n } else {\n referenceColumnName = relation.isOwning\n ? relation.joinColumns[0].referencedColumn!.databaseName\n : relation.inverseRelation!.joinColumns[0].referencedColumn!\n .databaseName\n }\n\n const referenceColumnValue =\n rawSqlResults[0][\n this.buildAlias(alias.name, referenceColumnName)\n ] // we use zero index since its grouped data // todo: selection with alias for entity columns wont work\n if (\n referenceColumnValue !== undefined &&\n referenceColumnValue !== null\n ) {\n entity[\n rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName\n ] = 0\n for (const result of rawRelationCountResult.results) {\n if (result[\"parentId\"] !== referenceColumnValue) continue\n entity[\n rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName\n ] = parseInt(result[\"cnt\"])\n hasData = true\n }\n }\n }\n\n return hasData\n }\n\n private getColumnsToProcess(aliasName: string, metadata: EntityMetadata) {\n let metadatas = this.columnsCache.get(aliasName)\n if (!metadatas) {\n metadatas = new Map()\n this.columnsCache.set(aliasName, metadatas)\n }\n let columns = metadatas.get(metadata)\n if (!columns) {\n columns = metadata.columns\n .filter(\n (column) =>\n !column.isVirtual &&\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 (this.selections.has(aliasName) ||\n this.selections.has(\n `${aliasName}.${column.propertyPath}`,\n )) &&\n // if table inheritance is used make sure this column is not child's column\n !metadata.childEntityMetadatas.some(\n (childMetadata) =>\n childMetadata.target === column.target,\n ),\n )\n .map((column) => [\n this.buildAlias(aliasName, column.databaseName),\n column,\n ])\n metadatas.set(metadata, columns)\n }\n return columns\n }\n\n private createValueMapFromJoinColumns(\n relation: RelationMetadata,\n parentAlias: string,\n rawSqlResults: any[],\n ): ObjectLiteral {\n let columns: ColumnMetadata[]\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(\n (joinColumn) => joinColumn,\n )\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(\n (joinColumn) => joinColumn,\n )\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map((joinColumn) => joinColumn)\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(\n (joinColumn) => joinColumn,\n )\n }\n }\n return columns.reduce((valueMap, column) => {\n for (const rawSqlResult of rawSqlResults) {\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n valueMap[column.databaseName] =\n this.driver.prepareHydratedValue(\n rawSqlResult[\n this.buildAlias(\n parentAlias,\n column.databaseName,\n )\n ],\n column,\n )\n } else {\n valueMap[column.databaseName] =\n this.driver.prepareHydratedValue(\n rawSqlResult[\n this.buildAlias(\n parentAlias,\n column.referencedColumn!.databaseName,\n )\n ],\n column.referencedColumn!,\n )\n }\n }\n return valueMap\n }, {} as ObjectLiteral)\n }\n\n private extractEntityPrimaryIds(\n relation: RelationMetadata,\n relationIdRawResult: any,\n ) {\n let columns: ColumnMetadata[]\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(\n (joinColumn) => joinColumn,\n )\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(\n (joinColumn) => joinColumn,\n )\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map((joinColumn) => joinColumn)\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(\n (joinColumn) => joinColumn,\n )\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 /** Prepare data to run #transformRelationIds, as a lot of result independent data is needed in every call */\n private prepareDataForTransformRelationIds() {\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(\n (rawRelationIdResult) => {\n const relation =\n 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 (\n relation.isOneToMany ||\n relation.isOneToOneNotOwner\n ) {\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 (\n relation.isOneToMany ||\n relation.isOneToOneNotOwner\n ) {\n if (\n column.isVirtual &&\n column.referencedColumn &&\n column.referencedColumn.propertyName !==\n column.propertyName\n ) {\n // if column is a relation\n value =\n column.referencedColumn.createValueMap(\n value,\n )\n }\n\n return OrmUtils.mergeDeep(\n idMap,\n column.createValueMap(value),\n )\n }\n if (\n !column.isPrimary &&\n column.referencedColumn!.referencedColumn\n ) {\n // if column is a relation\n value =\n column.referencedColumn!.referencedColumn!.createValueMap(\n value,\n )\n }\n\n return OrmUtils.mergeDeep(\n idMap,\n column.referencedColumn!.createValueMap(value),\n )\n }, {} as ObjectLiteral)\n\n if (\n columns.length === 1 &&\n !rawRelationIdResult.relationIdAttribute.disableMixedMap\n ) {\n if (\n relation.isOneToMany ||\n relation.isOneToOneNotOwner\n ) {\n idMap = columns[0].getEntityValue(idMap)\n } else {\n idMap =\n columns[0].referencedColumn!.getEntityValue(\n idMap,\n )\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":"../.."}
|