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.
Files changed (710) hide show
  1. package/README.md +11 -14
  2. package/browser/cache/DbQueryResultCache.js +1 -1
  3. package/browser/cache/DbQueryResultCache.js.map +1 -1
  4. package/browser/cache/QueryResultCache.d.ts +4 -2
  5. package/browser/cache/QueryResultCache.js.map +1 -1
  6. package/browser/cache/QueryResultCacheFactory.js.map +1 -1
  7. package/browser/cache/RedisQueryResultCache.js +1 -1
  8. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  9. package/browser/cli-ts-node-esm.js.map +1 -1
  10. package/browser/connection/ConnectionManager.js.map +1 -1
  11. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  12. package/browser/connection/ConnectionOptionsReader.d.ts +4 -4
  13. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  14. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  15. package/browser/container.js.map +1 -1
  16. package/browser/data-source/DataSource.d.ts +2 -0
  17. package/browser/data-source/DataSource.js +5 -1
  18. package/browser/data-source/DataSource.js.map +1 -1
  19. package/browser/decorator/Unique.js.map +1 -1
  20. package/browser/decorator/columns/Column.js.map +1 -1
  21. package/browser/decorator/columns/PrimaryColumn.js.map +1 -1
  22. package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  23. package/browser/decorator/columns/VirtualColumn.js +1 -1
  24. package/browser/decorator/columns/VirtualColumn.js.map +1 -1
  25. package/browser/decorator/entity/ChildEntity.js.map +1 -1
  26. package/browser/decorator/relations/ManyToMany.js.map +1 -1
  27. package/browser/decorator/relations/ManyToOne.js.map +1 -1
  28. package/browser/decorator/relations/OneToMany.js.map +1 -1
  29. package/browser/decorator/relations/OneToOne.d.ts +4 -4
  30. package/browser/decorator/relations/OneToOne.js +2 -2
  31. package/browser/decorator/relations/OneToOne.js.map +1 -1
  32. package/browser/driver/DriverFactory.js.map +1 -1
  33. package/browser/driver/DriverUtils.js.map +1 -1
  34. package/browser/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.d.ts +1 -1
  35. package/browser/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.js.map +1 -1
  36. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +10 -10
  37. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  38. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +0 -1
  39. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +2 -2
  40. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  41. package/browser/driver/aurora-postgres/AuroraPostgresDriver.js.map +1 -1
  42. package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js +2 -2
  43. package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
  44. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +2 -2
  45. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  46. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +4 -0
  47. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  48. package/browser/driver/capacitor/CapacitorDriver.js.map +1 -1
  49. package/browser/driver/capacitor/CapacitorQueryRunner.js +2 -2
  50. package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  51. package/browser/driver/cockroachdb/CockroachConnectionCredentialsOptions.d.ts +1 -2
  52. package/browser/driver/cockroachdb/CockroachConnectionCredentialsOptions.js.map +1 -1
  53. package/browser/driver/cockroachdb/CockroachConnectionOptions.d.ts +1 -1
  54. package/browser/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
  55. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  56. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +0 -1
  57. package/browser/driver/cockroachdb/CockroachQueryRunner.js +8 -6
  58. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  59. package/browser/driver/cordova/CordovaDriver.js.map +1 -1
  60. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  61. package/browser/driver/expo/ExpoDriver.js.map +1 -1
  62. package/browser/driver/expo/ExpoQueryRunner.js +2 -2
  63. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  64. package/browser/driver/mongodb/MongoConnectionOptions.d.ts +1 -2
  65. package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  66. package/browser/driver/mongodb/MongoDriver.js.map +1 -1
  67. package/browser/driver/mongodb/MongoQueryRunner.d.ts +0 -1
  68. package/browser/driver/mongodb/typings.d.ts +0 -8
  69. package/browser/driver/mongodb/typings.js +0 -1
  70. package/browser/driver/mongodb/typings.js.map +1 -1
  71. package/browser/driver/mysql/MysqlConnectionCredentialsOptions.d.ts +1 -1
  72. package/browser/driver/mysql/MysqlConnectionCredentialsOptions.js.map +1 -1
  73. package/browser/driver/mysql/MysqlConnectionOptions.d.ts +1 -1
  74. package/browser/driver/mysql/MysqlConnectionOptions.js.map +1 -1
  75. package/browser/driver/mysql/MysqlDriver.js +12 -14
  76. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  77. package/browser/driver/mysql/MysqlQueryRunner.d.ts +0 -1
  78. package/browser/driver/mysql/MysqlQueryRunner.js +1 -1
  79. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  80. package/browser/driver/nativescript/NativescriptDriver.js.map +1 -1
  81. package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  82. package/browser/driver/oracle/OracleConnectionCredentialsOptions.d.ts +1 -1
  83. package/browser/driver/oracle/OracleConnectionCredentialsOptions.js.map +1 -1
  84. package/browser/driver/oracle/OracleConnectionOptions.d.ts +1 -1
  85. package/browser/driver/oracle/OracleConnectionOptions.js.map +1 -1
  86. package/browser/driver/oracle/OracleDriver.js +18 -10
  87. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  88. package/browser/driver/oracle/OracleQueryRunner.d.ts +0 -1
  89. package/browser/driver/oracle/OracleQueryRunner.js +8 -10
  90. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  91. package/browser/driver/postgres/PostgresConnectionCredentialsOptions.d.ts +1 -2
  92. package/browser/driver/postgres/PostgresConnectionCredentialsOptions.js.map +1 -1
  93. package/browser/driver/postgres/PostgresConnectionOptions.d.ts +1 -1
  94. package/browser/driver/postgres/PostgresConnectionOptions.js.map +1 -1
  95. package/browser/driver/postgres/PostgresDriver.js +11 -6
  96. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  97. package/browser/driver/postgres/PostgresQueryRunner.d.ts +1 -2
  98. package/browser/driver/postgres/PostgresQueryRunner.js +35 -12
  99. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  100. package/browser/driver/react-native/ReactNativeDriver.js +4 -6
  101. package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
  102. package/browser/driver/react-native/ReactNativeQueryRunner.js +2 -2
  103. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  104. package/browser/driver/sap/SapDriver.js.map +1 -1
  105. package/browser/driver/sap/SapQueryRunner.d.ts +0 -1
  106. package/browser/driver/sap/SapQueryRunner.js +4 -4
  107. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  108. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +1 -1
  109. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -1
  110. package/browser/driver/spanner/SpannerConnectionOptions.d.ts +1 -1
  111. package/browser/driver/spanner/SpannerConnectionOptions.js.map +1 -1
  112. package/browser/driver/spanner/SpannerDriver.js.map +1 -1
  113. package/browser/driver/spanner/SpannerQueryRunner.d.ts +0 -1
  114. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
  115. package/browser/driver/sqlite/SqliteDriver.js +2 -2
  116. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  117. package/browser/driver/sqlite/SqliteQueryRunner.js +3 -2
  118. package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  119. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -6
  120. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  121. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +0 -1
  122. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +4 -4
  123. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  124. package/browser/driver/sqljs/SqljsDriver.js +1 -2
  125. package/browser/driver/sqljs/SqljsDriver.js.map +1 -1
  126. package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  127. package/browser/driver/sqlserver/SqlServerConnectionCredentialsOptions.d.ts +1 -1
  128. package/browser/driver/sqlserver/SqlServerConnectionCredentialsOptions.js.map +1 -1
  129. package/browser/driver/sqlserver/SqlServerConnectionOptions.d.ts +1 -1
  130. package/browser/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
  131. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  132. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +0 -1
  133. package/browser/driver/sqlserver/SqlServerQueryRunner.js +9 -7
  134. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  135. package/browser/driver/types/ColumnTypes.d.ts +1 -1
  136. package/browser/driver/types/ColumnTypes.js.map +1 -1
  137. package/browser/entity-manager/EntityManager.d.ts +4 -2
  138. package/browser/entity-manager/EntityManager.js +4 -2
  139. package/browser/entity-manager/EntityManager.js.map +1 -1
  140. package/browser/entity-manager/MongoEntityManager.js +1 -1
  141. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  142. package/browser/entity-schema/EntitySchemaTransformer.js +2 -3
  143. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  144. package/browser/error/EntityMetadataNotFoundError.js.map +1 -1
  145. package/browser/error/EntityNotFoundError.js.map +1 -1
  146. package/browser/error/FindRelationsNotFoundError.js.map +1 -1
  147. package/browser/error/MissingJoinColumnError.js.map +1 -1
  148. package/browser/error/MissingJoinTableError.js.map +1 -1
  149. package/browser/error/QueryFailedError.js.map +1 -1
  150. package/browser/error/RepositoryNotTreeError.js.map +1 -1
  151. package/browser/error/TypeORMError.js.map +1 -1
  152. package/browser/find-options/FindOperator.js.map +1 -1
  153. package/browser/find-options/FindOptionsOrder.d.ts +0 -1
  154. package/browser/find-options/FindOptionsRelations.d.ts +0 -1
  155. package/browser/find-options/FindOptionsSelect.d.ts +0 -1
  156. package/browser/find-options/FindOptionsUtils.js +1 -1
  157. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  158. package/browser/find-options/FindOptionsWhere.d.ts +0 -1
  159. package/browser/find-options/operator/Raw.js.map +1 -1
  160. package/browser/globals.js.map +1 -1
  161. package/browser/logger/AbstractLogger.js.map +1 -1
  162. package/browser/logger/AdvancedConsoleLogger.js +1 -2
  163. package/browser/logger/AdvancedConsoleLogger.js.map +1 -1
  164. package/browser/logger/DebugLogger.js +1 -2
  165. package/browser/logger/DebugLogger.js.map +1 -1
  166. package/browser/logger/FileLogger.js +2 -3
  167. package/browser/logger/FileLogger.js.map +1 -1
  168. package/browser/logger/LoggerFactory.js.map +1 -1
  169. package/browser/logger/SimpleConsoleLogger.js +1 -2
  170. package/browser/logger/SimpleConsoleLogger.js.map +1 -1
  171. package/browser/metadata/CheckMetadata.js.map +1 -1
  172. package/browser/metadata/ColumnMetadata.js +19 -15
  173. package/browser/metadata/ColumnMetadata.js.map +1 -1
  174. package/browser/metadata/EmbeddedMetadata.js +1 -1
  175. package/browser/metadata/EmbeddedMetadata.js.map +1 -1
  176. package/browser/metadata/EntityListenerMetadata.js.map +1 -1
  177. package/browser/metadata/EntityMetadata.js +3 -7
  178. package/browser/metadata/EntityMetadata.js.map +1 -1
  179. package/browser/metadata/ExclusionMetadata.js.map +1 -1
  180. package/browser/metadata/IndexMetadata.js.map +1 -1
  181. package/browser/metadata/RelationIdMetadata.js.map +1 -1
  182. package/browser/metadata/RelationMetadata.js.map +1 -1
  183. package/browser/metadata/UniqueMetadata.js.map +1 -1
  184. package/browser/metadata-args/MetadataArgsStorage.js.map +1 -1
  185. package/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
  186. package/browser/metadata-builder/EntityMetadataBuilder.js +5 -8
  187. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  188. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  189. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +7 -8
  190. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  191. package/browser/metadata-builder/MetadataUtils.js.map +1 -1
  192. package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -3
  193. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  194. package/browser/migration/MigrationExecutor.js +2 -2
  195. package/browser/migration/MigrationExecutor.js.map +1 -1
  196. package/browser/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  197. package/browser/naming-strategy/LegacyOracleNamingStrategy.js.map +1 -1
  198. package/browser/persistence/EntityPersistExecutor.js.map +1 -1
  199. package/browser/persistence/Subject.js.map +1 -1
  200. package/browser/persistence/SubjectChangedColumnsComputer.js.map +1 -1
  201. package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  202. package/browser/persistence/SubjectExecutor.js +3 -3
  203. package/browser/persistence/SubjectExecutor.js.map +1 -1
  204. package/browser/persistence/{SubjectTopoligicalSorter.d.ts → SubjectTopologicalSorter.d.ts} +1 -1
  205. package/browser/persistence/{SubjectTopoligicalSorter.js → SubjectTopologicalSorter.js} +2 -2
  206. package/browser/persistence/SubjectTopologicalSorter.js.map +1 -0
  207. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  208. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  209. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +1 -2
  210. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  211. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  212. package/browser/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  213. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  214. package/browser/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
  215. package/browser/platform/BrowserPlatformTools.js.map +1 -1
  216. package/browser/platform/PlatformTools.d.ts +0 -1
  217. package/browser/platform/PlatformTools.js +3 -9
  218. package/browser/platform/PlatformTools.js.map +1 -1
  219. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  220. package/browser/query-builder/InsertQueryBuilder.js +15 -15
  221. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  222. package/browser/query-builder/JoinAttribute.js.map +1 -1
  223. package/browser/query-builder/QueryBuilder.d.ts +1 -1
  224. package/browser/query-builder/QueryBuilder.js +12 -14
  225. package/browser/query-builder/QueryBuilder.js.map +1 -1
  226. package/browser/query-builder/QueryExpressionMap.js +2 -2
  227. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  228. package/browser/query-builder/RelationIdLoader.js.map +1 -1
  229. package/browser/query-builder/RelationLoader.js.map +1 -1
  230. package/browser/query-builder/RelationQueryBuilder.js.map +1 -1
  231. package/browser/query-builder/RelationRemover.js.map +1 -1
  232. package/browser/query-builder/RelationUpdater.js.map +1 -1
  233. package/browser/query-builder/ReturningResultsEntityUpdator.js +5 -2
  234. package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  235. package/browser/query-builder/SelectQueryBuilder.d.ts +4 -5
  236. package/browser/query-builder/SelectQueryBuilder.js +23 -22
  237. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  238. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  239. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  240. package/browser/query-builder/relation-count/RelationCountLoader.js.map +1 -1
  241. package/browser/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js +2 -2
  242. package/browser/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js.map +1 -1
  243. package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  244. package/browser/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js +2 -2
  245. package/browser/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js.map +1 -1
  246. package/browser/query-builder/transformer/DocumentToEntityTransformer.js.map +1 -1
  247. package/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
  248. package/browser/query-builder/transformer/PlainObjectToNewEntityTransformer.js.map +1 -1
  249. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +9 -9
  250. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -88
  251. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  252. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  253. package/browser/query-runner/QueryLock.js.map +1 -1
  254. package/browser/query-runner/QueryRunner.d.ts +0 -1
  255. package/browser/repository/BaseEntity.js.map +1 -1
  256. package/browser/repository/Repository.d.ts +2 -0
  257. package/browser/repository/Repository.js +2 -0
  258. package/browser/repository/Repository.js.map +1 -1
  259. package/browser/repository/TreeRepository.js.map +1 -1
  260. package/browser/schema-builder/RdbmsSchemaBuilder.js +2 -1
  261. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  262. package/browser/schema-builder/table/Table.js +2 -2
  263. package/browser/schema-builder/table/Table.js.map +1 -1
  264. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  265. package/browser/schema-builder/util/ViewUtils.js.map +1 -1
  266. package/browser/schema-builder/view/View.js.map +1 -1
  267. package/browser/subscriber/Broadcaster.js +6 -6
  268. package/browser/subscriber/Broadcaster.js.map +1 -1
  269. package/browser/subscriber/BroadcasterResult.js.map +1 -1
  270. package/browser/util/ApplyValueTransformers.js.map +1 -1
  271. package/browser/util/DateUtils.js.map +1 -1
  272. package/browser/util/DepGraph.js +2 -2
  273. package/browser/util/DepGraph.js.map +1 -1
  274. package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
  275. package/browser/util/ImportUtils.js +23 -35
  276. package/browser/util/ImportUtils.js.map +1 -1
  277. package/browser/util/ObjectUtils.js.map +1 -1
  278. package/browser/util/OrmUtils.js.map +1 -1
  279. package/browser/util/PathUtils.js +1 -1
  280. package/browser/util/PathUtils.js.map +1 -1
  281. package/browser/util/RandomGenerator.js.map +1 -1
  282. package/browser/util/StringUtils.js.map +1 -1
  283. package/browser/util/TreeRepositoryUtils.js +3 -6
  284. package/browser/util/TreeRepositoryUtils.js.map +1 -1
  285. package/cache/DbQueryResultCache.js +1 -1
  286. package/cache/DbQueryResultCache.js.map +1 -1
  287. package/cache/QueryResultCache.d.ts +4 -2
  288. package/cache/QueryResultCache.js.map +1 -1
  289. package/cache/QueryResultCacheFactory.js.map +1 -1
  290. package/cache/RedisQueryResultCache.js +1 -1
  291. package/cache/RedisQueryResultCache.js.map +1 -1
  292. package/cli-ts-node-esm.js.map +1 -1
  293. package/commands/CacheClearCommand.js.map +1 -1
  294. package/commands/CommandUtils.d.ts +1 -1
  295. package/commands/CommandUtils.js +18 -16
  296. package/commands/CommandUtils.js.map +1 -1
  297. package/commands/EntityCreateCommand.js.map +1 -1
  298. package/commands/InitCommand.js +2 -2
  299. package/commands/InitCommand.js.map +1 -1
  300. package/commands/MigrationCreateCommand.js.map +1 -1
  301. package/commands/MigrationGenerateCommand.js.map +1 -1
  302. package/commands/MigrationRevertCommand.js +2 -2
  303. package/commands/MigrationRevertCommand.js.map +1 -1
  304. package/commands/MigrationRunCommand.js +2 -2
  305. package/commands/MigrationRunCommand.js.map +1 -1
  306. package/commands/MigrationShowCommand.js.map +1 -1
  307. package/commands/QueryCommand.js.map +1 -1
  308. package/commands/SchemaDropCommand.js.map +1 -1
  309. package/commands/SchemaLogCommand.js.map +1 -1
  310. package/commands/SchemaSyncCommand.js.map +1 -1
  311. package/commands/SubscriberCreateCommand.js.map +1 -1
  312. package/commands/VersionCommand.js.map +1 -1
  313. package/connection/ConnectionManager.js.map +1 -1
  314. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  315. package/connection/ConnectionOptionsReader.d.ts +4 -4
  316. package/connection/ConnectionOptionsReader.js.map +1 -1
  317. package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  318. package/container.js +2 -3
  319. package/container.js.map +1 -1
  320. package/data-source/DataSource.d.ts +2 -0
  321. package/data-source/DataSource.js +5 -1
  322. package/data-source/DataSource.js.map +1 -1
  323. package/decorator/Check.js +1 -2
  324. package/decorator/Check.js.map +1 -1
  325. package/decorator/EntityRepository.js +1 -2
  326. package/decorator/EntityRepository.js.map +1 -1
  327. package/decorator/Exclusion.js +1 -2
  328. package/decorator/Exclusion.js.map +1 -1
  329. package/decorator/Generated.js +1 -2
  330. package/decorator/Generated.js.map +1 -1
  331. package/decorator/Index.js +1 -2
  332. package/decorator/Index.js.map +1 -1
  333. package/decorator/Unique.js +1 -2
  334. package/decorator/Unique.js.map +1 -1
  335. package/decorator/columns/Column.js +1 -2
  336. package/decorator/columns/Column.js.map +1 -1
  337. package/decorator/columns/CreateDateColumn.js +1 -2
  338. package/decorator/columns/CreateDateColumn.js.map +1 -1
  339. package/decorator/columns/DeleteDateColumn.js +1 -2
  340. package/decorator/columns/DeleteDateColumn.js.map +1 -1
  341. package/decorator/columns/ObjectIdColumn.js +1 -2
  342. package/decorator/columns/ObjectIdColumn.js.map +1 -1
  343. package/decorator/columns/PrimaryColumn.js +1 -2
  344. package/decorator/columns/PrimaryColumn.js.map +1 -1
  345. package/decorator/columns/PrimaryGeneratedColumn.js +1 -2
  346. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  347. package/decorator/columns/UpdateDateColumn.js +1 -2
  348. package/decorator/columns/UpdateDateColumn.js.map +1 -1
  349. package/decorator/columns/VersionColumn.js +1 -2
  350. package/decorator/columns/VersionColumn.js.map +1 -1
  351. package/decorator/columns/ViewColumn.js +1 -2
  352. package/decorator/columns/ViewColumn.js.map +1 -1
  353. package/decorator/columns/VirtualColumn.js +2 -3
  354. package/decorator/columns/VirtualColumn.js.map +1 -1
  355. package/decorator/entity/ChildEntity.js +1 -2
  356. package/decorator/entity/ChildEntity.js.map +1 -1
  357. package/decorator/entity/Entity.js +1 -2
  358. package/decorator/entity/Entity.js.map +1 -1
  359. package/decorator/entity/TableInheritance.js +1 -2
  360. package/decorator/entity/TableInheritance.js.map +1 -1
  361. package/decorator/entity-view/ViewEntity.js +1 -2
  362. package/decorator/entity-view/ViewEntity.js.map +1 -1
  363. package/decorator/listeners/AfterInsert.js +1 -2
  364. package/decorator/listeners/AfterInsert.js.map +1 -1
  365. package/decorator/listeners/AfterLoad.js +1 -2
  366. package/decorator/listeners/AfterLoad.js.map +1 -1
  367. package/decorator/listeners/AfterRecover.js +1 -2
  368. package/decorator/listeners/AfterRecover.js.map +1 -1
  369. package/decorator/listeners/AfterRemove.js +1 -2
  370. package/decorator/listeners/AfterRemove.js.map +1 -1
  371. package/decorator/listeners/AfterSoftRemove.js +1 -2
  372. package/decorator/listeners/AfterSoftRemove.js.map +1 -1
  373. package/decorator/listeners/AfterUpdate.js +1 -2
  374. package/decorator/listeners/AfterUpdate.js.map +1 -1
  375. package/decorator/listeners/BeforeInsert.js +1 -2
  376. package/decorator/listeners/BeforeInsert.js.map +1 -1
  377. package/decorator/listeners/BeforeRecover.js +1 -2
  378. package/decorator/listeners/BeforeRecover.js.map +1 -1
  379. package/decorator/listeners/BeforeRemove.js +1 -2
  380. package/decorator/listeners/BeforeRemove.js.map +1 -1
  381. package/decorator/listeners/BeforeSoftRemove.js +1 -2
  382. package/decorator/listeners/BeforeSoftRemove.js.map +1 -1
  383. package/decorator/listeners/BeforeUpdate.js +1 -2
  384. package/decorator/listeners/BeforeUpdate.js.map +1 -1
  385. package/decorator/listeners/EventSubscriber.js +1 -2
  386. package/decorator/listeners/EventSubscriber.js.map +1 -1
  387. package/decorator/relations/JoinColumn.js +1 -2
  388. package/decorator/relations/JoinColumn.js.map +1 -1
  389. package/decorator/relations/JoinTable.js +1 -2
  390. package/decorator/relations/JoinTable.js.map +1 -1
  391. package/decorator/relations/ManyToMany.js +1 -2
  392. package/decorator/relations/ManyToMany.js.map +1 -1
  393. package/decorator/relations/ManyToOne.js +1 -2
  394. package/decorator/relations/ManyToOne.js.map +1 -1
  395. package/decorator/relations/OneToMany.js +1 -2
  396. package/decorator/relations/OneToMany.js.map +1 -1
  397. package/decorator/relations/OneToOne.d.ts +4 -4
  398. package/decorator/relations/OneToOne.js +3 -4
  399. package/decorator/relations/OneToOne.js.map +1 -1
  400. package/decorator/relations/RelationCount.js +1 -2
  401. package/decorator/relations/RelationCount.js.map +1 -1
  402. package/decorator/relations/RelationId.js +1 -2
  403. package/decorator/relations/RelationId.js.map +1 -1
  404. package/decorator/tree/Tree.js +1 -2
  405. package/decorator/tree/Tree.js.map +1 -1
  406. package/decorator/tree/TreeChildren.js +1 -2
  407. package/decorator/tree/TreeChildren.js.map +1 -1
  408. package/decorator/tree/TreeLevelColumn.js +1 -2
  409. package/decorator/tree/TreeLevelColumn.js.map +1 -1
  410. package/decorator/tree/TreeParent.js +1 -2
  411. package/decorator/tree/TreeParent.js.map +1 -1
  412. package/driver/DriverFactory.js.map +1 -1
  413. package/driver/DriverUtils.js.map +1 -1
  414. package/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.d.ts +1 -1
  415. package/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.js.map +1 -1
  416. package/driver/aurora-mysql/AuroraMysqlDriver.js +10 -10
  417. package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  418. package/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +0 -1
  419. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +2 -2
  420. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  421. package/driver/aurora-postgres/AuroraPostgresDriver.js.map +1 -1
  422. package/driver/aurora-postgres/AuroraPostgresQueryRunner.js +2 -2
  423. package/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
  424. package/driver/better-sqlite3/BetterSqlite3Driver.js +2 -2
  425. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  426. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +4 -0
  427. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  428. package/driver/capacitor/CapacitorDriver.js.map +1 -1
  429. package/driver/capacitor/CapacitorQueryRunner.js +2 -2
  430. package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  431. package/driver/cockroachdb/CockroachConnectionCredentialsOptions.d.ts +1 -2
  432. package/driver/cockroachdb/CockroachConnectionCredentialsOptions.js.map +1 -1
  433. package/driver/cockroachdb/CockroachConnectionOptions.d.ts +1 -1
  434. package/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
  435. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  436. package/driver/cockroachdb/CockroachQueryRunner.d.ts +0 -1
  437. package/driver/cockroachdb/CockroachQueryRunner.js +8 -6
  438. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  439. package/driver/cordova/CordovaDriver.js.map +1 -1
  440. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  441. package/driver/expo/ExpoDriver.js.map +1 -1
  442. package/driver/expo/ExpoQueryRunner.js +2 -2
  443. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  444. package/driver/mongodb/MongoConnectionOptions.d.ts +1 -2
  445. package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  446. package/driver/mongodb/MongoDriver.js.map +1 -1
  447. package/driver/mongodb/MongoQueryRunner.d.ts +0 -1
  448. package/driver/mongodb/typings.d.ts +0 -8
  449. package/driver/mongodb/typings.js +0 -1
  450. package/driver/mongodb/typings.js.map +1 -1
  451. package/driver/mysql/MysqlConnectionCredentialsOptions.d.ts +1 -1
  452. package/driver/mysql/MysqlConnectionCredentialsOptions.js.map +1 -1
  453. package/driver/mysql/MysqlConnectionOptions.d.ts +1 -1
  454. package/driver/mysql/MysqlConnectionOptions.js.map +1 -1
  455. package/driver/mysql/MysqlDriver.js +12 -14
  456. package/driver/mysql/MysqlDriver.js.map +1 -1
  457. package/driver/mysql/MysqlQueryRunner.d.ts +0 -1
  458. package/driver/mysql/MysqlQueryRunner.js +1 -1
  459. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  460. package/driver/nativescript/NativescriptDriver.js.map +1 -1
  461. package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  462. package/driver/oracle/OracleConnectionCredentialsOptions.d.ts +1 -1
  463. package/driver/oracle/OracleConnectionCredentialsOptions.js.map +1 -1
  464. package/driver/oracle/OracleConnectionOptions.d.ts +1 -1
  465. package/driver/oracle/OracleConnectionOptions.js.map +1 -1
  466. package/driver/oracle/OracleDriver.js +18 -10
  467. package/driver/oracle/OracleDriver.js.map +1 -1
  468. package/driver/oracle/OracleQueryRunner.d.ts +0 -1
  469. package/driver/oracle/OracleQueryRunner.js +8 -10
  470. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  471. package/driver/postgres/PostgresConnectionCredentialsOptions.d.ts +1 -2
  472. package/driver/postgres/PostgresConnectionCredentialsOptions.js.map +1 -1
  473. package/driver/postgres/PostgresConnectionOptions.d.ts +1 -1
  474. package/driver/postgres/PostgresConnectionOptions.js.map +1 -1
  475. package/driver/postgres/PostgresDriver.js +11 -6
  476. package/driver/postgres/PostgresDriver.js.map +1 -1
  477. package/driver/postgres/PostgresQueryRunner.d.ts +1 -2
  478. package/driver/postgres/PostgresQueryRunner.js +35 -12
  479. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  480. package/driver/react-native/ReactNativeDriver.js +4 -6
  481. package/driver/react-native/ReactNativeDriver.js.map +1 -1
  482. package/driver/react-native/ReactNativeQueryRunner.js +2 -2
  483. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  484. package/driver/sap/SapDriver.js.map +1 -1
  485. package/driver/sap/SapQueryRunner.d.ts +0 -1
  486. package/driver/sap/SapQueryRunner.js +4 -4
  487. package/driver/sap/SapQueryRunner.js.map +1 -1
  488. package/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +1 -1
  489. package/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -1
  490. package/driver/spanner/SpannerConnectionOptions.d.ts +1 -1
  491. package/driver/spanner/SpannerConnectionOptions.js.map +1 -1
  492. package/driver/spanner/SpannerDriver.js.map +1 -1
  493. package/driver/spanner/SpannerQueryRunner.d.ts +0 -1
  494. package/driver/spanner/SpannerQueryRunner.js.map +1 -1
  495. package/driver/sqlite/SqliteDriver.js +2 -2
  496. package/driver/sqlite/SqliteDriver.js.map +1 -1
  497. package/driver/sqlite/SqliteQueryRunner.js +3 -2
  498. package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  499. package/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -6
  500. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  501. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +0 -1
  502. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +4 -4
  503. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  504. package/driver/sqljs/SqljsDriver.js +1 -2
  505. package/driver/sqljs/SqljsDriver.js.map +1 -1
  506. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  507. package/driver/sqlserver/SqlServerConnectionCredentialsOptions.d.ts +1 -1
  508. package/driver/sqlserver/SqlServerConnectionCredentialsOptions.js.map +1 -1
  509. package/driver/sqlserver/SqlServerConnectionOptions.d.ts +1 -1
  510. package/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
  511. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  512. package/driver/sqlserver/SqlServerQueryRunner.d.ts +0 -1
  513. package/driver/sqlserver/SqlServerQueryRunner.js +9 -7
  514. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  515. package/driver/types/ColumnTypes.d.ts +1 -1
  516. package/driver/types/ColumnTypes.js.map +1 -1
  517. package/driver/types/MetadataTableType.js +1 -1
  518. package/driver/types/MetadataTableType.js.map +1 -1
  519. package/entity-manager/EntityManager.d.ts +4 -2
  520. package/entity-manager/EntityManager.js +4 -2
  521. package/entity-manager/EntityManager.js.map +1 -1
  522. package/entity-manager/MongoEntityManager.js +1 -1
  523. package/entity-manager/MongoEntityManager.js.map +1 -1
  524. package/entity-schema/EntitySchemaTransformer.js +2 -3
  525. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  526. package/error/EntityMetadataNotFoundError.js.map +1 -1
  527. package/error/EntityNotFoundError.js.map +1 -1
  528. package/error/FindRelationsNotFoundError.js.map +1 -1
  529. package/error/MissingJoinColumnError.js.map +1 -1
  530. package/error/MissingJoinTableError.js.map +1 -1
  531. package/error/QueryFailedError.js.map +1 -1
  532. package/error/RepositoryNotTreeError.js.map +1 -1
  533. package/error/TypeORMError.js.map +1 -1
  534. package/find-options/FindOperator.js.map +1 -1
  535. package/find-options/FindOptionsOrder.d.ts +0 -1
  536. package/find-options/FindOptionsRelations.d.ts +0 -1
  537. package/find-options/FindOptionsSelect.d.ts +0 -1
  538. package/find-options/FindOptionsUtils.js +1 -1
  539. package/find-options/FindOptionsUtils.js.map +1 -1
  540. package/find-options/FindOptionsWhere.d.ts +0 -1
  541. package/find-options/operator/And.js +1 -2
  542. package/find-options/operator/And.js.map +1 -1
  543. package/find-options/operator/Any.js +1 -2
  544. package/find-options/operator/Any.js.map +1 -1
  545. package/find-options/operator/ArrayContainedBy.js +1 -2
  546. package/find-options/operator/ArrayContainedBy.js.map +1 -1
  547. package/find-options/operator/ArrayContains.js +1 -2
  548. package/find-options/operator/ArrayContains.js.map +1 -1
  549. package/find-options/operator/ArrayOverlap.js +1 -2
  550. package/find-options/operator/ArrayOverlap.js.map +1 -1
  551. package/find-options/operator/Between.js +1 -2
  552. package/find-options/operator/Between.js.map +1 -1
  553. package/find-options/operator/Equal.js +1 -2
  554. package/find-options/operator/Equal.js.map +1 -1
  555. package/find-options/operator/ILike.js +1 -2
  556. package/find-options/operator/ILike.js.map +1 -1
  557. package/find-options/operator/In.js +1 -2
  558. package/find-options/operator/In.js.map +1 -1
  559. package/find-options/operator/IsNull.js +1 -2
  560. package/find-options/operator/IsNull.js.map +1 -1
  561. package/find-options/operator/JsonContains.js +1 -2
  562. package/find-options/operator/JsonContains.js.map +1 -1
  563. package/find-options/operator/LessThan.js +1 -2
  564. package/find-options/operator/LessThan.js.map +1 -1
  565. package/find-options/operator/LessThanOrEqual.js +1 -2
  566. package/find-options/operator/LessThanOrEqual.js.map +1 -1
  567. package/find-options/operator/Like.js +1 -2
  568. package/find-options/operator/Like.js.map +1 -1
  569. package/find-options/operator/MoreThan.js +1 -2
  570. package/find-options/operator/MoreThan.js.map +1 -1
  571. package/find-options/operator/MoreThanOrEqual.js +1 -2
  572. package/find-options/operator/MoreThanOrEqual.js.map +1 -1
  573. package/find-options/operator/Not.js +1 -2
  574. package/find-options/operator/Not.js.map +1 -1
  575. package/find-options/operator/Or.js +1 -2
  576. package/find-options/operator/Or.js.map +1 -1
  577. package/find-options/operator/Raw.js +1 -2
  578. package/find-options/operator/Raw.js.map +1 -1
  579. package/globals.js +14 -15
  580. package/globals.js.map +1 -1
  581. package/logger/AbstractLogger.js.map +1 -1
  582. package/logger/AdvancedConsoleLogger.js +1 -2
  583. package/logger/AdvancedConsoleLogger.js.map +1 -1
  584. package/logger/DebugLogger.js +1 -2
  585. package/logger/DebugLogger.js.map +1 -1
  586. package/logger/FileLogger.js +2 -3
  587. package/logger/FileLogger.js.map +1 -1
  588. package/logger/LoggerFactory.js.map +1 -1
  589. package/logger/SimpleConsoleLogger.js +1 -2
  590. package/logger/SimpleConsoleLogger.js.map +1 -1
  591. package/metadata/CheckMetadata.js.map +1 -1
  592. package/metadata/ColumnMetadata.js +19 -15
  593. package/metadata/ColumnMetadata.js.map +1 -1
  594. package/metadata/EmbeddedMetadata.js +1 -1
  595. package/metadata/EmbeddedMetadata.js.map +1 -1
  596. package/metadata/EntityListenerMetadata.js.map +1 -1
  597. package/metadata/EntityMetadata.js +3 -7
  598. package/metadata/EntityMetadata.js.map +1 -1
  599. package/metadata/ExclusionMetadata.js.map +1 -1
  600. package/metadata/IndexMetadata.js.map +1 -1
  601. package/metadata/RelationIdMetadata.js.map +1 -1
  602. package/metadata/RelationMetadata.js.map +1 -1
  603. package/metadata/UniqueMetadata.js.map +1 -1
  604. package/metadata-args/MetadataArgsStorage.js.map +1 -1
  605. package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
  606. package/metadata-builder/EntityMetadataBuilder.js +5 -8
  607. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  608. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  609. package/metadata-builder/JunctionEntityMetadataBuilder.js +7 -8
  610. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  611. package/metadata-builder/MetadataUtils.js.map +1 -1
  612. package/metadata-builder/RelationJoinColumnBuilder.js +2 -3
  613. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  614. package/migration/MigrationExecutor.js +2 -2
  615. package/migration/MigrationExecutor.js.map +1 -1
  616. package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  617. package/naming-strategy/LegacyOracleNamingStrategy.js.map +1 -1
  618. package/package.json +1 -1
  619. package/persistence/EntityPersistExecutor.js.map +1 -1
  620. package/persistence/Subject.js.map +1 -1
  621. package/persistence/SubjectChangedColumnsComputer.js.map +1 -1
  622. package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  623. package/persistence/SubjectExecutor.js +3 -3
  624. package/persistence/SubjectExecutor.js.map +1 -1
  625. package/persistence/{SubjectTopoligicalSorter.d.ts → SubjectTopologicalSorter.d.ts} +1 -1
  626. package/persistence/{SubjectTopoligicalSorter.js → SubjectTopologicalSorter.js} +4 -4
  627. package/persistence/SubjectTopologicalSorter.js.map +1 -0
  628. package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  629. package/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  630. package/persistence/subject-builder/OneToManySubjectBuilder.js +1 -2
  631. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  632. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  633. package/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  634. package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  635. package/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
  636. package/platform/PlatformTools.d.ts +0 -1
  637. package/platform/PlatformTools.js +12 -18
  638. package/platform/PlatformTools.js.map +1 -1
  639. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  640. package/query-builder/InsertQueryBuilder.js +15 -15
  641. package/query-builder/InsertQueryBuilder.js.map +1 -1
  642. package/query-builder/JoinAttribute.js.map +1 -1
  643. package/query-builder/QueryBuilder.d.ts +1 -1
  644. package/query-builder/QueryBuilder.js +12 -14
  645. package/query-builder/QueryBuilder.js.map +1 -1
  646. package/query-builder/QueryExpressionMap.js +2 -2
  647. package/query-builder/QueryExpressionMap.js.map +1 -1
  648. package/query-builder/RelationIdLoader.js.map +1 -1
  649. package/query-builder/RelationLoader.js.map +1 -1
  650. package/query-builder/RelationQueryBuilder.js.map +1 -1
  651. package/query-builder/RelationRemover.js.map +1 -1
  652. package/query-builder/RelationUpdater.js.map +1 -1
  653. package/query-builder/ReturningResultsEntityUpdator.js +5 -2
  654. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  655. package/query-builder/SelectQueryBuilder.d.ts +4 -5
  656. package/query-builder/SelectQueryBuilder.js +23 -22
  657. package/query-builder/SelectQueryBuilder.js.map +1 -1
  658. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  659. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  660. package/query-builder/index.js +1 -2
  661. package/query-builder/index.js.map +1 -1
  662. package/query-builder/relation-count/RelationCountLoader.js.map +1 -1
  663. package/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js +2 -2
  664. package/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js.map +1 -1
  665. package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  666. package/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js +2 -2
  667. package/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js.map +1 -1
  668. package/query-builder/transformer/DocumentToEntityTransformer.js.map +1 -1
  669. package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
  670. package/query-builder/transformer/PlainObjectToNewEntityTransformer.js.map +1 -1
  671. package/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +9 -9
  672. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -88
  673. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  674. package/query-runner/BaseQueryRunner.js.map +1 -1
  675. package/query-runner/QueryLock.js.map +1 -1
  676. package/query-runner/QueryRunner.d.ts +0 -1
  677. package/repository/BaseEntity.js.map +1 -1
  678. package/repository/Repository.d.ts +2 -0
  679. package/repository/Repository.js +2 -0
  680. package/repository/Repository.js.map +1 -1
  681. package/repository/TreeRepository.js.map +1 -1
  682. package/schema-builder/RdbmsSchemaBuilder.js +2 -1
  683. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  684. package/schema-builder/table/Table.js +2 -2
  685. package/schema-builder/table/Table.js.map +1 -1
  686. package/schema-builder/table/TableColumn.js.map +1 -1
  687. package/schema-builder/util/ViewUtils.js.map +1 -1
  688. package/schema-builder/view/View.js.map +1 -1
  689. package/subscriber/Broadcaster.js +6 -6
  690. package/subscriber/Broadcaster.js.map +1 -1
  691. package/subscriber/BroadcasterResult.js.map +1 -1
  692. package/util/ApplyValueTransformers.js.map +1 -1
  693. package/util/DateUtils.js.map +1 -1
  694. package/util/DepGraph.js +2 -2
  695. package/util/DepGraph.js.map +1 -1
  696. package/util/DirectoryExportedClassesLoader.js +2 -3
  697. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  698. package/util/ImportUtils.js +24 -37
  699. package/util/ImportUtils.js.map +1 -1
  700. package/util/ObjectUtils.js.map +1 -1
  701. package/util/OrmUtils.js.map +1 -1
  702. package/util/PathUtils.js +4 -5
  703. package/util/PathUtils.js.map +1 -1
  704. package/util/RandomGenerator.js.map +1 -1
  705. package/util/StringUtils.js +6 -7
  706. package/util/StringUtils.js.map +1 -1
  707. package/util/TreeRepositoryUtils.js +3 -6
  708. package/util/TreeRepositoryUtils.js.map +1 -1
  709. package/browser/persistence/SubjectTopoligicalSorter.js.map +0 -1
  710. package/persistence/SubjectTopoligicalSorter.js.map +0 -1
@@ -18,6 +18,10 @@ class RawSqlResultsToEntityTransformer {
18
18
  this.rawRelationIdResults = rawRelationIdResults;
19
19
  this.rawRelationCountResults = rawRelationCountResults;
20
20
  this.queryRunner = queryRunner;
21
+ this.pojo = this.expressionMap.options.includes("create-pojo");
22
+ this.selections = new Set(this.expressionMap.selects.map((s) => s.selection));
23
+ this.aliasCache = new Map();
24
+ this.columnsCache = new Map();
21
25
  }
22
26
  // -------------------------------------------------------------------------
23
27
  // Public Methods
@@ -29,17 +33,32 @@ class RawSqlResultsToEntityTransformer {
29
33
  transform(rawResults, alias) {
30
34
  const group = this.group(rawResults, alias);
31
35
  const entities = [];
32
- group.forEach((results) => {
36
+ for (const results of group.values()) {
33
37
  const entity = this.transformRawResultsGroup(results, alias);
34
- if (entity !== undefined &&
35
- !Object.values(entity).every((value) => value === null))
38
+ if (entity !== undefined)
36
39
  entities.push(entity);
37
- });
40
+ }
38
41
  return entities;
39
42
  }
40
43
  // -------------------------------------------------------------------------
41
44
  // Protected Methods
42
45
  // -------------------------------------------------------------------------
46
+ /**
47
+ * Build an alias from a name and column name.
48
+ */
49
+ buildAlias(aliasName, columnName) {
50
+ let aliases = this.aliasCache.get(aliasName);
51
+ if (!aliases) {
52
+ aliases = new Map();
53
+ this.aliasCache.set(aliasName, aliases);
54
+ }
55
+ let columnAlias = aliases.get(columnName);
56
+ if (!columnAlias) {
57
+ columnAlias = DriverUtils_1.DriverUtils.buildAlias(this.driver, undefined, aliasName, columnName);
58
+ aliases.set(columnName, columnAlias);
59
+ }
60
+ return columnAlias;
61
+ }
43
62
  /**
44
63
  * Groups given raw results by ids of given alias.
45
64
  */
@@ -47,12 +66,12 @@ class RawSqlResultsToEntityTransformer {
47
66
  const map = new Map();
48
67
  const keys = [];
49
68
  if (alias.metadata.tableType === "view") {
50
- keys.push(...alias.metadata.columns.map((column) => DriverUtils_1.DriverUtils.buildAlias(this.driver, undefined, alias.name, column.databaseName)));
69
+ keys.push(...alias.metadata.columns.map((column) => this.buildAlias(alias.name, column.databaseName)));
51
70
  }
52
71
  else {
53
- keys.push(...alias.metadata.primaryColumns.map((column) => DriverUtils_1.DriverUtils.buildAlias(this.driver, undefined, alias.name, column.databaseName)));
72
+ keys.push(...alias.metadata.primaryColumns.map((column) => this.buildAlias(alias.name, column.databaseName)));
54
73
  }
55
- rawResults.forEach((rawResult) => {
74
+ for (const rawResult of rawResults) {
56
75
  const id = keys
57
76
  .map((key) => {
58
77
  const keyValue = rawResult[key];
@@ -72,7 +91,7 @@ class RawSqlResultsToEntityTransformer {
72
91
  else {
73
92
  items.push(rawResult);
74
93
  }
75
- });
94
+ }
76
95
  return map;
77
96
  }
78
97
  /**
@@ -82,7 +101,7 @@ class RawSqlResultsToEntityTransformer {
82
101
  // let hasColumns = false; // , hasEmbeddedColumns = false, hasParentColumns = false, hasParentEmbeddedColumns = false;
83
102
  let metadata = alias.metadata;
84
103
  if (metadata.discriminatorColumn) {
85
- const discriminatorValues = rawResults.map((result) => result[DriverUtils_1.DriverUtils.buildAlias(this.driver, undefined, alias.name, alias.metadata.discriminatorColumn.databaseName)]);
104
+ const discriminatorValues = rawResults.map((result) => result[this.buildAlias(alias.name, alias.metadata.discriminatorColumn.databaseName)]);
86
105
  const discriminatorMetadata = metadata.childEntityMetadatas.find((childEntityMetadata) => {
87
106
  return (typeof discriminatorValues.find((value) => value ===
88
107
  childEntityMetadata.discriminatorValue) !== "undefined");
@@ -92,7 +111,7 @@ class RawSqlResultsToEntityTransformer {
92
111
  }
93
112
  let entity = metadata.create(this.queryRunner, {
94
113
  fromDeserializer: true,
95
- pojo: this.expressionMap.options.indexOf("create-pojo") !== -1,
114
+ pojo: this.pojo,
96
115
  });
97
116
  // get value from columns selections and put them into newly created entity
98
117
  const hasColumns = this.transformColumns(rawResults, alias, entity, metadata);
@@ -106,7 +125,7 @@ class RawSqlResultsToEntityTransformer {
106
125
  // if we don't have any selected column we should not return entity,
107
126
  // except for the case when entity only contain a primary column as a relation to another entity
108
127
  // in this case its absolutely possible our entity to not have any columns except a single relation
109
- const hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.filter((column) => column.isVirtual === false).length === 0; // todo: create metadata.hasOnlyVirtualPrimaryColumns
128
+ const hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.every((column) => column.isVirtual === true); // todo: create metadata.hasOnlyVirtualPrimaryColumns
110
129
  if (hasOnlyVirtualPrimaryColumns &&
111
130
  (hasRelations || hasRelationIds || hasRelationCounts))
112
131
  return entity;
@@ -115,55 +134,18 @@ class RawSqlResultsToEntityTransformer {
115
134
  // get value from columns selections and put them into object
116
135
  transformColumns(rawResults, alias, entity, metadata) {
117
136
  let hasData = false;
118
- metadata.columns.forEach((column) => {
119
- // if table inheritance is used make sure this column is not child's column
120
- if (metadata.childEntityMetadatas.length > 0 &&
121
- metadata.childEntityMetadatas.findIndex((childMetadata) => childMetadata.target === column.target) !== -1)
122
- return;
123
- const value = rawResults[0][DriverUtils_1.DriverUtils.buildAlias(this.driver, undefined, alias.name, column.databaseName)];
124
- if (value === undefined || column.isVirtual)
125
- return;
126
- // if user does not selected the whole entity or he used partial selection and does not select this particular column
127
- // then we don't add this column and its value into the entity
128
- if (!this.expressionMap.selects.find((select) => select.selection === alias.name ||
129
- select.selection ===
130
- alias.name + "." + column.propertyPath))
131
- return;
132
- column.setEntityValue(entity, this.driver.prepareHydratedValue(value, column));
133
- if (value !== null)
134
- // we don't mark it as has data because if we will have all nulls in our object - we don't need such object
137
+ const result = rawResults[0];
138
+ for (const [key, column] of this.getColumnsToProcess(alias.name, metadata)) {
139
+ const value = result[key];
140
+ if (value === undefined)
141
+ continue;
142
+ // we don't mark it as has data because if we will have all nulls in our object - we don't need such object
143
+ else if (value !== null)
135
144
  hasData = true;
136
- });
137
- // Set all embedded column values to null if all their child columns are null
138
- if (entity) {
139
- metadata.embeddeds.forEach((embedded) => {
140
- if (embedded.propertyName in entity) {
141
- entity[embedded.propertyName] = this.deeplyNullify(entity[embedded.propertyName]);
142
- }
143
- });
145
+ column.setEntityValue(entity, this.driver.prepareHydratedValue(value, column));
144
146
  }
145
147
  return hasData;
146
148
  }
147
- /**
148
- * Returns whether an object is an iterrable
149
- * This is useful when trying to avoid objects such as Dates
150
- */
151
- isIterrableObject(obj) {
152
- const prototype = Object.prototype.toString.call(obj);
153
- return prototype === "[object Object]" || prototype === "[object Array]";
154
- }
155
- /**
156
- * Deeply nullify an object if all its properties values are null or undefined
157
- */
158
- deeplyNullify(obj) {
159
- if (!this.isIterrableObject(obj))
160
- return obj;
161
- for (const key in obj) {
162
- obj[key] = this.deeplyNullify(obj[key]);
163
- }
164
- const nullify = Object.values(obj).every((value) => value == null);
165
- return nullify ? null : obj;
166
- }
167
149
  /**
168
150
  * Transforms joined entities in the given raw results by a given alias and stores to the given (parent) entity
169
151
  */
@@ -171,38 +153,38 @@ class RawSqlResultsToEntityTransformer {
171
153
  let hasData = false;
172
154
  // let discriminatorValue: string = "";
173
155
  // if (metadata.discriminatorColumn)
174
- // discriminatorValue = rawResults[0][DriverUtils.buildAlias(this.connection.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)];
175
- this.expressionMap.joinAttributes.forEach((join) => {
156
+ // discriminatorValue = rawResults[0][this.buildAlias(alias.name, alias.metadata.discriminatorColumn!.databaseName)];
157
+ for (const join of this.expressionMap.joinAttributes) {
176
158
  // todo: we have problem here - when inner joins are used without selects it still create empty array
177
159
  // skip joins without metadata
178
160
  if (!join.metadata)
179
- return;
161
+ continue;
180
162
  // if simple left or inner join was performed without selection then we don't need to do anything
181
163
  if (!join.isSelected)
182
- return;
164
+ continue;
183
165
  // this check need to avoid setting properties than not belong to entity when single table inheritance used. (todo: check if we still need it)
184
166
  // const metadata = metadata.childEntityMetadatas.find(childEntityMetadata => discriminatorValue === childEntityMetadata.discriminatorValue);
185
167
  if (join.relation &&
186
168
  !metadata.relations.find((relation) => relation === join.relation))
187
- return;
169
+ continue;
188
170
  // some checks to make sure this join is for current alias
189
171
  if (join.mapToProperty) {
190
172
  if (join.mapToPropertyParentAlias !== alias.name)
191
- return;
173
+ continue;
192
174
  }
193
175
  else {
194
176
  if (!join.relation ||
195
177
  join.parentAlias !== alias.name ||
196
178
  join.relationPropertyPath !== join.relation.propertyPath)
197
- return;
179
+ continue;
198
180
  }
199
181
  // transform joined data into entities
200
182
  let result = this.transform(rawResults, join.alias);
201
183
  result = !join.isMany ? result[0] : result;
202
184
  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
185
+ // if nothing was joined then simply continue
203
186
  if (result === undefined)
204
- // if nothing was joined then simply return
205
- return;
187
+ continue;
206
188
  // if join was mapped to some property then save result to that property
207
189
  if (join.mapToPropertyPropertyName) {
208
190
  entity[join.mapToPropertyPropertyName] = result; // todo: fix embeds
@@ -212,19 +194,19 @@ class RawSqlResultsToEntityTransformer {
212
194
  join.relation.setEntityValue(entity, result);
213
195
  }
214
196
  hasData = true;
215
- });
197
+ }
216
198
  return hasData;
217
199
  }
218
200
  transformRelationIds(rawSqlResults, alias, entity, metadata) {
219
201
  let hasData = false;
220
- this.rawRelationIdResults.forEach((rawRelationIdResult, index) => {
202
+ for (const [index, rawRelationIdResult,] of this.rawRelationIdResults.entries()) {
221
203
  if (rawRelationIdResult.relationIdAttribute.parentAlias !==
222
204
  alias.name)
223
- return;
205
+ continue;
224
206
  const relation = rawRelationIdResult.relationIdAttribute.relation;
225
207
  const valueMap = this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);
226
208
  if (valueMap === undefined || valueMap === null) {
227
- return;
209
+ continue;
228
210
  }
229
211
  // prepare common data for this call
230
212
  this.prepareDataForTransformRelationIds();
@@ -256,42 +238,66 @@ class RawSqlResultsToEntityTransformer {
256
238
  mapToProperty(properties, entity, idMaps);
257
239
  hasData = hasData || idMaps.length > 0;
258
240
  }
259
- });
241
+ }
260
242
  return hasData;
261
243
  }
262
244
  transformRelationCounts(rawSqlResults, alias, entity) {
263
245
  let hasData = false;
264
- this.rawRelationCountResults
265
- .filter((rawRelationCountResult) => rawRelationCountResult.relationCountAttribute
266
- .parentAlias === alias.name)
267
- .forEach((rawRelationCountResult) => {
246
+ for (const rawRelationCountResult of this.rawRelationCountResults) {
247
+ if (rawRelationCountResult.relationCountAttribute.parentAlias !==
248
+ alias.name)
249
+ continue;
268
250
  const relation = rawRelationCountResult.relationCountAttribute.relation;
269
251
  let referenceColumnName;
270
252
  if (relation.isOneToMany) {
271
253
  referenceColumnName =
272
- relation.inverseRelation.joinColumns[0]
273
- .referencedColumn.databaseName; // todo: fix joinColumns[0]
254
+ relation.inverseRelation.joinColumns[0].referencedColumn
255
+ .databaseName; // todo: fix joinColumns[0]
274
256
  }
275
257
  else {
276
258
  referenceColumnName = relation.isOwning
277
259
  ? relation.joinColumns[0].referencedColumn.databaseName
278
- : relation.inverseRelation.joinColumns[0]
279
- .referencedColumn.databaseName;
260
+ : relation.inverseRelation.joinColumns[0].referencedColumn
261
+ .databaseName;
280
262
  }
281
- const referenceColumnValue = rawSqlResults[0][DriverUtils_1.DriverUtils.buildAlias(this.driver, undefined, alias.name, referenceColumnName)]; // we use zero index since its grouped data // todo: selection with alias for entity columns wont work
263
+ 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
282
264
  if (referenceColumnValue !== undefined &&
283
265
  referenceColumnValue !== null) {
284
266
  entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = 0;
285
- rawRelationCountResult.results
286
- .filter((result) => result["parentId"] === referenceColumnValue)
287
- .forEach((result) => {
267
+ for (const result of rawRelationCountResult.results) {
268
+ if (result["parentId"] !== referenceColumnValue)
269
+ continue;
288
270
  entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = parseInt(result["cnt"]);
289
271
  hasData = true;
290
- });
272
+ }
291
273
  }
292
- });
274
+ }
293
275
  return hasData;
294
276
  }
277
+ getColumnsToProcess(aliasName, metadata) {
278
+ let metadatas = this.columnsCache.get(aliasName);
279
+ if (!metadatas) {
280
+ metadatas = new Map();
281
+ this.columnsCache.set(aliasName, metadatas);
282
+ }
283
+ let columns = metadatas.get(metadata);
284
+ if (!columns) {
285
+ columns = metadata.columns
286
+ .filter((column) => !column.isVirtual &&
287
+ // if user does not selected the whole entity or he used partial selection and does not select this particular column
288
+ // then we don't add this column and its value into the entity
289
+ (this.selections.has(aliasName) ||
290
+ this.selections.has(`${aliasName}.${column.propertyPath}`)) &&
291
+ // if table inheritance is used make sure this column is not child's column
292
+ !metadata.childEntityMetadatas.some((childMetadata) => childMetadata.target === column.target))
293
+ .map((column) => [
294
+ this.buildAlias(aliasName, column.databaseName),
295
+ column,
296
+ ]);
297
+ metadatas.set(metadata, columns);
298
+ }
299
+ return columns;
300
+ }
295
301
  createValueMapFromJoinColumns(relation, parentAlias, rawSqlResults) {
296
302
  let columns;
297
303
  if (relation.isManyToOne || relation.isOneToOneOwner) {
@@ -309,16 +315,16 @@ class RawSqlResultsToEntityTransformer {
309
315
  }
310
316
  }
311
317
  return columns.reduce((valueMap, column) => {
312
- rawSqlResults.forEach((rawSqlResult) => {
318
+ for (const rawSqlResult of rawSqlResults) {
313
319
  if (relation.isManyToOne || relation.isOneToOneOwner) {
314
320
  valueMap[column.databaseName] =
315
- this.driver.prepareHydratedValue(rawSqlResult[DriverUtils_1.DriverUtils.buildAlias(this.driver, undefined, parentAlias, column.databaseName)], column);
321
+ this.driver.prepareHydratedValue(rawSqlResult[this.buildAlias(parentAlias, column.databaseName)], column);
316
322
  }
317
323
  else {
318
324
  valueMap[column.databaseName] =
319
- this.driver.prepareHydratedValue(rawSqlResult[DriverUtils_1.DriverUtils.buildAlias(this.driver, undefined, parentAlias, column.referencedColumn.databaseName)], column.referencedColumn);
325
+ this.driver.prepareHydratedValue(rawSqlResult[this.buildAlias(parentAlias, column.referencedColumn.databaseName)], column.referencedColumn);
320
326
  }
321
- });
327
+ }
322
328
  return valueMap;
323
329
  }, {});
324
330
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/transformer/RawSqlResultsToEntityTransformer.ts"],"names":[],"mappings":"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","file":"RawSqlResultsToEntityTransformer.js","sourcesContent":["import { Driver } from \"../../driver/Driver\"\nimport { RelationIdLoadResult } from \"../relation-id/RelationIdLoadResult\"\nimport { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport { ColumnMetadata } from \"../../metadata/ColumnMetadata\"\nimport { Alias } from \"../Alias\"\nimport { RelationCountLoadResult } from \"../relation-count/RelationCountLoadResult\"\nimport { RelationMetadata } from \"../../metadata/RelationMetadata\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\nimport { QueryExpressionMap } from \"../QueryExpressionMap\"\nimport { EntityMetadata } from \"../../metadata/EntityMetadata\"\nimport { QueryRunner } from \"../..\"\nimport { DriverUtils } from \"../../driver/DriverUtils\"\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":["../../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":"../.."}