typeorm 0.2.39-dev.d7d19e9 → 0.2.39-dev.d8c5812

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/browser/connection/ConnectionMetadataBuilder.js +4 -4
  2. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  3. package/browser/connection/options-reader/ConnectionOptionsYmlReader.js +1 -1
  4. package/browser/connection/options-reader/ConnectionOptionsYmlReader.js.map +1 -1
  5. package/browser/decorator/transaction/Transaction.js +3 -3
  6. package/browser/decorator/transaction/Transaction.js.map +1 -1
  7. package/browser/driver/DriverUtils.js +1 -1
  8. package/browser/driver/DriverUtils.js.map +1 -1
  9. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +2 -2
  10. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  11. package/browser/driver/cockroachdb/CockroachDriver.js +1 -1
  12. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  13. package/browser/driver/cockroachdb/CockroachQueryRunner.js +2 -2
  14. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  15. package/browser/driver/mysql/MysqlQueryRunner.js +2 -2
  16. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  17. package/browser/driver/oracle/OracleQueryRunner.js +2 -2
  18. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  19. package/browser/driver/postgres/PostgresDriver.js +1 -1
  20. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  21. package/browser/driver/postgres/PostgresQueryRunner.js +2 -2
  22. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  23. package/browser/driver/sap/SapQueryRunner.js +2 -2
  24. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  25. package/browser/driver/sqlite/SqliteQueryRunner.js +16 -8
  26. package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  27. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +2 -2
  28. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  29. package/browser/driver/sqlserver/SqlServerQueryRunner.js +10 -10
  30. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  31. package/browser/find-options/FindOptionsUtils.js +1 -1
  32. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  33. package/browser/metadata/ColumnMetadata.js +4 -4
  34. package/browser/metadata/ColumnMetadata.js.map +1 -1
  35. package/browser/metadata/EmbeddedMetadata.js +1 -1
  36. package/browser/metadata/EmbeddedMetadata.js.map +1 -1
  37. package/browser/metadata/EntityMetadata.js +1 -1
  38. package/browser/metadata/EntityMetadata.js.map +1 -1
  39. package/browser/metadata/RelationMetadata.js +4 -4
  40. package/browser/metadata/RelationMetadata.js.map +1 -1
  41. package/browser/metadata-builder/EntityMetadataBuilder.js +5 -5
  42. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  43. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +1 -1
  44. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  45. package/browser/naming-strategy/DefaultNamingStrategy.js +5 -5
  46. package/browser/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  47. package/browser/persistence/Subject.js +1 -1
  48. package/browser/persistence/Subject.js.map +1 -1
  49. package/browser/persistence/SubjectDatabaseEntityLoader.js +1 -1
  50. package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  51. package/browser/persistence/SubjectExecutor.js +1 -1
  52. package/browser/persistence/SubjectExecutor.js.map +1 -1
  53. package/browser/persistence/SubjectTopoligicalSorter.js +5 -5
  54. package/browser/persistence/SubjectTopoligicalSorter.js.map +1 -1
  55. package/browser/persistence/tree/ClosureSubjectExecutor.js +4 -4
  56. package/browser/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  57. package/browser/query-builder/InsertQueryBuilder.js +2 -2
  58. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  59. package/browser/query-builder/QueryBuilder.js +9 -9
  60. package/browser/query-builder/QueryBuilder.js.map +1 -1
  61. package/browser/query-builder/RelationLoader.js +2 -2
  62. package/browser/query-builder/RelationLoader.js.map +1 -1
  63. package/browser/query-builder/RelationRemover.js +6 -6
  64. package/browser/query-builder/RelationRemover.js.map +1 -1
  65. package/browser/query-builder/SelectQueryBuilder.js +7 -7
  66. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  67. package/browser/query-builder/UpdateQueryBuilder.js +2 -2
  68. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  69. package/browser/query-builder/relation-id/RelationIdLoader.js +1 -1
  70. package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  71. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +2 -2
  72. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  73. package/browser/query-runner/BaseQueryRunner.js +2 -2
  74. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  75. package/browser/query-runner/QueryLock.js +1 -1
  76. package/browser/query-runner/QueryLock.js.map +1 -1
  77. package/browser/repository/BaseEntity.js +1 -1
  78. package/browser/repository/BaseEntity.js.map +1 -1
  79. package/browser/repository/Repository.js +1 -1
  80. package/browser/repository/Repository.js.map +1 -1
  81. package/browser/repository/TreeRepository.js +2 -2
  82. package/browser/repository/TreeRepository.js.map +1 -1
  83. package/browser/schema-builder/table/TableCheck.js +1 -1
  84. package/browser/schema-builder/table/TableCheck.js.map +1 -1
  85. package/browser/schema-builder/table/TableForeignKey.js +2 -2
  86. package/browser/schema-builder/table/TableForeignKey.js.map +1 -1
  87. package/browser/schema-builder/table/TableIndex.js +1 -1
  88. package/browser/schema-builder/table/TableIndex.js.map +1 -1
  89. package/browser/schema-builder/table/TableUnique.js +1 -1
  90. package/browser/schema-builder/table/TableUnique.js.map +1 -1
  91. package/cache/DbQueryResultCache.js +12 -12
  92. package/cache/RedisQueryResultCache.js +12 -12
  93. package/cli.js +1 -6
  94. package/cli.js.map +1 -1
  95. package/commands/CacheClearCommand.js +4 -4
  96. package/commands/CacheClearCommand.js.map +1 -1
  97. package/commands/CommandUtils.js +10 -10
  98. package/commands/CommandUtils.js.map +1 -1
  99. package/commands/EntityCreateCommand.js +3 -3
  100. package/commands/EntityCreateCommand.js.map +1 -1
  101. package/commands/InitCommand.js +5 -5
  102. package/commands/InitCommand.js.map +1 -1
  103. package/commands/MigrationCreateCommand.js +5 -5
  104. package/commands/MigrationCreateCommand.js.map +1 -1
  105. package/commands/MigrationGenerateCommand.js +7 -7
  106. package/commands/MigrationGenerateCommand.js.map +1 -1
  107. package/commands/MigrationRevertCommand.js +4 -4
  108. package/commands/MigrationRevertCommand.js.map +1 -1
  109. package/commands/MigrationRunCommand.js +5 -5
  110. package/commands/MigrationRunCommand.js.map +1 -1
  111. package/commands/MigrationShowCommand.js +5 -5
  112. package/commands/MigrationShowCommand.js.map +1 -1
  113. package/commands/QueryCommand.js +4 -4
  114. package/commands/QueryCommand.js.map +1 -1
  115. package/commands/SchemaDropCommand.js +4 -4
  116. package/commands/SchemaDropCommand.js.map +1 -1
  117. package/commands/SchemaLogCommand.js +5 -5
  118. package/commands/SchemaLogCommand.js.map +1 -1
  119. package/commands/SchemaSyncCommand.js +4 -4
  120. package/commands/SchemaSyncCommand.js.map +1 -1
  121. package/commands/SubscriberCreateCommand.js +3 -3
  122. package/commands/SubscriberCreateCommand.js.map +1 -1
  123. package/commands/VersionCommand.js +3 -3
  124. package/commands/VersionCommand.js.map +1 -1
  125. package/connection/Connection.js +19 -19
  126. package/connection/Connection.js.map +1 -1
  127. package/connection/ConnectionMetadataBuilder.js +11 -11
  128. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  129. package/connection/ConnectionOptionsReader.js +9 -9
  130. package/connection/ConnectionOptionsReader.js.map +1 -1
  131. package/connection/options-reader/ConnectionOptionsEnvReader.js +2 -2
  132. package/connection/options-reader/ConnectionOptionsXmlReader.js +3 -3
  133. package/connection/options-reader/ConnectionOptionsXmlReader.js.map +1 -1
  134. package/connection/options-reader/ConnectionOptionsYmlReader.js +4 -4
  135. package/connection/options-reader/ConnectionOptionsYmlReader.js.map +1 -1
  136. package/decorator/Check.js +1 -1
  137. package/decorator/Check.js.map +1 -1
  138. package/decorator/EntityRepository.js +1 -1
  139. package/decorator/EntityRepository.js.map +1 -1
  140. package/decorator/Exclusion.js +1 -1
  141. package/decorator/Exclusion.js.map +1 -1
  142. package/decorator/Generated.js +1 -1
  143. package/decorator/Generated.js.map +1 -1
  144. package/decorator/Index.js +1 -1
  145. package/decorator/Index.js.map +1 -1
  146. package/decorator/Unique.js +1 -1
  147. package/decorator/Unique.js.map +1 -1
  148. package/decorator/columns/Column.js +4 -4
  149. package/decorator/columns/Column.js.map +1 -1
  150. package/decorator/columns/CreateDateColumn.js +1 -1
  151. package/decorator/columns/CreateDateColumn.js.map +1 -1
  152. package/decorator/columns/DeleteDateColumn.js +1 -1
  153. package/decorator/columns/DeleteDateColumn.js.map +1 -1
  154. package/decorator/columns/ObjectIdColumn.js +1 -1
  155. package/decorator/columns/ObjectIdColumn.js.map +1 -1
  156. package/decorator/columns/PrimaryColumn.js +2 -2
  157. package/decorator/columns/PrimaryColumn.js.map +1 -1
  158. package/decorator/columns/PrimaryGeneratedColumn.js +2 -2
  159. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  160. package/decorator/columns/UpdateDateColumn.js +1 -1
  161. package/decorator/columns/UpdateDateColumn.js.map +1 -1
  162. package/decorator/columns/VersionColumn.js +1 -1
  163. package/decorator/columns/VersionColumn.js.map +1 -1
  164. package/decorator/columns/ViewColumn.js +1 -1
  165. package/decorator/columns/ViewColumn.js.map +1 -1
  166. package/decorator/entity/ChildEntity.js +2 -2
  167. package/decorator/entity/ChildEntity.js.map +1 -1
  168. package/decorator/entity/Entity.js +1 -1
  169. package/decorator/entity/Entity.js.map +1 -1
  170. package/decorator/entity/TableInheritance.js +1 -1
  171. package/decorator/entity/TableInheritance.js.map +1 -1
  172. package/decorator/entity-view/ViewEntity.js +1 -1
  173. package/decorator/entity-view/ViewEntity.js.map +1 -1
  174. package/decorator/listeners/AfterInsert.js +1 -1
  175. package/decorator/listeners/AfterInsert.js.map +1 -1
  176. package/decorator/listeners/AfterLoad.js +1 -1
  177. package/decorator/listeners/AfterLoad.js.map +1 -1
  178. package/decorator/listeners/AfterRemove.js +1 -1
  179. package/decorator/listeners/AfterRemove.js.map +1 -1
  180. package/decorator/listeners/AfterUpdate.js +1 -1
  181. package/decorator/listeners/AfterUpdate.js.map +1 -1
  182. package/decorator/listeners/BeforeInsert.js +1 -1
  183. package/decorator/listeners/BeforeInsert.js.map +1 -1
  184. package/decorator/listeners/BeforeRemove.js +1 -1
  185. package/decorator/listeners/BeforeRemove.js.map +1 -1
  186. package/decorator/listeners/BeforeUpdate.js +1 -1
  187. package/decorator/listeners/BeforeUpdate.js.map +1 -1
  188. package/decorator/listeners/EventSubscriber.js +1 -1
  189. package/decorator/listeners/EventSubscriber.js.map +1 -1
  190. package/decorator/relations/JoinColumn.js +1 -1
  191. package/decorator/relations/JoinColumn.js.map +1 -1
  192. package/decorator/relations/JoinTable.js +1 -1
  193. package/decorator/relations/JoinTable.js.map +1 -1
  194. package/decorator/relations/ManyToMany.js +1 -1
  195. package/decorator/relations/ManyToMany.js.map +1 -1
  196. package/decorator/relations/ManyToOne.js +1 -1
  197. package/decorator/relations/ManyToOne.js.map +1 -1
  198. package/decorator/relations/OneToMany.js +1 -1
  199. package/decorator/relations/OneToMany.js.map +1 -1
  200. package/decorator/relations/OneToOne.js +1 -1
  201. package/decorator/relations/OneToOne.js.map +1 -1
  202. package/decorator/relations/RelationCount.js +1 -1
  203. package/decorator/relations/RelationCount.js.map +1 -1
  204. package/decorator/relations/RelationId.js +1 -1
  205. package/decorator/relations/RelationId.js.map +1 -1
  206. package/decorator/transaction/Transaction.js +7 -7
  207. package/decorator/transaction/Transaction.js.map +1 -1
  208. package/decorator/transaction/TransactionManager.js +1 -1
  209. package/decorator/transaction/TransactionManager.js.map +1 -1
  210. package/decorator/transaction/TransactionRepository.js +1 -1
  211. package/decorator/transaction/TransactionRepository.js.map +1 -1
  212. package/decorator/tree/Tree.js +1 -1
  213. package/decorator/tree/Tree.js.map +1 -1
  214. package/decorator/tree/TreeChildren.js +1 -1
  215. package/decorator/tree/TreeChildren.js.map +1 -1
  216. package/decorator/tree/TreeLevelColumn.js +1 -1
  217. package/decorator/tree/TreeLevelColumn.js.map +1 -1
  218. package/decorator/tree/TreeParent.js +1 -1
  219. package/decorator/tree/TreeParent.js.map +1 -1
  220. package/driver/DriverUtils.js +9 -9
  221. package/driver/DriverUtils.js.map +1 -1
  222. package/driver/aurora-data-api/AuroraDataApiConnection.js +1 -1
  223. package/driver/aurora-data-api/AuroraDataApiConnection.js.map +1 -1
  224. package/driver/aurora-data-api/AuroraDataApiDriver.js +6 -6
  225. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +129 -129
  226. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  227. package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js +8 -8
  228. package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js.map +1 -1
  229. package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +12 -12
  230. package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
  231. package/driver/better-sqlite3/BetterSqlite3Driver.js +10 -10
  232. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  233. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +5 -5
  234. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  235. package/driver/capacitor/CapacitorDriver.js +7 -7
  236. package/driver/capacitor/CapacitorDriver.js.map +1 -1
  237. package/driver/capacitor/CapacitorQueryRunner.js +5 -5
  238. package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  239. package/driver/cockroachdb/CockroachDriver.js +11 -11
  240. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  241. package/driver/cockroachdb/CockroachQueryRunner.js +137 -137
  242. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  243. package/driver/cordova/CordovaDriver.js +3 -3
  244. package/driver/cordova/CordovaDriver.js.map +1 -1
  245. package/driver/cordova/CordovaQueryRunner.js +13 -13
  246. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  247. package/driver/expo/ExpoDriver.js +3 -3
  248. package/driver/expo/ExpoDriver.js.map +1 -1
  249. package/driver/expo/ExpoQueryRunner.js +11 -11
  250. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  251. package/driver/mongodb/MongoDriver.js +2 -2
  252. package/driver/mongodb/MongoQueryRunner.js +178 -178
  253. package/driver/mysql/MysqlDriver.js +5 -5
  254. package/driver/mysql/MysqlDriver.js.map +1 -1
  255. package/driver/mysql/MysqlQueryRunner.js +130 -130
  256. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  257. package/driver/nativescript/NativescriptDriver.js +3 -3
  258. package/driver/nativescript/NativescriptDriver.js.map +1 -1
  259. package/driver/nativescript/NativescriptQueryRunner.js +3 -3
  260. package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  261. package/driver/oracle/OracleDriver.js +8 -8
  262. package/driver/oracle/OracleQueryRunner.js +125 -125
  263. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  264. package/driver/postgres/PostgresDriver.js +19 -19
  265. package/driver/postgres/PostgresDriver.js.map +1 -1
  266. package/driver/postgres/PostgresQueryRunner.js +150 -150
  267. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  268. package/driver/react-native/ReactNativeDriver.js +3 -3
  269. package/driver/react-native/ReactNativeDriver.js.map +1 -1
  270. package/driver/react-native/ReactNativeQueryRunner.js +3 -3
  271. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  272. package/driver/sap/SapDriver.js +5 -5
  273. package/driver/sap/SapDriver.js.map +1 -1
  274. package/driver/sap/SapQueryRunner.js +135 -135
  275. package/driver/sap/SapQueryRunner.js.map +1 -1
  276. package/driver/sqlite/SqliteDriver.js +10 -10
  277. package/driver/sqlite/SqliteDriver.js.map +1 -1
  278. package/driver/sqlite/SqliteQueryRunner.js +21 -13
  279. package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  280. package/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -4
  281. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +121 -121
  282. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  283. package/driver/sqljs/SqljsDriver.js +13 -13
  284. package/driver/sqljs/SqljsDriver.js.map +1 -1
  285. package/driver/sqljs/SqljsQueryRunner.js +9 -9
  286. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  287. package/driver/sqlserver/SqlServerDriver.js +6 -6
  288. package/driver/sqlserver/SqlServerQueryRunner.js +152 -152
  289. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  290. package/entity-manager/EntityManager.js +30 -30
  291. package/entity-manager/EntityManager.js.map +1 -1
  292. package/entity-manager/MongoEntityManager.js +15 -15
  293. package/entity-manager/MongoEntityManager.js.map +1 -1
  294. package/entity-manager/SqljsEntityManager.js +5 -5
  295. package/entity-manager/SqljsEntityManager.js.map +1 -1
  296. package/entity-schema/EntitySchemaTransformer.js +1 -1
  297. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  298. package/error/AlreadyHasActiveConnectionError.js +1 -1
  299. package/error/AlreadyHasActiveConnectionError.js.map +1 -1
  300. package/error/CannotAttachTreeChildrenEntityError.js +1 -1
  301. package/error/CannotAttachTreeChildrenEntityError.js.map +1 -1
  302. package/error/CannotConnectAlreadyConnectedError.js +1 -1
  303. package/error/CannotConnectAlreadyConnectedError.js.map +1 -1
  304. package/error/CannotCreateEntityIdMapError.js +1 -1
  305. package/error/CannotCreateEntityIdMapError.js.map +1 -1
  306. package/error/CannotDetermineEntityError.js +1 -1
  307. package/error/CannotDetermineEntityError.js.map +1 -1
  308. package/error/CannotExecuteNotConnectedError.js +1 -1
  309. package/error/CannotExecuteNotConnectedError.js.map +1 -1
  310. package/error/CannotGetEntityManagerNotConnectedError.js +1 -1
  311. package/error/CannotGetEntityManagerNotConnectedError.js.map +1 -1
  312. package/error/CannotReflectMethodParameterTypeError.js +1 -1
  313. package/error/CannotReflectMethodParameterTypeError.js.map +1 -1
  314. package/error/CircularRelationsError.js +1 -1
  315. package/error/CircularRelationsError.js.map +1 -1
  316. package/error/ColumnTypeUndefinedError.js +1 -1
  317. package/error/ColumnTypeUndefinedError.js.map +1 -1
  318. package/error/ConnectionIsNotSetError.js +1 -1
  319. package/error/ConnectionIsNotSetError.js.map +1 -1
  320. package/error/ConnectionNotFoundError.js +1 -1
  321. package/error/ConnectionNotFoundError.js.map +1 -1
  322. package/error/CustomRepositoryCannotInheritRepositoryError.js +1 -1
  323. package/error/CustomRepositoryCannotInheritRepositoryError.js.map +1 -1
  324. package/error/CustomRepositoryDoesNotHaveEntityError.js +1 -1
  325. package/error/CustomRepositoryDoesNotHaveEntityError.js.map +1 -1
  326. package/error/CustomRepositoryNotFoundError.js +1 -1
  327. package/error/CustomRepositoryNotFoundError.js.map +1 -1
  328. package/error/DataTypeNotSupportedError.js +1 -1
  329. package/error/DataTypeNotSupportedError.js.map +1 -1
  330. package/error/DriverOptionNotSetError.js +1 -1
  331. package/error/DriverOptionNotSetError.js.map +1 -1
  332. package/error/DriverPackageNotInstalledError.js +1 -1
  333. package/error/DriverPackageNotInstalledError.js.map +1 -1
  334. package/error/EntityColumnNotFound.js +1 -1
  335. package/error/EntityColumnNotFound.js.map +1 -1
  336. package/error/EntityMetadataNotFoundError.js +1 -1
  337. package/error/EntityMetadataNotFoundError.js.map +1 -1
  338. package/error/EntityNotFoundError.js +1 -1
  339. package/error/EntityNotFoundError.js.map +1 -1
  340. package/error/FindRelationsNotFoundError.js +1 -1
  341. package/error/FindRelationsNotFoundError.js.map +1 -1
  342. package/error/InitializedRelationError.js +1 -1
  343. package/error/InitializedRelationError.js.map +1 -1
  344. package/error/InsertValuesMissingError.js +1 -1
  345. package/error/InsertValuesMissingError.js.map +1 -1
  346. package/error/LimitOnUpdateNotSupportedError.js +1 -1
  347. package/error/LimitOnUpdateNotSupportedError.js.map +1 -1
  348. package/error/LockNotSupportedOnGivenDriverError.js +1 -1
  349. package/error/LockNotSupportedOnGivenDriverError.js.map +1 -1
  350. package/error/MetadataAlreadyExistsError.js +1 -1
  351. package/error/MetadataAlreadyExistsError.js.map +1 -1
  352. package/error/MetadataWithSuchNameAlreadyExistsError.js +1 -1
  353. package/error/MetadataWithSuchNameAlreadyExistsError.js.map +1 -1
  354. package/error/MissingDeleteDateColumnError.js +1 -1
  355. package/error/MissingDeleteDateColumnError.js.map +1 -1
  356. package/error/MissingDriverError.js +1 -1
  357. package/error/MissingDriverError.js.map +1 -1
  358. package/error/MissingJoinColumnError.js +1 -1
  359. package/error/MissingJoinColumnError.js.map +1 -1
  360. package/error/MissingJoinTableError.js +1 -1
  361. package/error/MissingJoinTableError.js.map +1 -1
  362. package/error/MissingPrimaryColumnError.js +1 -1
  363. package/error/MissingPrimaryColumnError.js.map +1 -1
  364. package/error/MustBeEntityError.js +1 -1
  365. package/error/MustBeEntityError.js.map +1 -1
  366. package/error/NamingStrategyNotFoundError.js +1 -1
  367. package/error/NamingStrategyNotFoundError.js.map +1 -1
  368. package/error/NestedSetMultipleRootError.js +1 -1
  369. package/error/NestedSetMultipleRootError.js.map +1 -1
  370. package/error/NoConnectionForRepositoryError.js +1 -1
  371. package/error/NoConnectionForRepositoryError.js.map +1 -1
  372. package/error/NoConnectionOptionError.js +1 -1
  373. package/error/NoConnectionOptionError.js.map +1 -1
  374. package/error/NoNeedToReleaseEntityManagerError.js +1 -1
  375. package/error/NoNeedToReleaseEntityManagerError.js.map +1 -1
  376. package/error/NoVersionOrUpdateDateColumnError.js +1 -1
  377. package/error/NoVersionOrUpdateDateColumnError.js.map +1 -1
  378. package/error/OffsetWithoutLimitNotSupportedError.js +1 -1
  379. package/error/OffsetWithoutLimitNotSupportedError.js.map +1 -1
  380. package/error/OptimisticLockCanNotBeUsedError.js +1 -1
  381. package/error/OptimisticLockCanNotBeUsedError.js.map +1 -1
  382. package/error/OptimisticLockVersionMismatchError.js +1 -1
  383. package/error/OptimisticLockVersionMismatchError.js.map +1 -1
  384. package/error/PersistedEntityNotFoundError.js +1 -1
  385. package/error/PersistedEntityNotFoundError.js.map +1 -1
  386. package/error/PessimisticLockTransactionRequiredError.js +1 -1
  387. package/error/PessimisticLockTransactionRequiredError.js.map +1 -1
  388. package/error/PrimaryColumnCannotBeNullableError.js +1 -1
  389. package/error/PrimaryColumnCannotBeNullableError.js.map +1 -1
  390. package/error/QueryFailedError.js +3 -3
  391. package/error/QueryFailedError.js.map +1 -1
  392. package/error/QueryRunnerAlreadyReleasedError.js +1 -1
  393. package/error/QueryRunnerAlreadyReleasedError.js.map +1 -1
  394. package/error/QueryRunnerProviderAlreadyReleasedError.js +1 -1
  395. package/error/QueryRunnerProviderAlreadyReleasedError.js.map +1 -1
  396. package/error/RepositoryNotFoundError.js +1 -1
  397. package/error/RepositoryNotFoundError.js.map +1 -1
  398. package/error/RepositoryNotTreeError.js +1 -1
  399. package/error/RepositoryNotTreeError.js.map +1 -1
  400. package/error/ReturningStatementNotSupportedError.js +1 -1
  401. package/error/ReturningStatementNotSupportedError.js.map +1 -1
  402. package/error/SubjectRemovedAndUpdatedError.js +1 -1
  403. package/error/SubjectRemovedAndUpdatedError.js.map +1 -1
  404. package/error/SubjectWithoutIdentifierError.js +1 -1
  405. package/error/SubjectWithoutIdentifierError.js.map +1 -1
  406. package/error/TransactionAlreadyStartedError.js +1 -1
  407. package/error/TransactionAlreadyStartedError.js.map +1 -1
  408. package/error/TransactionNotStartedError.js +1 -1
  409. package/error/TransactionNotStartedError.js.map +1 -1
  410. package/error/TreeRepositoryNotSupportedError.js +1 -1
  411. package/error/TreeRepositoryNotSupportedError.js.map +1 -1
  412. package/error/TypeORMError.js +1 -1
  413. package/error/TypeORMError.js.map +1 -1
  414. package/error/UpdateValuesMissingError.js +1 -1
  415. package/error/UpdateValuesMissingError.js.map +1 -1
  416. package/error/UsingJoinColumnIsNotAllowedError.js +1 -1
  417. package/error/UsingJoinColumnIsNotAllowedError.js.map +1 -1
  418. package/error/UsingJoinColumnOnlyOnOneSideAllowedError.js +1 -1
  419. package/error/UsingJoinColumnOnlyOnOneSideAllowedError.js.map +1 -1
  420. package/error/UsingJoinTableIsNotAllowedError.js +1 -1
  421. package/error/UsingJoinTableIsNotAllowedError.js.map +1 -1
  422. package/error/UsingJoinTableOnlyOnOneSideAllowedError.js +1 -1
  423. package/error/UsingJoinTableOnlyOnOneSideAllowedError.js.map +1 -1
  424. package/error/index.js +62 -62
  425. package/error/index.js.map +1 -1
  426. package/find-options/FindOptionsUtils.js +4 -4
  427. package/find-options/FindOptionsUtils.js.map +1 -1
  428. package/globals.js +7 -7
  429. package/globals.js.map +1 -1
  430. package/index.js +102 -102
  431. package/index.js.map +1 -1
  432. package/logger/DebugLogger.js +9 -9
  433. package/logger/DebugLogger.js.map +1 -1
  434. package/logger/FileLogger.js +1 -1
  435. package/logger/FileLogger.js.map +1 -1
  436. package/metadata/ColumnMetadata.js +4 -4
  437. package/metadata/ColumnMetadata.js.map +1 -1
  438. package/metadata/EmbeddedMetadata.js +1 -1
  439. package/metadata/EmbeddedMetadata.js.map +1 -1
  440. package/metadata/EntityMetadata.js +2 -2
  441. package/metadata/EntityMetadata.js.map +1 -1
  442. package/metadata/RelationMetadata.js +4 -4
  443. package/metadata/RelationMetadata.js.map +1 -1
  444. package/metadata-builder/EntityMetadataBuilder.js +5 -5
  445. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  446. package/metadata-builder/JunctionEntityMetadataBuilder.js +1 -1
  447. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  448. package/migration/MigrationExecutor.js +33 -33
  449. package/migration/MigrationExecutor.js.map +1 -1
  450. package/naming-strategy/DefaultNamingStrategy.js +10 -10
  451. package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  452. package/package.json +1 -1
  453. package/persistence/EntityPersistExecutor.js +5 -5
  454. package/persistence/EntityPersistExecutor.js.map +1 -1
  455. package/persistence/Subject.js +1 -1
  456. package/persistence/Subject.js.map +1 -1
  457. package/persistence/SubjectDatabaseEntityLoader.js +6 -6
  458. package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  459. package/persistence/SubjectExecutor.js +31 -31
  460. package/persistence/SubjectExecutor.js.map +1 -1
  461. package/persistence/SubjectTopoligicalSorter.js +5 -5
  462. package/persistence/SubjectTopoligicalSorter.js.map +1 -1
  463. package/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
  464. package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  465. package/persistence/tree/ClosureSubjectExecutor.js +13 -13
  466. package/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  467. package/persistence/tree/MaterializedPathSubjectExecutor.js +5 -5
  468. package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  469. package/persistence/tree/NestedSetSubjectExecutor.js +14 -14
  470. package/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
  471. package/platform/PlatformTools.js +8 -8
  472. package/platform/PlatformTools.js.map +1 -1
  473. package/query-builder/DeleteQueryBuilder.js +4 -4
  474. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  475. package/query-builder/InsertQueryBuilder.js +7 -7
  476. package/query-builder/InsertQueryBuilder.js.map +1 -1
  477. package/query-builder/JoinAttribute.js +1 -1
  478. package/query-builder/JoinAttribute.js.map +1 -1
  479. package/query-builder/QueryBuilder.js +37 -37
  480. package/query-builder/QueryBuilder.js.map +1 -1
  481. package/query-builder/QueryBuilderUtils.js +1 -1
  482. package/query-builder/QueryBuilderUtils.js.map +1 -1
  483. package/query-builder/QueryExpressionMap.js +3 -3
  484. package/query-builder/QueryExpressionMap.js.map +1 -1
  485. package/query-builder/RelationLoader.js +2 -2
  486. package/query-builder/RelationLoader.js.map +1 -1
  487. package/query-builder/RelationQueryBuilder.js +13 -13
  488. package/query-builder/RelationQueryBuilder.js.map +1 -1
  489. package/query-builder/RelationRemover.js +12 -12
  490. package/query-builder/RelationRemover.js.map +1 -1
  491. package/query-builder/RelationUpdater.js +2 -2
  492. package/query-builder/ReturningResultsEntityUpdator.js +6 -6
  493. package/query-builder/SelectQueryBuilder.js +36 -36
  494. package/query-builder/SelectQueryBuilder.js.map +1 -1
  495. package/query-builder/SoftDeleteQueryBuilder.js +4 -4
  496. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  497. package/query-builder/UpdateQueryBuilder.js +7 -7
  498. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  499. package/query-builder/relation-count/RelationCountAttribute.js +2 -2
  500. package/query-builder/relation-count/RelationCountAttribute.js.map +1 -1
  501. package/query-builder/relation-count/RelationCountLoader.js +4 -4
  502. package/query-builder/relation-id/RelationIdAttribute.js +1 -1
  503. package/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
  504. package/query-builder/relation-id/RelationIdLoader.js +5 -5
  505. package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  506. package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js +3 -3
  507. package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
  508. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +2 -2
  509. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  510. package/query-runner/BaseQueryRunner.js +25 -25
  511. package/query-runner/BaseQueryRunner.js.map +1 -1
  512. package/query-runner/QueryLock.js +3 -3
  513. package/query-runner/QueryLock.js.map +1 -1
  514. package/repository/AbstractRepository.js +1 -1
  515. package/repository/AbstractRepository.js.map +1 -1
  516. package/repository/BaseEntity.js +4 -4
  517. package/repository/BaseEntity.js.map +1 -1
  518. package/repository/MongoRepository.js +1 -1
  519. package/repository/MongoRepository.js.map +1 -1
  520. package/repository/Repository.js +1 -1
  521. package/repository/Repository.js.map +1 -1
  522. package/repository/TreeRepository.js +7 -7
  523. package/repository/TreeRepository.js.map +1 -1
  524. package/schema-builder/MongoSchemaBuilder.js +2 -2
  525. package/schema-builder/RdbmsSchemaBuilder.js +95 -95
  526. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  527. package/schema-builder/table/Table.js +1 -1
  528. package/schema-builder/table/Table.js.map +1 -1
  529. package/schema-builder/table/TableCheck.js +1 -1
  530. package/schema-builder/table/TableCheck.js.map +1 -1
  531. package/schema-builder/table/TableForeignKey.js +2 -2
  532. package/schema-builder/table/TableForeignKey.js.map +1 -1
  533. package/schema-builder/table/TableIndex.js +1 -1
  534. package/schema-builder/table/TableIndex.js.map +1 -1
  535. package/schema-builder/table/TableUnique.js +1 -1
  536. package/schema-builder/table/TableUnique.js.map +1 -1
  537. package/util/DateUtils.js +1 -1
  538. package/util/DateUtils.js.map +1 -1
  539. package/util/DirectoryExportedClassesLoader.js +1 -1
  540. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  541. package/util/ObjectUtils.js +2 -2
  542. package/util/ObjectUtils.js.map +1 -1
  543. package/util/OrmUtils.js +2 -2
  544. package/util/OrmUtils.js.map +1 -1
  545. package/util/StringUtils.js +2 -2
  546. package/util/StringUtils.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/persistence/Subject.ts"],"names":[],"mappings":"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","file":"Subject.js","sourcesContent":["import {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {SubjectChangeMap} from \"./SubjectChangeMap\";\nimport {OrmUtils} from \"../util/OrmUtils\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\n\n/**\n * Subject is a subject of persistence.\n * It holds information about each entity that needs to be persisted:\n * - what entity should be persisted\n * - what is database representation of the persisted entity\n * - what entity metadata of the persisted entity\n * - what is allowed to with persisted entity (insert/update/remove)\n *\n * Having this collection of subjects we can perform database queries.\n */\nexport class Subject {\n\n // -------------------------------------------------------------------------\n // Properties\n // -------------------------------------------------------------------------\n\n /**\n * Entity metadata of the subject entity.\n */\n metadata: EntityMetadata;\n\n /**\n * Subject identifier.\n * This identifier is not limited to table entity primary columns.\n * This can be entity id or ids as well as some unique entity properties, like name or title.\n * Insert / Update / Remove operation will be executed by a given identifier.\n */\n identifier: ObjectLiteral|undefined = undefined;\n\n /**\n * Copy of entity but with relational ids fulfilled.\n */\n entityWithFulfilledIds: ObjectLiteral|undefined = undefined;\n\n /**\n * If subject was created by cascades this property will contain subject\n * from where this subject was created.\n */\n parentSubject?: Subject;\n\n /**\n * Gets entity sent to the persistence (e.g. changed entity).\n * If entity is not set then this subject is created only for the entity loaded from the database,\n * or this subject is used for the junction operation (junction operations are relying only on identifier).\n */\n entity?: ObjectLiteral;\n\n /**\n * Database entity.\n * THIS IS NOT RAW ENTITY DATA, its a real entity.\n */\n databaseEntity?: ObjectLiteral;\n\n /**\n * Indicates if database entity was loaded.\n * No matter if it was found or not, it indicates the fact of loading.\n */\n databaseEntityLoaded: boolean = false;\n\n /**\n * Changes needs to be applied in the database for the given subject.\n */\n changeMaps: SubjectChangeMap[] = [];\n\n /**\n * Generated values returned by a database (for example generated id or default values).\n * Used in insert and update operations.\n * Has entity-like structure (not just column database name and values).\n */\n generatedMap?: ObjectLiteral;\n\n /**\n * Inserted values with updated values of special and default columns.\n * Has entity-like structure (not just column database name and values).\n */\n insertedValueSet?: ObjectLiteral;\n\n /**\n * Indicates if this subject can be inserted into the database.\n * This means that this subject either is newly persisted, either can be inserted by cascades.\n */\n canBeInserted: boolean = false;\n\n /**\n * Indicates if this subject can be updated in the database.\n * This means that this subject either was persisted, either can be updated by cascades.\n */\n canBeUpdated: boolean = false;\n\n /**\n * Indicates if this subject MUST be removed from the database.\n * This means that this subject either was removed, either was removed by cascades.\n */\n mustBeRemoved: boolean = false;\n\n /**\n * Indicates if this subject can be soft-removed from the database.\n * This means that this subject either was soft-removed, either was soft-removed by cascades.\n */\n canBeSoftRemoved: boolean = false;\n\n /**\n * Indicates if this subject can be recovered from the database.\n * This means that this subject either was recovered, either was recovered by cascades.\n */\n canBeRecovered: boolean = false;\n\n /**\n * Relations updated by the change maps.\n */\n updatedRelationMaps: { relation: RelationMetadata, value: ObjectLiteral }[] = [];\n\n /**\n * List of updated columns\n */\n diffColumns: ColumnMetadata[] = [];\n\n /**\n * List of updated relations\n */\n diffRelations: RelationMetadata[] = [];\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(options: {\n metadata: EntityMetadata,\n parentSubject?: Subject,\n entity?: ObjectLiteral,\n canBeInserted?: boolean,\n canBeUpdated?: boolean,\n mustBeRemoved?: boolean,\n canBeSoftRemoved?: boolean,\n canBeRecovered?: boolean,\n identifier?: ObjectLiteral,\n changeMaps?: SubjectChangeMap[]\n }) {\n this.metadata = options.metadata;\n this.entity = options.entity;\n this.parentSubject = options.parentSubject;\n if (options.canBeInserted !== undefined)\n this.canBeInserted = options.canBeInserted;\n if (options.canBeUpdated !== undefined)\n this.canBeUpdated = options.canBeUpdated;\n if (options.mustBeRemoved !== undefined)\n this.mustBeRemoved = options.mustBeRemoved;\n if (options.canBeSoftRemoved !== undefined)\n this.canBeSoftRemoved = options.canBeSoftRemoved;\n if (options.canBeRecovered !== undefined)\n this.canBeRecovered = options.canBeRecovered;\n if (options.identifier !== undefined)\n this.identifier = options.identifier;\n if (options.changeMaps !== undefined)\n this.changeMaps.push(...options.changeMaps);\n\n this.recompute();\n }\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Checks if this subject must be inserted into the database.\n * Subject can be inserted into the database if it is allowed to be inserted (explicitly persisted or by cascades)\n * and if it does not have database entity set.\n */\n get mustBeInserted() {\n return this.canBeInserted && !this.databaseEntity;\n }\n\n /**\n * Checks if this subject must be updated into the database.\n * Subject can be updated in the database if it is allowed to be updated (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get mustBeUpdated() {\n return this.canBeUpdated &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity)) &&\n // ((this.entity && this.databaseEntity) || (!this.entity && !this.databaseEntity)) &&\n this.changeMaps.length > 0;\n }\n\n /**\n * Checks if this subject must be soft-removed into the database.\n * Subject can be updated in the database if it is allowed to be soft-removed (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get mustBeSoftRemoved() {\n return this.canBeSoftRemoved &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n }\n\n /**\n * Checks if this subject must be recovered into the database.\n * Subject can be updated in the database if it is allowed to be recovered (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get mustBeRecovered() {\n return this.canBeRecovered &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a value set needs to be inserted / updated in the database.\n * Value set is based on the entity and change maps of the subject.\n * Important note: this method pops data from this subject's change maps.\n */\n createValueSetAndPopChangeMap(): ObjectLiteral {\n const changeMapsWithoutValues: SubjectChangeMap[] = [];\n const changeSet = this.changeMaps.reduce((updateMap, changeMap) => {\n let value = changeMap.value;\n if (value instanceof Subject) {\n\n // referenced columns can refer on values both which were just inserted and which were present in the model\n // if entity was just inserted valueSets must contain all values from the entity and values just inserted in the database\n // so, here we check if we have a value set then we simply use it as value to get our reference column values\n // otherwise simply use an entity which cannot be just inserted at the moment and have all necessary data\n value = value.insertedValueSet ? value.insertedValueSet : value.entity;\n }\n // value = changeMap.valueFactory ? changeMap.valueFactory(value) : changeMap.column.createValueMap(value);\n\n let valueMap: ObjectLiteral|undefined;\n if (this.metadata.isJunction && changeMap.column) {\n valueMap = changeMap.column.createValueMap(changeMap.column.referencedColumn!.getEntityValue(value));\n\n } else if (changeMap.column) {\n valueMap = changeMap.column.createValueMap(value);\n\n } else if (changeMap.relation) {\n\n // value can be a related object, for example: post.question = { id: 1 }\n // or value can be a null or direct relation id, e.g. post.question = 1\n // if its a direction relation id then we just set it to the valueMap,\n // however if its an object then we need to extract its relation id map and set it to the valueMap\n if (value instanceof Object && !(value instanceof Buffer)) {\n\n // get relation id, e.g. referenced column name and its value,\n // for example: { id: 1 } which then will be set to relation, e.g. post.category = { id: 1 }\n const relationId = changeMap.relation!.getRelationIdMap(value);\n\n // but relation id can be empty, for example in the case when you insert a new post with category\n // and both post and category are newly inserted objects (by cascades) and in this case category will not have id\n // this means we need to insert post without question id and update post's questionId once question be inserted\n // that's why we create a new changeMap operation for future updation of the post entity\n if (relationId === undefined) {\n changeMapsWithoutValues.push(changeMap);\n this.canBeUpdated = true;\n return updateMap;\n }\n valueMap = changeMap.relation!.createValueMap(relationId);\n this.updatedRelationMaps.push({ relation: changeMap.relation, value: relationId });\n\n } else { // value can be \"null\" or direct relation id here\n valueMap = changeMap.relation!.createValueMap(value);\n this.updatedRelationMaps.push({ relation: changeMap.relation, value: value });\n }\n }\n\n OrmUtils.mergeDeep(updateMap, valueMap);\n return updateMap;\n }, {} as ObjectLiteral);\n this.changeMaps = changeMapsWithoutValues;\n return changeSet;\n }\n\n /**\n * Recomputes entityWithFulfilledIds and identifier when entity changes.\n */\n recompute(): void {\n\n if (this.entity) {\n this.entityWithFulfilledIds = Object.assign({}, this.entity);\n if (this.parentSubject) {\n this.metadata.primaryColumns.forEach(primaryColumn => {\n if (primaryColumn.relationMetadata && primaryColumn.relationMetadata.inverseEntityMetadata === this.parentSubject!.metadata) {\n const value = primaryColumn.referencedColumn!.getEntityValue(this.parentSubject!.entity!);\n primaryColumn.setEntityValue(this.entityWithFulfilledIds!, value);\n }\n });\n }\n this.identifier = this.metadata.getEntityIdMap(this.entityWithFulfilledIds);\n\n } else if (this.databaseEntity) {\n this.identifier = this.metadata.getEntityIdMap(this.databaseEntity);\n }\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/persistence/Subject.ts"],"names":[],"mappings":"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","file":"Subject.js","sourcesContent":["import {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {SubjectChangeMap} from \"./SubjectChangeMap\";\nimport {OrmUtils} from \"../util/OrmUtils\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\n\n/**\n * Subject is a subject of persistence.\n * It holds information about each entity that needs to be persisted:\n * - what entity should be persisted\n * - what is database representation of the persisted entity\n * - what entity metadata of the persisted entity\n * - what is allowed to with persisted entity (insert/update/remove)\n *\n * Having this collection of subjects we can perform database queries.\n */\nexport class Subject {\n\n // -------------------------------------------------------------------------\n // Properties\n // -------------------------------------------------------------------------\n\n /**\n * Entity metadata of the subject entity.\n */\n metadata: EntityMetadata;\n\n /**\n * Subject identifier.\n * This identifier is not limited to table entity primary columns.\n * This can be entity id or ids as well as some unique entity properties, like name or title.\n * Insert / Update / Remove operation will be executed by a given identifier.\n */\n identifier: ObjectLiteral|undefined = undefined;\n\n /**\n * Copy of entity but with relational ids fulfilled.\n */\n entityWithFulfilledIds: ObjectLiteral|undefined = undefined;\n\n /**\n * If subject was created by cascades this property will contain subject\n * from where this subject was created.\n */\n parentSubject?: Subject;\n\n /**\n * Gets entity sent to the persistence (e.g. changed entity).\n * If entity is not set then this subject is created only for the entity loaded from the database,\n * or this subject is used for the junction operation (junction operations are relying only on identifier).\n */\n entity?: ObjectLiteral;\n\n /**\n * Database entity.\n * THIS IS NOT RAW ENTITY DATA, its a real entity.\n */\n databaseEntity?: ObjectLiteral;\n\n /**\n * Indicates if database entity was loaded.\n * No matter if it was found or not, it indicates the fact of loading.\n */\n databaseEntityLoaded: boolean = false;\n\n /**\n * Changes needs to be applied in the database for the given subject.\n */\n changeMaps: SubjectChangeMap[] = [];\n\n /**\n * Generated values returned by a database (for example generated id or default values).\n * Used in insert and update operations.\n * Has entity-like structure (not just column database name and values).\n */\n generatedMap?: ObjectLiteral;\n\n /**\n * Inserted values with updated values of special and default columns.\n * Has entity-like structure (not just column database name and values).\n */\n insertedValueSet?: ObjectLiteral;\n\n /**\n * Indicates if this subject can be inserted into the database.\n * This means that this subject either is newly persisted, either can be inserted by cascades.\n */\n canBeInserted: boolean = false;\n\n /**\n * Indicates if this subject can be updated in the database.\n * This means that this subject either was persisted, either can be updated by cascades.\n */\n canBeUpdated: boolean = false;\n\n /**\n * Indicates if this subject MUST be removed from the database.\n * This means that this subject either was removed, either was removed by cascades.\n */\n mustBeRemoved: boolean = false;\n\n /**\n * Indicates if this subject can be soft-removed from the database.\n * This means that this subject either was soft-removed, either was soft-removed by cascades.\n */\n canBeSoftRemoved: boolean = false;\n\n /**\n * Indicates if this subject can be recovered from the database.\n * This means that this subject either was recovered, either was recovered by cascades.\n */\n canBeRecovered: boolean = false;\n\n /**\n * Relations updated by the change maps.\n */\n updatedRelationMaps: { relation: RelationMetadata, value: ObjectLiteral }[] = [];\n\n /**\n * List of updated columns\n */\n diffColumns: ColumnMetadata[] = [];\n\n /**\n * List of updated relations\n */\n diffRelations: RelationMetadata[] = [];\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(options: {\n metadata: EntityMetadata,\n parentSubject?: Subject,\n entity?: ObjectLiteral,\n canBeInserted?: boolean,\n canBeUpdated?: boolean,\n mustBeRemoved?: boolean,\n canBeSoftRemoved?: boolean,\n canBeRecovered?: boolean,\n identifier?: ObjectLiteral,\n changeMaps?: SubjectChangeMap[]\n }) {\n this.metadata = options.metadata;\n this.entity = options.entity;\n this.parentSubject = options.parentSubject;\n if (options.canBeInserted !== undefined)\n this.canBeInserted = options.canBeInserted;\n if (options.canBeUpdated !== undefined)\n this.canBeUpdated = options.canBeUpdated;\n if (options.mustBeRemoved !== undefined)\n this.mustBeRemoved = options.mustBeRemoved;\n if (options.canBeSoftRemoved !== undefined)\n this.canBeSoftRemoved = options.canBeSoftRemoved;\n if (options.canBeRecovered !== undefined)\n this.canBeRecovered = options.canBeRecovered;\n if (options.identifier !== undefined)\n this.identifier = options.identifier;\n if (options.changeMaps !== undefined)\n this.changeMaps.push(...options.changeMaps);\n\n this.recompute();\n }\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Checks if this subject must be inserted into the database.\n * Subject can be inserted into the database if it is allowed to be inserted (explicitly persisted or by cascades)\n * and if it does not have database entity set.\n */\n get mustBeInserted() {\n return this.canBeInserted && !this.databaseEntity;\n }\n\n /**\n * Checks if this subject must be updated into the database.\n * Subject can be updated in the database if it is allowed to be updated (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get mustBeUpdated() {\n return this.canBeUpdated &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity)) &&\n // ((this.entity && this.databaseEntity) || (!this.entity && !this.databaseEntity)) &&\n this.changeMaps.length > 0;\n }\n\n /**\n * Checks if this subject must be soft-removed into the database.\n * Subject can be updated in the database if it is allowed to be soft-removed (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get mustBeSoftRemoved() {\n return this.canBeSoftRemoved &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n }\n\n /**\n * Checks if this subject must be recovered into the database.\n * Subject can be updated in the database if it is allowed to be recovered (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get mustBeRecovered() {\n return this.canBeRecovered &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a value set needs to be inserted / updated in the database.\n * Value set is based on the entity and change maps of the subject.\n * Important note: this method pops data from this subject's change maps.\n */\n createValueSetAndPopChangeMap(): ObjectLiteral {\n const changeMapsWithoutValues: SubjectChangeMap[] = [];\n const changeSet = this.changeMaps.reduce((updateMap, changeMap) => {\n let value = changeMap.value;\n if (value instanceof Subject) {\n\n // referenced columns can refer on values both which were just inserted and which were present in the model\n // if entity was just inserted valueSets must contain all values from the entity and values just inserted in the database\n // so, here we check if we have a value set then we simply use it as value to get our reference column values\n // otherwise simply use an entity which cannot be just inserted at the moment and have all necessary data\n value = value.insertedValueSet ? value.insertedValueSet : value.entity;\n }\n // value = changeMap.valueFactory ? changeMap.valueFactory(value) : changeMap.column.createValueMap(value);\n\n let valueMap: ObjectLiteral|undefined;\n if (this.metadata.isJunction && changeMap.column) {\n valueMap = changeMap.column.createValueMap(changeMap.column.referencedColumn!.getEntityValue(value));\n\n } else if (changeMap.column) {\n valueMap = changeMap.column.createValueMap(value);\n\n } else if (changeMap.relation) {\n\n // value can be a related object, for example: post.question = { id: 1 }\n // or value can be a null or direct relation id, e.g. post.question = 1\n // if its a direction relation id then we just set it to the valueMap,\n // however if its an object then we need to extract its relation id map and set it to the valueMap\n if (value instanceof Object && !(value instanceof Buffer)) {\n\n // get relation id, e.g. referenced column name and its value,\n // for example: { id: 1 } which then will be set to relation, e.g. post.category = { id: 1 }\n const relationId = changeMap.relation!.getRelationIdMap(value);\n\n // but relation id can be empty, for example in the case when you insert a new post with category\n // and both post and category are newly inserted objects (by cascades) and in this case category will not have id\n // this means we need to insert post without question id and update post's questionId once question be inserted\n // that's why we create a new changeMap operation for future updation of the post entity\n if (relationId === undefined) {\n changeMapsWithoutValues.push(changeMap);\n this.canBeUpdated = true;\n return updateMap;\n }\n valueMap = changeMap.relation!.createValueMap(relationId);\n this.updatedRelationMaps.push({ relation: changeMap.relation, value: relationId });\n\n } else { // value can be \"null\" or direct relation id here\n valueMap = changeMap.relation!.createValueMap(value);\n this.updatedRelationMaps.push({ relation: changeMap.relation, value: value });\n }\n }\n\n OrmUtils.mergeDeep(updateMap, valueMap);\n return updateMap;\n }, {} as ObjectLiteral);\n this.changeMaps = changeMapsWithoutValues;\n return changeSet;\n }\n\n /**\n * Recomputes entityWithFulfilledIds and identifier when entity changes.\n */\n recompute(): void {\n\n if (this.entity) {\n this.entityWithFulfilledIds = Object.assign({}, this.entity);\n if (this.parentSubject) {\n this.metadata.primaryColumns.forEach(primaryColumn => {\n if (primaryColumn.relationMetadata && primaryColumn.relationMetadata.inverseEntityMetadata === this.parentSubject!.metadata) {\n const value = primaryColumn.referencedColumn!.getEntityValue(this.parentSubject!.entity!);\n primaryColumn.setEntityValue(this.entityWithFulfilledIds!, value);\n }\n });\n }\n this.identifier = this.metadata.getEntityIdMap(this.entityWithFulfilledIds);\n\n } else if (this.databaseEntity) {\n this.identifier = this.metadata.getEntityIdMap(this.databaseEntity);\n }\n }\n\n}\n"],"sourceRoot":".."}
@@ -70,7 +70,7 @@ var SubjectDatabaseEntityLoader = /** @class */ (function () {
70
70
  // for remove operation
71
71
  // we only need to load junction relation ids since only they are removed by cascades
72
72
  loadRelationPropertyPaths.push.apply(// remove
73
- loadRelationPropertyPaths, __spreadArray([], __read(subjectGroup.subjects[0].metadata.manyToManyRelations.map(function (relation) { return relation.propertyPath; }))));
73
+ loadRelationPropertyPaths, __spreadArray([], __read(subjectGroup.subjects[0].metadata.manyToManyRelations.map(function (relation) { return relation.propertyPath; })), false));
74
74
  }
75
75
  findOptions = {
76
76
  loadEagerRelations: false,
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/persistence/SubjectDatabaseEntityLoader.ts"],"names":[],"mappings":"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","file":"SubjectDatabaseEntityLoader.js","sourcesContent":["import {Subject} from \"./Subject\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {FindManyOptions} from \"../find-options/FindManyOptions\";\n\n/**\n * Loads database entities for all operate subjects which do not have database entity set.\n * All entities that we load database entities for are marked as updated or inserted.\n * To understand which of them really needs to be inserted or updated we need to load\n * their original representations from the database.\n */\nexport class SubjectDatabaseEntityLoader {\n\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n\n constructor(protected queryRunner: QueryRunner,\n protected subjects: Subject[]) {\n }\n\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n\n /**\n * Loads database entities for all subjects.\n *\n * loadAllRelations flag is used to load all relation ids of the object, no matter if they present in subject entity or not.\n * This option is used for deletion.\n */\n async load(operationType: \"save\"|\"remove\"|\"soft-remove\"|\"recover\"): Promise<void> {\n\n // we are grouping subjects by target to perform more optimized queries using WHERE IN operator\n // go through the groups and perform loading of database entities of each subject in the group\n const promises = this.groupByEntityTargets().map(async subjectGroup => {\n\n // prepare entity ids of the subjects we need to load\n const allIds: ObjectLiteral[] = [];\n const allSubjects: Subject[] = [];\n subjectGroup.subjects.forEach(subject => {\n\n // we don't load if subject already has a database entity loaded\n if (subject.databaseEntity || !subject.identifier)\n return;\n\n allIds.push(subject.identifier);\n allSubjects.push(subject);\n });\n\n // if there no ids found (means all entities are new and have generated ids) - then nothing to load there\n if (!allIds.length)\n return;\n\n const loadRelationPropertyPaths: string[] = [];\n\n // for the save, soft-remove and recover operation\n // extract all property paths of the relations we need to load relation ids for\n // this is for optimization purpose - this way we don't load relation ids for entities\n // whose relations are undefined, and since they are undefined its really pointless to\n // load something for them, since undefined properties are skipped by the orm\n if (operationType === \"save\" || operationType === \"soft-remove\" || operationType === \"recover\") {\n subjectGroup.subjects.forEach(subject => {\n\n // gets all relation property paths that exist in the persisted entity.\n subject.metadata.relations.forEach(relation => {\n const value = relation.getEntityValue(subject.entityWithFulfilledIds!);\n if (value === undefined)\n return;\n\n if (loadRelationPropertyPaths.indexOf(relation.propertyPath) === -1)\n loadRelationPropertyPaths.push(relation.propertyPath);\n });\n });\n } else { // remove\n\n // for remove operation\n // we only need to load junction relation ids since only they are removed by cascades\n loadRelationPropertyPaths.push(...subjectGroup.subjects[0].metadata.manyToManyRelations.map(relation => relation.propertyPath));\n }\n\n const findOptions: FindManyOptions<any> = {\n loadEagerRelations: false,\n loadRelationIds: {\n relations: loadRelationPropertyPaths,\n disableMixedMap: true\n },\n // the soft-deleted entities should be included in the loaded entities for recover operation\n withDeleted: true\n };\n\n // load database entities for all given ids\n const entities = await this.queryRunner.manager\n .getRepository<ObjectLiteral>(subjectGroup.target)\n .findByIds(allIds, findOptions);\n\n // now when we have entities we need to find subject of each entity\n // and insert that entity into database entity of the found subjects\n entities.forEach(entity => {\n const subjects = this.findByPersistEntityLike(subjectGroup.target, entity);\n subjects.forEach(subject => {\n subject.databaseEntity = entity;\n if (!subject.identifier)\n subject.identifier = subject.metadata.hasAllPrimaryKeys(entity) ? subject.metadata.getEntityIdMap(entity) : undefined;\n });\n });\n\n // this way we tell what subjects we tried to load database entities of\n for (let subject of allSubjects) {\n subject.databaseEntityLoaded = true;\n }\n });\n\n await Promise.all(promises);\n }\n\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n\n /**\n * Finds subjects where entity like given subject's entity.\n * Comparision made by entity id.\n * Multiple subjects may be returned if duplicates are present in the subject array.\n * This will likely result in the same row being updated multiple times during a transaction.\n */\n protected findByPersistEntityLike(entityTarget: Function|string, entity: ObjectLiteral): Subject[] {\n return this.subjects.filter(subject => {\n if (!subject.entity)\n return false;\n\n if (subject.entity === entity)\n return true;\n\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds!, entity);\n });\n }\n\n /**\n * Groups given Subject objects into groups separated by entity targets.\n */\n protected groupByEntityTargets(): { target: Function|string, subjects: Subject[] }[] {\n return this.subjects.reduce((groups, operatedEntity) => {\n let group = groups.find(group => group.target === operatedEntity.metadata.target);\n if (!group) {\n group = { target: operatedEntity.metadata.target, subjects: [] };\n groups.push(group);\n }\n group.subjects.push(operatedEntity);\n return groups;\n }, [] as { target: Function|string, subjects: Subject[] }[]);\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/persistence/SubjectDatabaseEntityLoader.ts"],"names":[],"mappings":";AAKA;;;;;GAKG;AACH;IAEI,wEAAwE;IACxE,cAAc;IACd,wEAAwE;IAExE,qCAAsB,WAAwB,EACxB,QAAmB;QADnB,gBAAW,GAAX,WAAW,CAAa;QACxB,aAAQ,GAAR,QAAQ,CAAW;IACzC,CAAC;IAED,wEAAwE;IACxE,iBAAiB;IACjB,wEAAwE;IAExE;;;;;OAKG;IACG,0CAAI,GAAV,UAAW,aAAsD;;;;;;;wBAIvD,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,UAAM,YAAY;;;;;;;wCAGzD,MAAM,GAAoB,EAAE,CAAC;wCAC7B,WAAW,GAAc,EAAE,CAAC;wCAClC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;4CAEjC,gEAAgE;4CAChE,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,UAAU;gDAC7C,OAAO;4CAEX,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;4CAChC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wCAC9B,CAAC,CAAC,CAAC;wCAEH,yGAAyG;wCACzG,IAAI,CAAC,MAAM,CAAC,MAAM;4CACd,sBAAO;wCAEL,yBAAyB,GAAa,EAAE,CAAC;wCAE/C,kDAAkD;wCAClD,+EAA+E;wCAC/E,sFAAsF;wCACtF,sFAAsF;wCACtF,6EAA6E;wCAC7E,IAAI,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,aAAa,IAAI,aAAa,KAAK,SAAS,EAAE;4CAC5F,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;gDAEjC,uEAAuE;gDACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,QAAQ;oDACvC,IAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,sBAAuB,CAAC,CAAC;oDACvE,IAAI,KAAK,KAAK,SAAS;wDACnB,OAAO;oDAEX,IAAI,yBAAyB,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;wDAC/D,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gDAC9D,CAAC,CAAC,CAAC;4CACP,CAAC,CAAC,CAAC;yCACN;6CAAM,EAAE,SAAS;4CAEd,uBAAuB;4CACvB,qFAAqF;4CACrF,yBAAyB,CAAC,IAAI,OAJzB,SAAS;4CAId,yBAAyB,2BAAS,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAA,QAAQ,IAAI,OAAA,QAAQ,CAAC,YAAY,EAArB,CAAqB,CAAC,WAAE;yCACnI;wCAEK,WAAW,GAAyB;4CACtC,kBAAkB,EAAE,KAAK;4CACzB,eAAe,EAAE;gDACb,SAAS,EAAE,yBAAyB;gDACpC,eAAe,EAAE,IAAI;6CACxB;4CACD,4FAA4F;4CAC5F,WAAW,EAAE,IAAI;yCACpB,CAAC;wCAGe,qBAAM,IAAI,CAAC,WAAW,CAAC,OAAO;iDAC1C,aAAa,CAAgB,YAAY,CAAC,MAAM,CAAC;iDACjD,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,EAAA;;wCAF7B,QAAQ,GAAG,SAEkB;wCAEnC,mEAAmE;wCACnE,oEAAoE;wCACpE,QAAQ,CAAC,OAAO,CAAC,UAAA,MAAM;4CACnB,IAAM,QAAQ,GAAG,KAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;4CAC3E,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;gDACtB,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC;gDAChC,IAAI,CAAC,OAAO,CAAC,UAAU;oDACnB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;4CAC5H,CAAC,CAAC,CAAC;wCACP,CAAC,CAAC,CAAC;;4CAEH,uEAAuE;4CACvE,KAAoB,gBAAA,SAAA,WAAW,CAAA,yGAAE;gDAAxB,OAAO;gDACZ,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;6CACvC;;;;;;;;;;;;6BACJ,CAAC,CAAC;wBAEH,qBAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAA;;wBAA3B,SAA2B,CAAC;;;;;KAC/B;IAED,wEAAwE;IACxE,oBAAoB;IACpB,wEAAwE;IAExE;;;;;OAKG;IACO,6DAAuB,GAAjC,UAAkC,YAA6B,EAAE,MAAqB;QAClF,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,OAAO;YAC/B,IAAI,CAAC,OAAO,CAAC,MAAM;gBACf,OAAO,KAAK,CAAC;YAEjB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;gBACzB,OAAO,IAAI,CAAC;YAEhB,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,sBAAuB,EAAE,MAAM,CAAC,CAAC;QACjI,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACO,0DAAoB,GAA9B;QACI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAC,MAAM,EAAE,cAAc;YAC/C,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,QAAQ,CAAC,MAAM,EAA/C,CAA+C,CAAC,CAAC;YAClF,IAAI,CAAC,KAAK,EAAE;gBACR,KAAK,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;gBACjE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACtB;YACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACpC,OAAO,MAAM,CAAC;QAClB,CAAC,EAAE,EAAwD,CAAC,CAAC;IACjE,CAAC;IAEL,kCAAC;AAAD,CA9IA,AA8IC,IAAA","file":"SubjectDatabaseEntityLoader.js","sourcesContent":["import {Subject} from \"./Subject\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {FindManyOptions} from \"../find-options/FindManyOptions\";\n\n/**\n * Loads database entities for all operate subjects which do not have database entity set.\n * All entities that we load database entities for are marked as updated or inserted.\n * To understand which of them really needs to be inserted or updated we need to load\n * their original representations from the database.\n */\nexport class SubjectDatabaseEntityLoader {\n\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n\n constructor(protected queryRunner: QueryRunner,\n protected subjects: Subject[]) {\n }\n\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n\n /**\n * Loads database entities for all subjects.\n *\n * loadAllRelations flag is used to load all relation ids of the object, no matter if they present in subject entity or not.\n * This option is used for deletion.\n */\n async load(operationType: \"save\"|\"remove\"|\"soft-remove\"|\"recover\"): Promise<void> {\n\n // we are grouping subjects by target to perform more optimized queries using WHERE IN operator\n // go through the groups and perform loading of database entities of each subject in the group\n const promises = this.groupByEntityTargets().map(async subjectGroup => {\n\n // prepare entity ids of the subjects we need to load\n const allIds: ObjectLiteral[] = [];\n const allSubjects: Subject[] = [];\n subjectGroup.subjects.forEach(subject => {\n\n // we don't load if subject already has a database entity loaded\n if (subject.databaseEntity || !subject.identifier)\n return;\n\n allIds.push(subject.identifier);\n allSubjects.push(subject);\n });\n\n // if there no ids found (means all entities are new and have generated ids) - then nothing to load there\n if (!allIds.length)\n return;\n\n const loadRelationPropertyPaths: string[] = [];\n\n // for the save, soft-remove and recover operation\n // extract all property paths of the relations we need to load relation ids for\n // this is for optimization purpose - this way we don't load relation ids for entities\n // whose relations are undefined, and since they are undefined its really pointless to\n // load something for them, since undefined properties are skipped by the orm\n if (operationType === \"save\" || operationType === \"soft-remove\" || operationType === \"recover\") {\n subjectGroup.subjects.forEach(subject => {\n\n // gets all relation property paths that exist in the persisted entity.\n subject.metadata.relations.forEach(relation => {\n const value = relation.getEntityValue(subject.entityWithFulfilledIds!);\n if (value === undefined)\n return;\n\n if (loadRelationPropertyPaths.indexOf(relation.propertyPath) === -1)\n loadRelationPropertyPaths.push(relation.propertyPath);\n });\n });\n } else { // remove\n\n // for remove operation\n // we only need to load junction relation ids since only they are removed by cascades\n loadRelationPropertyPaths.push(...subjectGroup.subjects[0].metadata.manyToManyRelations.map(relation => relation.propertyPath));\n }\n\n const findOptions: FindManyOptions<any> = {\n loadEagerRelations: false,\n loadRelationIds: {\n relations: loadRelationPropertyPaths,\n disableMixedMap: true\n },\n // the soft-deleted entities should be included in the loaded entities for recover operation\n withDeleted: true\n };\n\n // load database entities for all given ids\n const entities = await this.queryRunner.manager\n .getRepository<ObjectLiteral>(subjectGroup.target)\n .findByIds(allIds, findOptions);\n\n // now when we have entities we need to find subject of each entity\n // and insert that entity into database entity of the found subjects\n entities.forEach(entity => {\n const subjects = this.findByPersistEntityLike(subjectGroup.target, entity);\n subjects.forEach(subject => {\n subject.databaseEntity = entity;\n if (!subject.identifier)\n subject.identifier = subject.metadata.hasAllPrimaryKeys(entity) ? subject.metadata.getEntityIdMap(entity) : undefined;\n });\n });\n\n // this way we tell what subjects we tried to load database entities of\n for (let subject of allSubjects) {\n subject.databaseEntityLoaded = true;\n }\n });\n\n await Promise.all(promises);\n }\n\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n\n /**\n * Finds subjects where entity like given subject's entity.\n * Comparision made by entity id.\n * Multiple subjects may be returned if duplicates are present in the subject array.\n * This will likely result in the same row being updated multiple times during a transaction.\n */\n protected findByPersistEntityLike(entityTarget: Function|string, entity: ObjectLiteral): Subject[] {\n return this.subjects.filter(subject => {\n if (!subject.entity)\n return false;\n\n if (subject.entity === entity)\n return true;\n\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds!, entity);\n });\n }\n\n /**\n * Groups given Subject objects into groups separated by entity targets.\n */\n protected groupByEntityTargets(): { target: Function|string, subjects: Subject[] }[] {\n return this.subjects.reduce((groups, operatedEntity) => {\n let group = groups.find(group => group.target === operatedEntity.metadata.target);\n if (!group) {\n group = { target: operatedEntity.metadata.target, subjects: [] };\n groups.push(group);\n }\n group.subjects.push(operatedEntity);\n return groups;\n }, [] as { target: Function|string, subjects: Subject[] }[]);\n }\n\n}\n"],"sourceRoot":".."}
@@ -572,7 +572,7 @@ var SubjectExecutor = /** @class */ (function () {
572
572
  });
573
573
  }); });
574
574
  // Run all remaning subjects in parallel
575
- return [4 /*yield*/, Promise.all(__spreadArray(__spreadArray([], __read(remainingSubjects.map(updateSubject))), [nestedSetPromise]))];
575
+ return [4 /*yield*/, Promise.all(__spreadArray(__spreadArray([], __read(remainingSubjects.map(updateSubject)), false), [nestedSetPromise], false))];
576
576
  case 1:
577
577
  // Run all remaning subjects in parallel
578
578
  _d.sent();
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/persistence/SubjectExecutor.ts"],"names":[],"mappings":"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","file":"SubjectExecutor.js","sourcesContent":["import {SapDriver} from \"../driver/sap/SapDriver\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {Subject} from \"./Subject\";\nimport {SubjectTopoligicalSorter} from \"./SubjectTopoligicalSorter\";\nimport {SubjectChangedColumnsComputer} from \"./SubjectChangedColumnsComputer\";\nimport {SubjectWithoutIdentifierError} from \"../error/SubjectWithoutIdentifierError\";\nimport {SubjectRemovedAndUpdatedError} from \"../error/SubjectRemovedAndUpdatedError\";\nimport {MongoQueryRunner} from \"../driver/mongodb/MongoQueryRunner\";\nimport {MongoEntityManager} from \"../entity-manager/MongoEntityManager\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {SaveOptions} from \"../repository/SaveOptions\";\nimport {RemoveOptions} from \"../repository/RemoveOptions\";\nimport {BroadcasterResult} from \"../subscriber/BroadcasterResult\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {NestedSetSubjectExecutor} from \"./tree/NestedSetSubjectExecutor\";\nimport {ClosureSubjectExecutor} from \"./tree/ClosureSubjectExecutor\";\nimport {MaterializedPathSubjectExecutor} from \"./tree/MaterializedPathSubjectExecutor\";\nimport {OrmUtils} from \"../util/OrmUtils\";\nimport { UpdateResult } from \"../query-builder/result/UpdateResult\";\n\n/**\n * Executes all database operations (inserts, updated, deletes) that must be executed\n * with given persistence subjects.\n */\nexport class SubjectExecutor {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates if executor has any operations to execute (e.g. has insert / update / delete operations to be executed).\n */\n hasExecutableOperations: boolean = false;\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * QueryRunner used to execute all queries with a given subjects.\n */\n protected queryRunner: QueryRunner;\n\n /**\n * Persistence options.\n */\n protected options?: SaveOptions & RemoveOptions;\n\n /**\n * All subjects that needs to be operated.\n */\n protected allSubjects: Subject[];\n\n /**\n * Subjects that must be inserted.\n */\n protected insertSubjects: Subject[] = [];\n\n /**\n * Subjects that must be updated.\n */\n protected updateSubjects: Subject[] = [];\n\n /**\n * Subjects that must be removed.\n */\n protected removeSubjects: Subject[] = [];\n\n /**\n * Subjects that must be soft-removed.\n */\n protected softRemoveSubjects: Subject[] = [];\n\n /**\n * Subjects that must be recovered.\n */\n protected recoverSubjects: Subject[] = [];\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(queryRunner: QueryRunner, subjects: Subject[], options?: SaveOptions & RemoveOptions) {\n this.queryRunner = queryRunner;\n this.allSubjects = subjects;\n this.options = options;\n this.validate();\n this.recompute();\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Executes all operations over given array of subjects.\n * Executes queries using given query runner.\n */\n async execute(): Promise<void> {\n // console.time(\"SubjectExecutor.execute\");\n\n // broadcast \"before\" events before we start insert / update / remove operations\n let broadcasterResult: BroadcasterResult | undefined = undefined;\n if (!this.options || this.options.listeners !== false) {\n // console.time(\".broadcastBeforeEventsForAll\");\n broadcasterResult = this.broadcastBeforeEventsForAll();\n if (broadcasterResult.promises.length > 0) await Promise.all(broadcasterResult.promises);\n // console.timeEnd(\".broadcastBeforeEventsForAll\");\n }\n\n // since event listeners and subscribers can call save methods and/or trigger entity changes we need to recompute operational subjects\n // recompute only in the case if any listener or subscriber was really executed\n if (broadcasterResult && broadcasterResult.count > 0) {\n // console.time(\".recompute\");\n this.insertSubjects.forEach(subject => subject.recompute());\n this.updateSubjects.forEach(subject => subject.recompute());\n this.removeSubjects.forEach(subject => subject.recompute());\n this.softRemoveSubjects.forEach(subject => subject.recompute());\n this.recoverSubjects.forEach(subject => subject.recompute());\n this.recompute();\n // console.timeEnd(\".recompute\");\n }\n\n // make sure our insert subjects are sorted (using topological sorting) to make cascade inserts work properly\n\n // console.timeEnd(\"prepare\");\n\n // execute all insert operations\n // console.time(\".insertion\");\n this.insertSubjects = new SubjectTopoligicalSorter(this.insertSubjects).sort(\"insert\");\n await this.executeInsertOperations();\n // console.timeEnd(\".insertion\");\n\n // recompute update operations since insertion can create updation operations for the\n // properties it wasn't able to handle on its own (referenced columns)\n this.updateSubjects = this.allSubjects.filter(subject => subject.mustBeUpdated);\n\n // execute update operations\n // console.time(\".updation\");\n await this.executeUpdateOperations();\n // console.timeEnd(\".updation\");\n\n // make sure our remove subjects are sorted (using topological sorting) when multiple entities are passed for the removal\n // console.time(\".removal\");\n this.removeSubjects = new SubjectTopoligicalSorter(this.removeSubjects).sort(\"delete\");\n await this.executeRemoveOperations();\n // console.timeEnd(\".removal\");\n\n // recompute soft-remove operations\n this.softRemoveSubjects = this.allSubjects.filter(subject => subject.mustBeSoftRemoved);\n\n // execute soft-remove operations\n await this.executeSoftRemoveOperations();\n\n // recompute recover operations\n this.recoverSubjects = this.allSubjects.filter(subject => subject.mustBeRecovered);\n\n // execute recover operations\n await this.executeRecoverOperations();\n\n // update all special columns in persisted entities, like inserted id or remove ids from the removed entities\n // console.time(\".updateSpecialColumnsInPersistedEntities\");\n await this.updateSpecialColumnsInPersistedEntities();\n // console.timeEnd(\".updateSpecialColumnsInPersistedEntities\");\n\n // finally broadcast \"after\" events after we finish insert / update / remove operations\n if (!this.options || this.options.listeners !== false) {\n // console.time(\".broadcastAfterEventsForAll\");\n broadcasterResult = this.broadcastAfterEventsForAll();\n if (broadcasterResult.promises.length > 0) await Promise.all(broadcasterResult.promises);\n // console.timeEnd(\".broadcastAfterEventsForAll\");\n }\n // console.timeEnd(\"SubjectExecutor.execute\");\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Validates all given subjects.\n */\n protected validate() {\n this.allSubjects.forEach(subject => {\n if (subject.mustBeUpdated && subject.mustBeRemoved)\n throw new SubjectRemovedAndUpdatedError(subject);\n });\n }\n\n /**\n * Performs entity re-computations - finds changed columns, re-builds insert/update/remove subjects.\n */\n protected recompute(): void {\n new SubjectChangedColumnsComputer().compute(this.allSubjects);\n this.insertSubjects = this.allSubjects.filter(subject => subject.mustBeInserted);\n this.updateSubjects = this.allSubjects.filter(subject => subject.mustBeUpdated);\n this.removeSubjects = this.allSubjects.filter(subject => subject.mustBeRemoved);\n this.softRemoveSubjects = this.allSubjects.filter(subject => subject.mustBeSoftRemoved);\n this.recoverSubjects = this.allSubjects.filter(subject => subject.mustBeRecovered);\n this.hasExecutableOperations = this.insertSubjects.length > 0 || this.updateSubjects.length > 0 || this.removeSubjects.length > 0 || this.softRemoveSubjects.length > 0 || this.recoverSubjects.length > 0;\n }\n\n /**\n * Broadcasts \"BEFORE_INSERT\", \"BEFORE_UPDATE\", \"BEFORE_REMOVE\" events for all given subjects.\n */\n protected broadcastBeforeEventsForAll(): BroadcasterResult {\n const result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastBeforeInsertEvent(result, subject.metadata, subject.entity!));\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastBeforeRemoveEvent(result, subject.metadata, subject.entity!, subject.databaseEntity));\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n return result;\n }\n\n /**\n * Broadcasts \"AFTER_INSERT\", \"AFTER_UPDATE\", \"AFTER_REMOVE\" events for all given subjects.\n * Returns void if there wasn't any listener or subscriber executed.\n * Note: this method has a performance-optimized code organization.\n */\n protected broadcastAfterEventsForAll(): BroadcasterResult {\n const result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastAfterInsertEvent(result, subject.metadata, subject.entity!));\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastAfterRemoveEvent(result, subject.metadata, subject.entity!, subject.databaseEntity));\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n return result;\n }\n\n /**\n * Executes insert operations.\n */\n protected async executeInsertOperations(): Promise<void> {\n // group insertion subjects to make bulk insertions\n const [groupedInsertSubjects, groupedInsertSubjectKeys] = this.groupBulkSubjects(this.insertSubjects, \"insert\");\n\n // then we run insertion in the sequential order which is important since we have an ordered subjects\n for (const groupName of groupedInsertSubjectKeys) {\n const subjects = groupedInsertSubjects[groupName];\n\n // we must separately insert entities which does not have any values to insert\n // because its not possible to insert multiple entities with only default values in bulk\n const bulkInsertMaps: ObjectLiteral[] = [];\n const bulkInsertSubjects: Subject[] = [];\n const singleInsertSubjects: Subject[] = [];\n if (this.queryRunner.connection.driver instanceof MongoDriver) {\n subjects.forEach(subject => {\n if (subject.metadata.createDateColumn && subject.entity) {\n subject.entity[subject.metadata.createDateColumn.databaseName] = new Date();\n }\n\n if (subject.metadata.updateDateColumn && subject.entity) {\n subject.entity[subject.metadata.updateDateColumn.databaseName] = new Date();\n }\n\n subject.createValueSetAndPopChangeMap();\n\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.entity!);\n });\n } else if (this.queryRunner.connection.driver instanceof OracleDriver) {\n subjects.forEach(subject => {\n singleInsertSubjects.push(subject);\n });\n } else {\n subjects.forEach(subject => {\n\n // we do not insert in bulk in following cases:\n // - when there is no values in insert (only defaults are inserted), since we cannot use DEFAULT VALUES expression for multiple inserted rows\n // - when entity is a tree table, since tree tables require extra operation per each inserted row\n // - when oracle is used, since oracle's bulk insertion is very bad\n if (subject.changeMaps.length === 0 ||\n subject.metadata.treeType ||\n this.queryRunner.connection.driver instanceof OracleDriver ||\n this.queryRunner.connection.driver instanceof SapDriver) {\n singleInsertSubjects.push(subject);\n\n } else {\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.createValueSetAndPopChangeMap());\n }\n });\n }\n\n // for mongodb we have a bit different insertion logic\n if (this.queryRunner instanceof MongoQueryRunner) {\n const manager = this.queryRunner.manager as MongoEntityManager;\n const insertResult = await manager.insert(subjects[0].metadata.target, bulkInsertMaps);\n subjects.forEach((subject, index) => {\n subject.identifier = insertResult.identifiers[index];\n subject.generatedMap = insertResult.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n\n } else {\n\n // here we execute our insertion query\n // we need to enable entity updation because we DO need to have updated insertedMap\n // which is not same object as our entity that's why we don't need to worry about our entity to get dirty\n // also, we disable listeners because we call them on our own in persistence layer\n if (bulkInsertMaps.length > 0) {\n const insertResult = await this.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subjects[0].metadata.target)\n .values(bulkInsertMaps)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false)\n .execute();\n\n bulkInsertSubjects.forEach((subject, index) => {\n subject.identifier = insertResult.identifiers[index];\n subject.generatedMap = insertResult.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n }\n\n // insert subjects which must be inserted in separate requests (all default values)\n if (singleInsertSubjects.length > 0) {\n for (const subject of singleInsertSubjects) {\n subject.insertedValueSet = subject.createValueSetAndPopChangeMap(); // important to have because query builder sets inserted values into it\n\n // for nested set we execute additional queries\n if (subject.metadata.treeType === \"nested-set\")\n await new NestedSetSubjectExecutor(this.queryRunner).insert(subject);\n\n await this.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.target)\n .values(subject.insertedValueSet)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false)\n .execute()\n .then(insertResult => {\n subject.identifier = insertResult.identifiers[0];\n subject.generatedMap = insertResult.generatedMaps[0];\n });\n\n // for tree tables we execute additional queries\n if (subject.metadata.treeType === \"closure-table\") {\n await new ClosureSubjectExecutor(this.queryRunner).insert(subject);\n\n } else if (subject.metadata.treeType === \"materialized-path\") {\n await new MaterializedPathSubjectExecutor(this.queryRunner).insert(subject);\n }\n }\n }\n }\n\n subjects.forEach(subject => {\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(column => {\n const value = column.getEntityValue(subject.generatedMap!);\n if (value !== undefined && value !== null) {\n const preparedValue = this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap!, preparedValue);\n }\n });\n }\n });\n }\n }\n\n /**\n * Updates all given subjects in the database.\n */\n protected async executeUpdateOperations(): Promise<void> {\n const updateSubject = async (subject: Subject) => {\n\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n\n // for mongodb we have a bit different updation logic\n if (this.queryRunner instanceof MongoQueryRunner) {\n const partialEntity = this.cloneMongoSubjectEntity(subject);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n\n const manager = this.queryRunner.manager as MongoEntityManager;\n\n await manager.update(subject.metadata.target, subject.identifier, partialEntity);\n\n } else {\n\n const updateMap: ObjectLiteral = subject.createValueSetAndPopChangeMap();\n\n // for tree tables we execute additional queries\n switch (subject.metadata.treeType) {\n case \"nested-set\":\n await new NestedSetSubjectExecutor(this.queryRunner).update(subject);\n break;\n\n case \"closure-table\":\n await new ClosureSubjectExecutor(this.queryRunner).update(subject);\n break;\n\n case \"materialized-path\":\n await new MaterializedPathSubjectExecutor(this.queryRunner).update(subject);\n break;\n }\n\n // here we execute our updation query\n // we need to enable entity updation because we update a subject identifier\n // which is not same object as our entity that's why we don't need to worry about our entity to get dirty\n // also, we disable listeners because we call them on our own in persistence layer\n const updateQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .update(subject.metadata.target)\n .set(updateMap)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n\n if (subject.entity) {\n updateQueryBuilder.whereEntity(subject.identifier);\n\n } else { // in this case identifier is just conditions object to update by\n updateQueryBuilder.where(subject.identifier);\n }\n\n const updateResult = await updateQueryBuilder.execute();\n let updateGeneratedMap = updateResult.generatedMaps[0];\n if (updateGeneratedMap) {\n subject.metadata.columns.forEach(column => {\n const value = column.getEntityValue(updateGeneratedMap!);\n if (value !== undefined && value !== null) {\n const preparedValue = this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(updateGeneratedMap!, preparedValue);\n }\n });\n if (!subject.generatedMap) {\n subject.generatedMap = {};\n }\n Object.assign(subject.generatedMap, updateGeneratedMap);\n }\n }\n };\n\n // Nested sets need to be updated one by one\n // Split array in two, one with nested set subjects and the other with the remaining subjects\n const nestedSetSubjects: Subject[] = [];\n const remainingSubjects: Subject[] = [];\n\n for (const subject of this.updateSubjects) {\n if (subject.metadata.treeType === \"nested-set\") {\n nestedSetSubjects.push(subject);\n } else {\n remainingSubjects.push(subject);\n }\n }\n\n // Run nested set updates one by one\n const nestedSetPromise = new Promise<void>(async (resolve, reject) => {\n for (const subject of nestedSetSubjects) {\n try {\n await updateSubject(subject);\n } catch (error) {\n reject(error);\n }\n }\n resolve();\n });\n\n // Run all remaning subjects in parallel\n await Promise.all([...remainingSubjects.map(updateSubject), nestedSetPromise]);\n }\n\n /**\n * Removes all given subjects from the database.\n *\n * todo: we need to apply topological sort here as well\n */\n protected async executeRemoveOperations(): Promise<void> {\n // group insertion subjects to make bulk insertions\n const [groupedRemoveSubjects, groupedRemoveSubjectKeys] = this.groupBulkSubjects(this.removeSubjects, \"delete\");\n\n for (const groupName of groupedRemoveSubjectKeys) {\n const subjects = groupedRemoveSubjects[groupName];\n const deleteMaps = subjects.map(subject => {\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n\n return subject.identifier;\n });\n\n // for mongodb we have a bit different updation logic\n if (this.queryRunner instanceof MongoQueryRunner) {\n const manager = this.queryRunner.manager as MongoEntityManager;\n await manager.delete(subjects[0].metadata.target, deleteMaps);\n\n } else {\n // for tree tables we execute additional queries\n switch (subjects[0].metadata.treeType) {\n case \"nested-set\":\n await new NestedSetSubjectExecutor(this.queryRunner).remove(subjects);\n break;\n\n case \"closure-table\":\n await new ClosureSubjectExecutor(this.queryRunner).remove(subjects);\n break;\n }\n\n // here we execute our deletion query\n // we don't need to specify entities and set update entity to true since the only thing query builder\n // will do for use is a primary keys deletion which is handled by us later once persistence is finished\n // also, we disable listeners because we call them on our own in persistence layer\n await this.queryRunner\n .manager\n .createQueryBuilder()\n .delete()\n .from(subjects[0].metadata.target)\n .where(deleteMaps)\n .callListeners(false)\n .execute();\n }\n }\n }\n\n private cloneMongoSubjectEntity(subject: Subject): ObjectLiteral {\n const target: ObjectLiteral = {};\n\n if (subject.entity) {\n for (const column of subject.metadata.columns) {\n OrmUtils.mergeDeep(target, column.getEntityValueMap(subject.entity));\n }\n }\n\n return target;\n }\n\n /**\n * Soft-removes all given subjects in the database.\n */\n protected async executeSoftRemoveOperations(): Promise<void> {\n await Promise.all(this.softRemoveSubjects.map(async subject => {\n\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n\n let updateResult: UpdateResult;\n\n // for mongodb we have a bit different updation logic\n if (this.queryRunner instanceof MongoQueryRunner) {\n const partialEntity = this.cloneMongoSubjectEntity(subject);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = new Date();\n }\n\n const manager = this.queryRunner.manager as MongoEntityManager;\n\n updateResult = await manager.update(subject.metadata.target, subject.identifier, partialEntity);\n\n } else {\n\n // here we execute our soft-deletion query\n // we need to enable entity soft-deletion because we update a subject identifier\n // which is not same object as our entity that's why we don't need to worry about our entity to get dirty\n // also, we disable listeners because we call them on our own in persistence layer\n const softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .softDelete()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n\n } else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n\n updateResult = await softDeleteQueryBuilder.execute();\n }\n\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(column => {\n const value = column.getEntityValue(subject.generatedMap!);\n if (value !== undefined && value !== null) {\n const preparedValue = this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap!, preparedValue);\n }\n });\n }\n\n // experiments, remove probably, need to implement tree tables children removal\n // if (subject.updatedRelationMaps.length > 0) {\n // await Promise.all(subject.updatedRelationMaps.map(async updatedRelation => {\n // if (!updatedRelation.relation.isTreeParent) return;\n // if (!updatedRelation.value !== null) return;\n //\n // if (subject.metadata.treeType === \"closure-table\") {\n // await new ClosureSubjectExecutor(this.queryRunner).deleteChildrenOf(subject);\n // }\n // }));\n // }\n }));\n }\n\n /**\n * Recovers all given subjects in the database.\n */\n protected async executeRecoverOperations(): Promise<void> {\n await Promise.all(this.recoverSubjects.map(async subject => {\n\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n\n let updateResult: UpdateResult;\n\n // for mongodb we have a bit different updation logic\n if (this.queryRunner instanceof MongoQueryRunner) {\n const partialEntity = this.cloneMongoSubjectEntity(subject);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = null;\n }\n\n const manager = this.queryRunner.manager as MongoEntityManager;\n\n updateResult = await manager.update(subject.metadata.target, subject.identifier, partialEntity);\n\n } else {\n\n // here we execute our restory query\n // we need to enable entity restory because we update a subject identifier\n // which is not same object as our entity that's why we don't need to worry about our entity to get dirty\n // also, we disable listeners because we call them on our own in persistence layer\n const softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .restore()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n\n } else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n\n updateResult = await softDeleteQueryBuilder.execute();\n }\n\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(column => {\n const value = column.getEntityValue(subject.generatedMap!);\n if (value !== undefined && value !== null) {\n const preparedValue = this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap!, preparedValue);\n }\n });\n }\n\n // experiments, remove probably, need to implement tree tables children removal\n // if (subject.updatedRelationMaps.length > 0) {\n // await Promise.all(subject.updatedRelationMaps.map(async updatedRelation => {\n // if (!updatedRelation.relation.isTreeParent) return;\n // if (!updatedRelation.value !== null) return;\n //\n // if (subject.metadata.treeType === \"closure-table\") {\n // await new ClosureSubjectExecutor(this.queryRunner).deleteChildrenOf(subject);\n // }\n // }));\n // }\n\n }));\n }\n\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n protected updateSpecialColumnsInPersistedEntities(): void {\n\n // update inserted entity properties\n if (this.insertSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.insertSubjects);\n\n // update updated entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.updateSubjects);\n\n // update soft-removed entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.softRemoveSubjects);\n\n // update recovered entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.recoverSubjects);\n\n // remove ids from the entities that were removed\n if (this.removeSubjects.length) {\n this.removeSubjects.forEach(subject => {\n if (!subject.entity) return;\n\n subject.metadata.primaryColumns.forEach(primaryColumn => {\n primaryColumn.setEntityValue(subject.entity!, undefined);\n });\n });\n }\n\n // other post-persist updations\n this.allSubjects.forEach(subject => {\n if (!subject.entity) return;\n\n subject.metadata.relationIds.forEach(relationId => {\n relationId.setValue(subject.entity!);\n });\n\n // mongo _id remove\n if (this.queryRunner instanceof MongoQueryRunner) {\n if (subject.metadata.objectIdColumn\n && subject.metadata.objectIdColumn.databaseName\n && subject.metadata.objectIdColumn.databaseName !== subject.metadata.objectIdColumn.propertyName\n ) {\n delete subject.entity[subject.metadata.objectIdColumn.databaseName];\n }\n }\n });\n }\n\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n protected updateSpecialColumnsInInsertedAndUpdatedEntities(subjects: Subject[]): void {\n subjects.forEach(subject => {\n if (!subject.entity) return;\n\n // set values to \"null\" for nullable columns that did not have values\n subject.metadata.columns.forEach(column => {\n\n // if table inheritance is used make sure this column is not child's column\n if (subject.metadata.childEntityMetadatas.length > 0 && subject.metadata.childEntityMetadatas.map(metadata => metadata.target).indexOf(column.target) !== -1)\n return;\n\n // entities does not have virtual columns\n if (column.isVirtual)\n return;\n\n // update nullable columns\n if (column.isNullable) {\n const columnValue = column.getEntityValue(subject.entity!);\n if (columnValue === undefined)\n column.setEntityValue(subject.entity!, null);\n }\n\n // update relational columns\n if (subject.updatedRelationMaps.length > 0) {\n subject.updatedRelationMaps.forEach(updatedRelationMap => {\n updatedRelationMap.relation.joinColumns.forEach(column => {\n if (column.isVirtual === true)\n return;\n\n column.setEntityValue(subject.entity!, updatedRelationMap.value instanceof Object ? column.referencedColumn!.getEntityValue(updatedRelationMap.value) : updatedRelationMap.value);\n });\n });\n }\n });\n\n // merge into entity all generated values returned by a database\n if (subject.generatedMap)\n this.queryRunner.manager.merge(subject.metadata.target as any, subject.entity, subject.generatedMap);\n });\n }\n\n /**\n * Groups subjects by metadata names (by tables) to make bulk insertions and deletions possible.\n * However there are some limitations with bulk insertions of data into tables with generated (increment) columns\n * in some drivers. Some drivers like mysql and sqlite does not support returning multiple generated columns\n * after insertion and can only return a single generated column value, that's why its not possible to do bulk insertion,\n * because it breaks insertion result's generatedMap and leads to problems when this subject is used in other subjects saves.\n * That's why we only support bulking in junction tables for those drivers.\n *\n * Other drivers like postgres and sql server support RETURNING / OUTPUT statement which allows to return generated\n * id for each inserted row, that's why bulk insertion is not limited to junction tables in there.\n */\n protected groupBulkSubjects(subjects: Subject[], type: \"insert\" | \"delete\"): [{ [key: string]: Subject[] }, string[]] {\n const group: { [key: string]: Subject[] } = {};\n const keys: string[] = [];\n const groupingAllowed = type === \"delete\" || this.queryRunner.connection.driver.isReturningSqlSupported();\n\n subjects.forEach((subject, index) => {\n const key = groupingAllowed || subject.metadata.isJunction ? subject.metadata.name : subject.metadata.name + \"_\" + index;\n if (!group[key]) {\n group[key] = [subject];\n keys.push(key);\n } else {\n group[key].push(subject);\n }\n });\n\n return [group, keys];\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/persistence/SubjectExecutor.ts"],"names":[],"mappings":"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","file":"SubjectExecutor.js","sourcesContent":["import {SapDriver} from \"../driver/sap/SapDriver\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {Subject} from \"./Subject\";\nimport {SubjectTopoligicalSorter} from \"./SubjectTopoligicalSorter\";\nimport {SubjectChangedColumnsComputer} from \"./SubjectChangedColumnsComputer\";\nimport {SubjectWithoutIdentifierError} from \"../error/SubjectWithoutIdentifierError\";\nimport {SubjectRemovedAndUpdatedError} from \"../error/SubjectRemovedAndUpdatedError\";\nimport {MongoQueryRunner} from \"../driver/mongodb/MongoQueryRunner\";\nimport {MongoEntityManager} from \"../entity-manager/MongoEntityManager\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {SaveOptions} from \"../repository/SaveOptions\";\nimport {RemoveOptions} from \"../repository/RemoveOptions\";\nimport {BroadcasterResult} from \"../subscriber/BroadcasterResult\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {NestedSetSubjectExecutor} from \"./tree/NestedSetSubjectExecutor\";\nimport {ClosureSubjectExecutor} from \"./tree/ClosureSubjectExecutor\";\nimport {MaterializedPathSubjectExecutor} from \"./tree/MaterializedPathSubjectExecutor\";\nimport {OrmUtils} from \"../util/OrmUtils\";\nimport { UpdateResult } from \"../query-builder/result/UpdateResult\";\n\n/**\n * Executes all database operations (inserts, updated, deletes) that must be executed\n * with given persistence subjects.\n */\nexport class SubjectExecutor {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates if executor has any operations to execute (e.g. has insert / update / delete operations to be executed).\n */\n hasExecutableOperations: boolean = false;\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * QueryRunner used to execute all queries with a given subjects.\n */\n protected queryRunner: QueryRunner;\n\n /**\n * Persistence options.\n */\n protected options?: SaveOptions & RemoveOptions;\n\n /**\n * All subjects that needs to be operated.\n */\n protected allSubjects: Subject[];\n\n /**\n * Subjects that must be inserted.\n */\n protected insertSubjects: Subject[] = [];\n\n /**\n * Subjects that must be updated.\n */\n protected updateSubjects: Subject[] = [];\n\n /**\n * Subjects that must be removed.\n */\n protected removeSubjects: Subject[] = [];\n\n /**\n * Subjects that must be soft-removed.\n */\n protected softRemoveSubjects: Subject[] = [];\n\n /**\n * Subjects that must be recovered.\n */\n protected recoverSubjects: Subject[] = [];\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(queryRunner: QueryRunner, subjects: Subject[], options?: SaveOptions & RemoveOptions) {\n this.queryRunner = queryRunner;\n this.allSubjects = subjects;\n this.options = options;\n this.validate();\n this.recompute();\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Executes all operations over given array of subjects.\n * Executes queries using given query runner.\n */\n async execute(): Promise<void> {\n // console.time(\"SubjectExecutor.execute\");\n\n // broadcast \"before\" events before we start insert / update / remove operations\n let broadcasterResult: BroadcasterResult | undefined = undefined;\n if (!this.options || this.options.listeners !== false) {\n // console.time(\".broadcastBeforeEventsForAll\");\n broadcasterResult = this.broadcastBeforeEventsForAll();\n if (broadcasterResult.promises.length > 0) await Promise.all(broadcasterResult.promises);\n // console.timeEnd(\".broadcastBeforeEventsForAll\");\n }\n\n // since event listeners and subscribers can call save methods and/or trigger entity changes we need to recompute operational subjects\n // recompute only in the case if any listener or subscriber was really executed\n if (broadcasterResult && broadcasterResult.count > 0) {\n // console.time(\".recompute\");\n this.insertSubjects.forEach(subject => subject.recompute());\n this.updateSubjects.forEach(subject => subject.recompute());\n this.removeSubjects.forEach(subject => subject.recompute());\n this.softRemoveSubjects.forEach(subject => subject.recompute());\n this.recoverSubjects.forEach(subject => subject.recompute());\n this.recompute();\n // console.timeEnd(\".recompute\");\n }\n\n // make sure our insert subjects are sorted (using topological sorting) to make cascade inserts work properly\n\n // console.timeEnd(\"prepare\");\n\n // execute all insert operations\n // console.time(\".insertion\");\n this.insertSubjects = new SubjectTopoligicalSorter(this.insertSubjects).sort(\"insert\");\n await this.executeInsertOperations();\n // console.timeEnd(\".insertion\");\n\n // recompute update operations since insertion can create updation operations for the\n // properties it wasn't able to handle on its own (referenced columns)\n this.updateSubjects = this.allSubjects.filter(subject => subject.mustBeUpdated);\n\n // execute update operations\n // console.time(\".updation\");\n await this.executeUpdateOperations();\n // console.timeEnd(\".updation\");\n\n // make sure our remove subjects are sorted (using topological sorting) when multiple entities are passed for the removal\n // console.time(\".removal\");\n this.removeSubjects = new SubjectTopoligicalSorter(this.removeSubjects).sort(\"delete\");\n await this.executeRemoveOperations();\n // console.timeEnd(\".removal\");\n\n // recompute soft-remove operations\n this.softRemoveSubjects = this.allSubjects.filter(subject => subject.mustBeSoftRemoved);\n\n // execute soft-remove operations\n await this.executeSoftRemoveOperations();\n\n // recompute recover operations\n this.recoverSubjects = this.allSubjects.filter(subject => subject.mustBeRecovered);\n\n // execute recover operations\n await this.executeRecoverOperations();\n\n // update all special columns in persisted entities, like inserted id or remove ids from the removed entities\n // console.time(\".updateSpecialColumnsInPersistedEntities\");\n await this.updateSpecialColumnsInPersistedEntities();\n // console.timeEnd(\".updateSpecialColumnsInPersistedEntities\");\n\n // finally broadcast \"after\" events after we finish insert / update / remove operations\n if (!this.options || this.options.listeners !== false) {\n // console.time(\".broadcastAfterEventsForAll\");\n broadcasterResult = this.broadcastAfterEventsForAll();\n if (broadcasterResult.promises.length > 0) await Promise.all(broadcasterResult.promises);\n // console.timeEnd(\".broadcastAfterEventsForAll\");\n }\n // console.timeEnd(\"SubjectExecutor.execute\");\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Validates all given subjects.\n */\n protected validate() {\n this.allSubjects.forEach(subject => {\n if (subject.mustBeUpdated && subject.mustBeRemoved)\n throw new SubjectRemovedAndUpdatedError(subject);\n });\n }\n\n /**\n * Performs entity re-computations - finds changed columns, re-builds insert/update/remove subjects.\n */\n protected recompute(): void {\n new SubjectChangedColumnsComputer().compute(this.allSubjects);\n this.insertSubjects = this.allSubjects.filter(subject => subject.mustBeInserted);\n this.updateSubjects = this.allSubjects.filter(subject => subject.mustBeUpdated);\n this.removeSubjects = this.allSubjects.filter(subject => subject.mustBeRemoved);\n this.softRemoveSubjects = this.allSubjects.filter(subject => subject.mustBeSoftRemoved);\n this.recoverSubjects = this.allSubjects.filter(subject => subject.mustBeRecovered);\n this.hasExecutableOperations = this.insertSubjects.length > 0 || this.updateSubjects.length > 0 || this.removeSubjects.length > 0 || this.softRemoveSubjects.length > 0 || this.recoverSubjects.length > 0;\n }\n\n /**\n * Broadcasts \"BEFORE_INSERT\", \"BEFORE_UPDATE\", \"BEFORE_REMOVE\" events for all given subjects.\n */\n protected broadcastBeforeEventsForAll(): BroadcasterResult {\n const result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastBeforeInsertEvent(result, subject.metadata, subject.entity!));\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastBeforeRemoveEvent(result, subject.metadata, subject.entity!, subject.databaseEntity));\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n return result;\n }\n\n /**\n * Broadcasts \"AFTER_INSERT\", \"AFTER_UPDATE\", \"AFTER_REMOVE\" events for all given subjects.\n * Returns void if there wasn't any listener or subscriber executed.\n * Note: this method has a performance-optimized code organization.\n */\n protected broadcastAfterEventsForAll(): BroadcasterResult {\n const result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastAfterInsertEvent(result, subject.metadata, subject.entity!));\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastAfterRemoveEvent(result, subject.metadata, subject.entity!, subject.databaseEntity));\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(subject => this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity!, subject.databaseEntity, subject.diffColumns, subject.diffRelations));\n return result;\n }\n\n /**\n * Executes insert operations.\n */\n protected async executeInsertOperations(): Promise<void> {\n // group insertion subjects to make bulk insertions\n const [groupedInsertSubjects, groupedInsertSubjectKeys] = this.groupBulkSubjects(this.insertSubjects, \"insert\");\n\n // then we run insertion in the sequential order which is important since we have an ordered subjects\n for (const groupName of groupedInsertSubjectKeys) {\n const subjects = groupedInsertSubjects[groupName];\n\n // we must separately insert entities which does not have any values to insert\n // because its not possible to insert multiple entities with only default values in bulk\n const bulkInsertMaps: ObjectLiteral[] = [];\n const bulkInsertSubjects: Subject[] = [];\n const singleInsertSubjects: Subject[] = [];\n if (this.queryRunner.connection.driver instanceof MongoDriver) {\n subjects.forEach(subject => {\n if (subject.metadata.createDateColumn && subject.entity) {\n subject.entity[subject.metadata.createDateColumn.databaseName] = new Date();\n }\n\n if (subject.metadata.updateDateColumn && subject.entity) {\n subject.entity[subject.metadata.updateDateColumn.databaseName] = new Date();\n }\n\n subject.createValueSetAndPopChangeMap();\n\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.entity!);\n });\n } else if (this.queryRunner.connection.driver instanceof OracleDriver) {\n subjects.forEach(subject => {\n singleInsertSubjects.push(subject);\n });\n } else {\n subjects.forEach(subject => {\n\n // we do not insert in bulk in following cases:\n // - when there is no values in insert (only defaults are inserted), since we cannot use DEFAULT VALUES expression for multiple inserted rows\n // - when entity is a tree table, since tree tables require extra operation per each inserted row\n // - when oracle is used, since oracle's bulk insertion is very bad\n if (subject.changeMaps.length === 0 ||\n subject.metadata.treeType ||\n this.queryRunner.connection.driver instanceof OracleDriver ||\n this.queryRunner.connection.driver instanceof SapDriver) {\n singleInsertSubjects.push(subject);\n\n } else {\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.createValueSetAndPopChangeMap());\n }\n });\n }\n\n // for mongodb we have a bit different insertion logic\n if (this.queryRunner instanceof MongoQueryRunner) {\n const manager = this.queryRunner.manager as MongoEntityManager;\n const insertResult = await manager.insert(subjects[0].metadata.target, bulkInsertMaps);\n subjects.forEach((subject, index) => {\n subject.identifier = insertResult.identifiers[index];\n subject.generatedMap = insertResult.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n\n } else {\n\n // here we execute our insertion query\n // we need to enable entity updation because we DO need to have updated insertedMap\n // which is not same object as our entity that's why we don't need to worry about our entity to get dirty\n // also, we disable listeners because we call them on our own in persistence layer\n if (bulkInsertMaps.length > 0) {\n const insertResult = await this.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subjects[0].metadata.target)\n .values(bulkInsertMaps)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false)\n .execute();\n\n bulkInsertSubjects.forEach((subject, index) => {\n subject.identifier = insertResult.identifiers[index];\n subject.generatedMap = insertResult.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n }\n\n // insert subjects which must be inserted in separate requests (all default values)\n if (singleInsertSubjects.length > 0) {\n for (const subject of singleInsertSubjects) {\n subject.insertedValueSet = subject.createValueSetAndPopChangeMap(); // important to have because query builder sets inserted values into it\n\n // for nested set we execute additional queries\n if (subject.metadata.treeType === \"nested-set\")\n await new NestedSetSubjectExecutor(this.queryRunner).insert(subject);\n\n await this.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.target)\n .values(subject.insertedValueSet)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false)\n .execute()\n .then(insertResult => {\n subject.identifier = insertResult.identifiers[0];\n subject.generatedMap = insertResult.generatedMaps[0];\n });\n\n // for tree tables we execute additional queries\n if (subject.metadata.treeType === \"closure-table\") {\n await new ClosureSubjectExecutor(this.queryRunner).insert(subject);\n\n } else if (subject.metadata.treeType === \"materialized-path\") {\n await new MaterializedPathSubjectExecutor(this.queryRunner).insert(subject);\n }\n }\n }\n }\n\n subjects.forEach(subject => {\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(column => {\n const value = column.getEntityValue(subject.generatedMap!);\n if (value !== undefined && value !== null) {\n const preparedValue = this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap!, preparedValue);\n }\n });\n }\n });\n }\n }\n\n /**\n * Updates all given subjects in the database.\n */\n protected async executeUpdateOperations(): Promise<void> {\n const updateSubject = async (subject: Subject) => {\n\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n\n // for mongodb we have a bit different updation logic\n if (this.queryRunner instanceof MongoQueryRunner) {\n const partialEntity = this.cloneMongoSubjectEntity(subject);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n\n const manager = this.queryRunner.manager as MongoEntityManager;\n\n await manager.update(subject.metadata.target, subject.identifier, partialEntity);\n\n } else {\n\n const updateMap: ObjectLiteral = subject.createValueSetAndPopChangeMap();\n\n // for tree tables we execute additional queries\n switch (subject.metadata.treeType) {\n case \"nested-set\":\n await new NestedSetSubjectExecutor(this.queryRunner).update(subject);\n break;\n\n case \"closure-table\":\n await new ClosureSubjectExecutor(this.queryRunner).update(subject);\n break;\n\n case \"materialized-path\":\n await new MaterializedPathSubjectExecutor(this.queryRunner).update(subject);\n break;\n }\n\n // here we execute our updation query\n // we need to enable entity updation because we update a subject identifier\n // which is not same object as our entity that's why we don't need to worry about our entity to get dirty\n // also, we disable listeners because we call them on our own in persistence layer\n const updateQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .update(subject.metadata.target)\n .set(updateMap)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n\n if (subject.entity) {\n updateQueryBuilder.whereEntity(subject.identifier);\n\n } else { // in this case identifier is just conditions object to update by\n updateQueryBuilder.where(subject.identifier);\n }\n\n const updateResult = await updateQueryBuilder.execute();\n let updateGeneratedMap = updateResult.generatedMaps[0];\n if (updateGeneratedMap) {\n subject.metadata.columns.forEach(column => {\n const value = column.getEntityValue(updateGeneratedMap!);\n if (value !== undefined && value !== null) {\n const preparedValue = this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(updateGeneratedMap!, preparedValue);\n }\n });\n if (!subject.generatedMap) {\n subject.generatedMap = {};\n }\n Object.assign(subject.generatedMap, updateGeneratedMap);\n }\n }\n };\n\n // Nested sets need to be updated one by one\n // Split array in two, one with nested set subjects and the other with the remaining subjects\n const nestedSetSubjects: Subject[] = [];\n const remainingSubjects: Subject[] = [];\n\n for (const subject of this.updateSubjects) {\n if (subject.metadata.treeType === \"nested-set\") {\n nestedSetSubjects.push(subject);\n } else {\n remainingSubjects.push(subject);\n }\n }\n\n // Run nested set updates one by one\n const nestedSetPromise = new Promise<void>(async (resolve, reject) => {\n for (const subject of nestedSetSubjects) {\n try {\n await updateSubject(subject);\n } catch (error) {\n reject(error);\n }\n }\n resolve();\n });\n\n // Run all remaning subjects in parallel\n await Promise.all([...remainingSubjects.map(updateSubject), nestedSetPromise]);\n }\n\n /**\n * Removes all given subjects from the database.\n *\n * todo: we need to apply topological sort here as well\n */\n protected async executeRemoveOperations(): Promise<void> {\n // group insertion subjects to make bulk insertions\n const [groupedRemoveSubjects, groupedRemoveSubjectKeys] = this.groupBulkSubjects(this.removeSubjects, \"delete\");\n\n for (const groupName of groupedRemoveSubjectKeys) {\n const subjects = groupedRemoveSubjects[groupName];\n const deleteMaps = subjects.map(subject => {\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n\n return subject.identifier;\n });\n\n // for mongodb we have a bit different updation logic\n if (this.queryRunner instanceof MongoQueryRunner) {\n const manager = this.queryRunner.manager as MongoEntityManager;\n await manager.delete(subjects[0].metadata.target, deleteMaps);\n\n } else {\n // for tree tables we execute additional queries\n switch (subjects[0].metadata.treeType) {\n case \"nested-set\":\n await new NestedSetSubjectExecutor(this.queryRunner).remove(subjects);\n break;\n\n case \"closure-table\":\n await new ClosureSubjectExecutor(this.queryRunner).remove(subjects);\n break;\n }\n\n // here we execute our deletion query\n // we don't need to specify entities and set update entity to true since the only thing query builder\n // will do for use is a primary keys deletion which is handled by us later once persistence is finished\n // also, we disable listeners because we call them on our own in persistence layer\n await this.queryRunner\n .manager\n .createQueryBuilder()\n .delete()\n .from(subjects[0].metadata.target)\n .where(deleteMaps)\n .callListeners(false)\n .execute();\n }\n }\n }\n\n private cloneMongoSubjectEntity(subject: Subject): ObjectLiteral {\n const target: ObjectLiteral = {};\n\n if (subject.entity) {\n for (const column of subject.metadata.columns) {\n OrmUtils.mergeDeep(target, column.getEntityValueMap(subject.entity));\n }\n }\n\n return target;\n }\n\n /**\n * Soft-removes all given subjects in the database.\n */\n protected async executeSoftRemoveOperations(): Promise<void> {\n await Promise.all(this.softRemoveSubjects.map(async subject => {\n\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n\n let updateResult: UpdateResult;\n\n // for mongodb we have a bit different updation logic\n if (this.queryRunner instanceof MongoQueryRunner) {\n const partialEntity = this.cloneMongoSubjectEntity(subject);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = new Date();\n }\n\n const manager = this.queryRunner.manager as MongoEntityManager;\n\n updateResult = await manager.update(subject.metadata.target, subject.identifier, partialEntity);\n\n } else {\n\n // here we execute our soft-deletion query\n // we need to enable entity soft-deletion because we update a subject identifier\n // which is not same object as our entity that's why we don't need to worry about our entity to get dirty\n // also, we disable listeners because we call them on our own in persistence layer\n const softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .softDelete()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n\n } else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n\n updateResult = await softDeleteQueryBuilder.execute();\n }\n\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(column => {\n const value = column.getEntityValue(subject.generatedMap!);\n if (value !== undefined && value !== null) {\n const preparedValue = this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap!, preparedValue);\n }\n });\n }\n\n // experiments, remove probably, need to implement tree tables children removal\n // if (subject.updatedRelationMaps.length > 0) {\n // await Promise.all(subject.updatedRelationMaps.map(async updatedRelation => {\n // if (!updatedRelation.relation.isTreeParent) return;\n // if (!updatedRelation.value !== null) return;\n //\n // if (subject.metadata.treeType === \"closure-table\") {\n // await new ClosureSubjectExecutor(this.queryRunner).deleteChildrenOf(subject);\n // }\n // }));\n // }\n }));\n }\n\n /**\n * Recovers all given subjects in the database.\n */\n protected async executeRecoverOperations(): Promise<void> {\n await Promise.all(this.recoverSubjects.map(async subject => {\n\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n\n let updateResult: UpdateResult;\n\n // for mongodb we have a bit different updation logic\n if (this.queryRunner instanceof MongoQueryRunner) {\n const partialEntity = this.cloneMongoSubjectEntity(subject);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = null;\n }\n\n const manager = this.queryRunner.manager as MongoEntityManager;\n\n updateResult = await manager.update(subject.metadata.target, subject.identifier, partialEntity);\n\n } else {\n\n // here we execute our restory query\n // we need to enable entity restory because we update a subject identifier\n // which is not same object as our entity that's why we don't need to worry about our entity to get dirty\n // also, we disable listeners because we call them on our own in persistence layer\n const softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .restore()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n\n } else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n\n updateResult = await softDeleteQueryBuilder.execute();\n }\n\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(column => {\n const value = column.getEntityValue(subject.generatedMap!);\n if (value !== undefined && value !== null) {\n const preparedValue = this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap!, preparedValue);\n }\n });\n }\n\n // experiments, remove probably, need to implement tree tables children removal\n // if (subject.updatedRelationMaps.length > 0) {\n // await Promise.all(subject.updatedRelationMaps.map(async updatedRelation => {\n // if (!updatedRelation.relation.isTreeParent) return;\n // if (!updatedRelation.value !== null) return;\n //\n // if (subject.metadata.treeType === \"closure-table\") {\n // await new ClosureSubjectExecutor(this.queryRunner).deleteChildrenOf(subject);\n // }\n // }));\n // }\n\n }));\n }\n\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n protected updateSpecialColumnsInPersistedEntities(): void {\n\n // update inserted entity properties\n if (this.insertSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.insertSubjects);\n\n // update updated entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.updateSubjects);\n\n // update soft-removed entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.softRemoveSubjects);\n\n // update recovered entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.recoverSubjects);\n\n // remove ids from the entities that were removed\n if (this.removeSubjects.length) {\n this.removeSubjects.forEach(subject => {\n if (!subject.entity) return;\n\n subject.metadata.primaryColumns.forEach(primaryColumn => {\n primaryColumn.setEntityValue(subject.entity!, undefined);\n });\n });\n }\n\n // other post-persist updations\n this.allSubjects.forEach(subject => {\n if (!subject.entity) return;\n\n subject.metadata.relationIds.forEach(relationId => {\n relationId.setValue(subject.entity!);\n });\n\n // mongo _id remove\n if (this.queryRunner instanceof MongoQueryRunner) {\n if (subject.metadata.objectIdColumn\n && subject.metadata.objectIdColumn.databaseName\n && subject.metadata.objectIdColumn.databaseName !== subject.metadata.objectIdColumn.propertyName\n ) {\n delete subject.entity[subject.metadata.objectIdColumn.databaseName];\n }\n }\n });\n }\n\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n protected updateSpecialColumnsInInsertedAndUpdatedEntities(subjects: Subject[]): void {\n subjects.forEach(subject => {\n if (!subject.entity) return;\n\n // set values to \"null\" for nullable columns that did not have values\n subject.metadata.columns.forEach(column => {\n\n // if table inheritance is used make sure this column is not child's column\n if (subject.metadata.childEntityMetadatas.length > 0 && subject.metadata.childEntityMetadatas.map(metadata => metadata.target).indexOf(column.target) !== -1)\n return;\n\n // entities does not have virtual columns\n if (column.isVirtual)\n return;\n\n // update nullable columns\n if (column.isNullable) {\n const columnValue = column.getEntityValue(subject.entity!);\n if (columnValue === undefined)\n column.setEntityValue(subject.entity!, null);\n }\n\n // update relational columns\n if (subject.updatedRelationMaps.length > 0) {\n subject.updatedRelationMaps.forEach(updatedRelationMap => {\n updatedRelationMap.relation.joinColumns.forEach(column => {\n if (column.isVirtual === true)\n return;\n\n column.setEntityValue(subject.entity!, updatedRelationMap.value instanceof Object ? column.referencedColumn!.getEntityValue(updatedRelationMap.value) : updatedRelationMap.value);\n });\n });\n }\n });\n\n // merge into entity all generated values returned by a database\n if (subject.generatedMap)\n this.queryRunner.manager.merge(subject.metadata.target as any, subject.entity, subject.generatedMap);\n });\n }\n\n /**\n * Groups subjects by metadata names (by tables) to make bulk insertions and deletions possible.\n * However there are some limitations with bulk insertions of data into tables with generated (increment) columns\n * in some drivers. Some drivers like mysql and sqlite does not support returning multiple generated columns\n * after insertion and can only return a single generated column value, that's why its not possible to do bulk insertion,\n * because it breaks insertion result's generatedMap and leads to problems when this subject is used in other subjects saves.\n * That's why we only support bulking in junction tables for those drivers.\n *\n * Other drivers like postgres and sql server support RETURNING / OUTPUT statement which allows to return generated\n * id for each inserted row, that's why bulk insertion is not limited to junction tables in there.\n */\n protected groupBulkSubjects(subjects: Subject[], type: \"insert\" | \"delete\"): [{ [key: string]: Subject[] }, string[]] {\n const group: { [key: string]: Subject[] } = {};\n const keys: string[] = [];\n const groupingAllowed = type === \"delete\" || this.queryRunner.connection.driver.isReturningSqlSupported();\n\n subjects.forEach((subject, index) => {\n const key = groupingAllowed || subject.metadata.isJunction ? subject.metadata.name : subject.metadata.name + \"_\" + index;\n if (!group[key]) {\n group[key] = [subject];\n keys.push(key);\n } else {\n group[key].push(subject);\n }\n });\n\n return [group, keys];\n }\n\n}\n"],"sourceRoot":".."}
@@ -9,7 +9,7 @@ var SubjectTopoligicalSorter = /** @class */ (function () {
9
9
  // Constructor
10
10
  // -------------------------------------------------------------------------
11
11
  function SubjectTopoligicalSorter(subjects) {
12
- this.subjects = __spreadArray([], __read(subjects)); // copy subjects to prevent changing of sent array
12
+ this.subjects = __spreadArray([], __read(subjects), false); // copy subjects to prevent changing of sent array
13
13
  this.metadatas = this.getUniqueMetadatas(this.subjects);
14
14
  }
15
15
  // -------------------------------------------------------------------------
@@ -28,7 +28,7 @@ var SubjectTopoligicalSorter = /** @class */ (function () {
28
28
  // junction subjects are subjects without entity and database entity set
29
29
  if (direction === "delete") {
30
30
  var junctionSubjects = this.subjects.filter(function (subject) { return !subject.entity && !subject.databaseEntity; });
31
- sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(junctionSubjects)));
31
+ sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(junctionSubjects), false));
32
32
  this.removeAlreadySorted(junctionSubjects);
33
33
  }
34
34
  // next we always insert entities with non-nullable relations, sort them first
@@ -41,7 +41,7 @@ var SubjectTopoligicalSorter = /** @class */ (function () {
41
41
  // add those sorted targets and remove them from original array of targets
42
42
  sortedNonNullableEntityTargets.forEach(function (sortedEntityTarget) {
43
43
  var entityTargetSubjects = _this.subjects.filter(function (subject) { return subject.metadata.targetName === sortedEntityTarget; });
44
- sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects)));
44
+ sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects), false));
45
45
  _this.removeAlreadySorted(entityTargetSubjects);
46
46
  });
47
47
  // next sort all other entities
@@ -52,11 +52,11 @@ var SubjectTopoligicalSorter = /** @class */ (function () {
52
52
  sortedOtherEntityTargets = sortedOtherEntityTargets.reverse();
53
53
  sortedOtherEntityTargets.forEach(function (sortedEntityTarget) {
54
54
  var entityTargetSubjects = _this.subjects.filter(function (subject) { return subject.metadata.targetName === sortedEntityTarget; });
55
- sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects)));
55
+ sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects), false));
56
56
  _this.removeAlreadySorted(entityTargetSubjects);
57
57
  });
58
58
  // if we have something left in the subjects add them as well
59
- sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(this.subjects)));
59
+ sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(this.subjects), false));
60
60
  return sortedSubjects;
61
61
  };
62
62
  // -------------------------------------------------------------------------