typeorm 0.2.41-dev.c895680 → 0.2.42-dev.1446e02

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 (372) hide show
  1. package/README.md +38 -0
  2. package/browser/cache/DbQueryResultCache.js +12 -3
  3. package/browser/cache/DbQueryResultCache.js.map +1 -1
  4. package/browser/cache/RedisQueryResultCache.js +40 -35
  5. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  6. package/browser/common/RelationType.d.ts +14 -0
  7. package/browser/common/RelationType.js +3 -0
  8. package/browser/common/RelationType.js.map +1 -0
  9. package/browser/connection/BaseConnectionOptions.d.ts +5 -0
  10. package/browser/connection/BaseConnectionOptions.js.map +1 -1
  11. package/browser/connection/Connection.d.ts +7 -3
  12. package/browser/connection/Connection.js +47 -31
  13. package/browser/connection/Connection.js.map +1 -1
  14. package/browser/connection/ConnectionMetadataBuilder.d.ts +3 -3
  15. package/browser/connection/ConnectionMetadataBuilder.js +54 -22
  16. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  17. package/browser/connection/ConnectionOptionsReader.js +33 -28
  18. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  19. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
  20. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  21. package/browser/decorator/Unique.d.ts +5 -4
  22. package/browser/decorator/Unique.js +7 -3
  23. package/browser/decorator/Unique.js.map +1 -1
  24. package/browser/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
  25. package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  26. package/browser/decorator/options/ColumnOptions.d.ts +4 -0
  27. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  28. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
  29. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +3 -0
  30. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
  31. package/browser/decorator/options/RelationOptions.d.ts +1 -1
  32. package/browser/decorator/options/RelationOptions.js.map +1 -1
  33. package/browser/decorator/options/UniqueOptions.d.ts +10 -0
  34. package/browser/decorator/options/UniqueOptions.js +3 -0
  35. package/browser/decorator/options/UniqueOptions.js.map +1 -0
  36. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +34 -40
  37. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  38. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +7 -5
  39. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  40. package/browser/driver/cockroachdb/CockroachQueryRunner.js +25 -31
  41. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  42. package/browser/driver/mongodb/MongoQueryRunner.d.ts +2 -0
  43. package/browser/driver/mongodb/MongoQueryRunner.js +3 -0
  44. package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
  45. package/browser/driver/mysql/MysqlQueryRunner.js +38 -40
  46. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  47. package/browser/driver/oracle/OracleDriver.js +1 -1
  48. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  49. package/browser/driver/oracle/OracleQueryRunner.js +14 -25
  50. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  51. package/browser/driver/postgres/PostgresDriver.d.ts +1 -0
  52. package/browser/driver/postgres/PostgresDriver.js +16 -7
  53. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  54. package/browser/driver/postgres/PostgresQueryRunner.d.ts +5 -0
  55. package/browser/driver/postgres/PostgresQueryRunner.js +327 -139
  56. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  57. package/browser/driver/sap/SapQueryRunner.js +37 -43
  58. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  59. package/browser/driver/sqlite/SqliteDriver.js +11 -10
  60. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  61. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +9 -15
  62. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  63. package/browser/driver/sqlserver/SqlServerQueryRunner.js +32 -34
  64. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  65. package/browser/driver/types/MetadataTableType.d.ts +5 -0
  66. package/browser/driver/types/MetadataTableType.js +8 -0
  67. package/browser/driver/types/MetadataTableType.js.map +1 -0
  68. package/browser/entity-manager/EntityManager.d.ts +2 -2
  69. package/browser/entity-manager/EntityManager.js +1 -1
  70. package/browser/entity-manager/EntityManager.js.map +1 -1
  71. package/browser/entity-manager/MongoEntityManager.js +2 -1
  72. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  73. package/browser/entity-schema/EntitySchemaOptions.d.ts +6 -0
  74. package/browser/entity-schema/EntitySchemaOptions.js.map +1 -1
  75. package/browser/entity-schema/EntitySchemaRelationOptions.d.ts +1 -1
  76. package/browser/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  77. package/browser/entity-schema/EntitySchemaTransformer.js +3 -1
  78. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  79. package/browser/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  80. package/browser/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  81. package/browser/find-options/FindOneOptions.d.ts +6 -0
  82. package/browser/find-options/FindOneOptions.js.map +1 -1
  83. package/browser/find-options/FindOptionsUtils.js +4 -0
  84. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  85. package/browser/find-options/operator/Like.d.ts +1 -1
  86. package/browser/find-options/operator/Like.js +1 -1
  87. package/browser/find-options/operator/Like.js.map +1 -1
  88. package/browser/globals.js +34 -7
  89. package/browser/globals.js.map +1 -1
  90. package/browser/index.d.ts +10 -0
  91. package/browser/index.js +10 -0
  92. package/browser/index.js.map +1 -1
  93. package/browser/metadata/ColumnMetadata.d.ts +4 -0
  94. package/browser/metadata/ColumnMetadata.js +2 -0
  95. package/browser/metadata/ColumnMetadata.js.map +1 -1
  96. package/browser/metadata/RelationMetadata.d.ts +1 -1
  97. package/browser/metadata/RelationMetadata.js.map +1 -1
  98. package/browser/metadata/UniqueMetadata.d.ts +5 -0
  99. package/browser/metadata/UniqueMetadata.js +1 -0
  100. package/browser/metadata/UniqueMetadata.js.map +1 -1
  101. package/browser/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  102. package/browser/metadata-args/UniqueMetadataArgs.js.map +1 -1
  103. package/browser/metadata-builder/EntityMetadataValidator.js +1 -0
  104. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  105. package/browser/migration/MigrationExecutor.js +56 -49
  106. package/browser/migration/MigrationExecutor.js.map +1 -1
  107. package/browser/persistence/SubjectExecutor.js +2 -2
  108. package/browser/persistence/SubjectExecutor.js.map +1 -1
  109. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  110. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  111. package/browser/query-builder/DeleteQueryBuilder.d.ts +4 -2
  112. package/browser/query-builder/DeleteQueryBuilder.js +4 -2
  113. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  114. package/browser/query-builder/InsertQueryBuilder.d.ts +1 -1
  115. package/browser/query-builder/InsertQueryBuilder.js +1 -1
  116. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  117. package/browser/query-builder/NotBrackets.d.ts +7 -0
  118. package/browser/query-builder/NotBrackets.js +16 -0
  119. package/browser/query-builder/NotBrackets.js.map +1 -0
  120. package/browser/query-builder/QueryBuilder.d.ts +3 -2
  121. package/browser/query-builder/QueryBuilder.js +2 -1
  122. package/browser/query-builder/QueryBuilder.js.map +1 -1
  123. package/browser/query-builder/RelationLoader.js +11 -6
  124. package/browser/query-builder/RelationLoader.js.map +1 -1
  125. package/browser/query-builder/RelationQueryBuilder.d.ts +1 -1
  126. package/browser/query-builder/RelationQueryBuilder.js +1 -1
  127. package/browser/query-builder/RelationQueryBuilder.js.map +1 -1
  128. package/browser/query-builder/ReturningResultsEntityUpdator.d.ts +4 -0
  129. package/browser/query-builder/ReturningResultsEntityUpdator.js +11 -2
  130. package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  131. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  132. package/browser/query-builder/SelectQueryBuilder.js +5 -5
  133. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  134. package/browser/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
  135. package/browser/query-builder/SoftDeleteQueryBuilder.js +2 -2
  136. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  137. package/browser/query-builder/UpdateQueryBuilder.d.ts +4 -2
  138. package/browser/query-builder/UpdateQueryBuilder.js +11 -6
  139. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  140. package/browser/query-builder/WhereExpressionBuilder.d.ts +3 -1
  141. package/browser/query-builder/WhereExpressionBuilder.js.map +1 -1
  142. package/browser/query-runner/BaseQueryRunner.d.ts +23 -0
  143. package/browser/query-runner/BaseQueryRunner.js +38 -1
  144. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  145. package/browser/query-runner/QueryRunner.d.ts +5 -0
  146. package/browser/query-runner/QueryRunner.js.map +1 -1
  147. package/browser/repository/AbstractRepository.d.ts +2 -2
  148. package/browser/repository/AbstractRepository.js +2 -2
  149. package/browser/repository/AbstractRepository.js.map +1 -1
  150. package/browser/repository/BaseEntity.d.ts +1 -1
  151. package/browser/repository/BaseEntity.js +1 -1
  152. package/browser/repository/BaseEntity.js.map +1 -1
  153. package/browser/repository/Repository.d.ts +1 -1
  154. package/browser/repository/Repository.js +1 -1
  155. package/browser/repository/Repository.js.map +1 -1
  156. package/browser/repository/TreeRepository.js +1 -1
  157. package/browser/repository/TreeRepository.js.map +1 -1
  158. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +5 -1
  159. package/browser/schema-builder/RdbmsSchemaBuilder.js +59 -50
  160. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  161. package/browser/schema-builder/options/TableColumnOptions.d.ts +4 -0
  162. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  163. package/browser/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  164. package/browser/schema-builder/options/TableUniqueOptions.js.map +1 -1
  165. package/browser/schema-builder/table/TableColumn.d.ts +4 -0
  166. package/browser/schema-builder/table/TableColumn.js +2 -0
  167. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  168. package/browser/schema-builder/table/TableUnique.d.ts +5 -0
  169. package/browser/schema-builder/table/TableUnique.js +5 -2
  170. package/browser/schema-builder/table/TableUnique.js.map +1 -1
  171. package/browser/schema-builder/util/TableUtils.js +1 -0
  172. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  173. package/browser/util/DirectoryExportedClassesLoader.d.ts +1 -1
  174. package/browser/util/DirectoryExportedClassesLoader.js +55 -31
  175. package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
  176. package/browser/util/ImportUtils.d.ts +1 -0
  177. package/browser/util/ImportUtils.js +90 -0
  178. package/browser/util/ImportUtils.js.map +1 -0
  179. package/cache/DbQueryResultCache.js +12 -3
  180. package/cache/DbQueryResultCache.js.map +1 -1
  181. package/cache/RedisQueryResultCache.js +39 -34
  182. package/cache/RedisQueryResultCache.js.map +1 -1
  183. package/commands/CommandUtils.d.ts +4 -0
  184. package/commands/CommandUtils.js +10 -0
  185. package/commands/CommandUtils.js.map +1 -1
  186. package/commands/InitCommand.d.ts +9 -7
  187. package/commands/InitCommand.js +72 -43
  188. package/commands/InitCommand.js.map +1 -1
  189. package/commands/MigrationCreateCommand.d.ts +2 -0
  190. package/commands/MigrationCreateCommand.js +7 -1
  191. package/commands/MigrationCreateCommand.js.map +1 -1
  192. package/commands/MigrationGenerateCommand.d.ts +2 -0
  193. package/commands/MigrationGenerateCommand.js +7 -1
  194. package/commands/MigrationGenerateCommand.js.map +1 -1
  195. package/commands/QueryCommand.d.ts +1 -1
  196. package/commands/QueryCommand.js +1 -1
  197. package/commands/QueryCommand.js.map +1 -1
  198. package/common/RelationType.d.ts +14 -0
  199. package/common/RelationType.js +4 -0
  200. package/common/RelationType.js.map +1 -0
  201. package/connection/BaseConnectionOptions.d.ts +5 -0
  202. package/connection/BaseConnectionOptions.js.map +1 -1
  203. package/connection/Connection.d.ts +7 -3
  204. package/connection/Connection.js +47 -31
  205. package/connection/Connection.js.map +1 -1
  206. package/connection/ConnectionMetadataBuilder.d.ts +3 -3
  207. package/connection/ConnectionMetadataBuilder.js +53 -21
  208. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  209. package/connection/ConnectionOptionsReader.js +32 -27
  210. package/connection/ConnectionOptionsReader.js.map +1 -1
  211. package/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
  212. package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  213. package/decorator/Unique.d.ts +5 -4
  214. package/decorator/Unique.js +7 -3
  215. package/decorator/Unique.js.map +1 -1
  216. package/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
  217. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  218. package/decorator/options/ColumnOptions.d.ts +4 -0
  219. package/decorator/options/ColumnOptions.js.map +1 -1
  220. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
  221. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +4 -0
  222. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
  223. package/decorator/options/RelationOptions.d.ts +1 -1
  224. package/decorator/options/RelationOptions.js.map +1 -1
  225. package/decorator/options/UniqueOptions.d.ts +10 -0
  226. package/decorator/options/UniqueOptions.js +4 -0
  227. package/decorator/options/UniqueOptions.js.map +1 -0
  228. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +34 -40
  229. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  230. package/driver/better-sqlite3/BetterSqlite3Driver.js +7 -5
  231. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  232. package/driver/cockroachdb/CockroachQueryRunner.js +25 -31
  233. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  234. package/driver/mongodb/MongoQueryRunner.d.ts +2 -0
  235. package/driver/mongodb/MongoQueryRunner.js +3 -0
  236. package/driver/mongodb/MongoQueryRunner.js.map +1 -1
  237. package/driver/mysql/MysqlQueryRunner.js +38 -40
  238. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  239. package/driver/oracle/OracleDriver.js +1 -1
  240. package/driver/oracle/OracleDriver.js.map +1 -1
  241. package/driver/oracle/OracleQueryRunner.js +14 -25
  242. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  243. package/driver/postgres/PostgresDriver.d.ts +1 -0
  244. package/driver/postgres/PostgresDriver.js +16 -7
  245. package/driver/postgres/PostgresDriver.js.map +1 -1
  246. package/driver/postgres/PostgresQueryRunner.d.ts +5 -0
  247. package/driver/postgres/PostgresQueryRunner.js +327 -139
  248. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  249. package/driver/sap/SapQueryRunner.js +37 -43
  250. package/driver/sap/SapQueryRunner.js.map +1 -1
  251. package/driver/sqlite/SqliteDriver.js +11 -10
  252. package/driver/sqlite/SqliteDriver.js.map +1 -1
  253. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +9 -15
  254. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  255. package/driver/sqlserver/SqlServerQueryRunner.js +32 -34
  256. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  257. package/driver/types/MetadataTableType.d.ts +5 -0
  258. package/driver/types/MetadataTableType.js +11 -0
  259. package/driver/types/MetadataTableType.js.map +1 -0
  260. package/entity-manager/EntityManager.d.ts +2 -2
  261. package/entity-manager/EntityManager.js +1 -1
  262. package/entity-manager/EntityManager.js.map +1 -1
  263. package/entity-manager/MongoEntityManager.js +2 -1
  264. package/entity-manager/MongoEntityManager.js.map +1 -1
  265. package/entity-schema/EntitySchemaOptions.d.ts +6 -0
  266. package/entity-schema/EntitySchemaOptions.js.map +1 -1
  267. package/entity-schema/EntitySchemaRelationOptions.d.ts +1 -1
  268. package/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  269. package/entity-schema/EntitySchemaTransformer.js +3 -1
  270. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  271. package/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  272. package/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  273. package/find-options/FindOneOptions.d.ts +6 -0
  274. package/find-options/FindOneOptions.js.map +1 -1
  275. package/find-options/FindOptionsUtils.js +4 -0
  276. package/find-options/FindOptionsUtils.js.map +1 -1
  277. package/find-options/operator/Like.d.ts +1 -1
  278. package/find-options/operator/Like.js +1 -1
  279. package/find-options/operator/Like.js.map +1 -1
  280. package/globals.js +33 -6
  281. package/globals.js.map +1 -1
  282. package/index.d.ts +10 -0
  283. package/index.js +12 -1
  284. package/index.js.map +1 -1
  285. package/index.mjs +352 -0
  286. package/metadata/ColumnMetadata.d.ts +4 -0
  287. package/metadata/ColumnMetadata.js +2 -0
  288. package/metadata/ColumnMetadata.js.map +1 -1
  289. package/metadata/RelationMetadata.d.ts +1 -1
  290. package/metadata/RelationMetadata.js.map +1 -1
  291. package/metadata/UniqueMetadata.d.ts +5 -0
  292. package/metadata/UniqueMetadata.js +1 -0
  293. package/metadata/UniqueMetadata.js.map +1 -1
  294. package/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  295. package/metadata-args/UniqueMetadataArgs.js.map +1 -1
  296. package/metadata-builder/EntityMetadataValidator.js +1 -0
  297. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  298. package/migration/MigrationExecutor.js +56 -49
  299. package/migration/MigrationExecutor.js.map +1 -1
  300. package/package.json +1 -1
  301. package/persistence/SubjectExecutor.js +2 -2
  302. package/persistence/SubjectExecutor.js.map +1 -1
  303. package/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  304. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  305. package/query-builder/DeleteQueryBuilder.d.ts +4 -2
  306. package/query-builder/DeleteQueryBuilder.js +4 -2
  307. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  308. package/query-builder/InsertQueryBuilder.d.ts +1 -1
  309. package/query-builder/InsertQueryBuilder.js +1 -1
  310. package/query-builder/InsertQueryBuilder.js.map +1 -1
  311. package/query-builder/NotBrackets.d.ts +7 -0
  312. package/query-builder/NotBrackets.js +19 -0
  313. package/query-builder/NotBrackets.js.map +1 -0
  314. package/query-builder/QueryBuilder.d.ts +3 -2
  315. package/query-builder/QueryBuilder.js +2 -1
  316. package/query-builder/QueryBuilder.js.map +1 -1
  317. package/query-builder/RelationLoader.js +11 -6
  318. package/query-builder/RelationLoader.js.map +1 -1
  319. package/query-builder/RelationQueryBuilder.d.ts +1 -1
  320. package/query-builder/RelationQueryBuilder.js +1 -1
  321. package/query-builder/RelationQueryBuilder.js.map +1 -1
  322. package/query-builder/ReturningResultsEntityUpdator.d.ts +4 -0
  323. package/query-builder/ReturningResultsEntityUpdator.js +11 -2
  324. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  325. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  326. package/query-builder/SelectQueryBuilder.js +5 -5
  327. package/query-builder/SelectQueryBuilder.js.map +1 -1
  328. package/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
  329. package/query-builder/SoftDeleteQueryBuilder.js +2 -2
  330. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  331. package/query-builder/UpdateQueryBuilder.d.ts +4 -2
  332. package/query-builder/UpdateQueryBuilder.js +11 -6
  333. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  334. package/query-builder/WhereExpressionBuilder.d.ts +3 -1
  335. package/query-builder/WhereExpressionBuilder.js.map +1 -1
  336. package/query-runner/BaseQueryRunner.d.ts +23 -0
  337. package/query-runner/BaseQueryRunner.js +38 -1
  338. package/query-runner/BaseQueryRunner.js.map +1 -1
  339. package/query-runner/QueryRunner.d.ts +5 -0
  340. package/query-runner/QueryRunner.js.map +1 -1
  341. package/repository/AbstractRepository.d.ts +2 -2
  342. package/repository/AbstractRepository.js +2 -2
  343. package/repository/AbstractRepository.js.map +1 -1
  344. package/repository/BaseEntity.d.ts +1 -1
  345. package/repository/BaseEntity.js +1 -1
  346. package/repository/BaseEntity.js.map +1 -1
  347. package/repository/Repository.d.ts +1 -1
  348. package/repository/Repository.js +1 -1
  349. package/repository/Repository.js.map +1 -1
  350. package/repository/TreeRepository.js +1 -1
  351. package/repository/TreeRepository.js.map +1 -1
  352. package/schema-builder/RdbmsSchemaBuilder.d.ts +5 -1
  353. package/schema-builder/RdbmsSchemaBuilder.js +59 -50
  354. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  355. package/schema-builder/options/TableColumnOptions.d.ts +4 -0
  356. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  357. package/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  358. package/schema-builder/options/TableUniqueOptions.js.map +1 -1
  359. package/schema-builder/table/TableColumn.d.ts +4 -0
  360. package/schema-builder/table/TableColumn.js +2 -0
  361. package/schema-builder/table/TableColumn.js.map +1 -1
  362. package/schema-builder/table/TableUnique.d.ts +5 -0
  363. package/schema-builder/table/TableUnique.js +5 -2
  364. package/schema-builder/table/TableUnique.js.map +1 -1
  365. package/schema-builder/util/TableUtils.js +1 -0
  366. package/schema-builder/util/TableUtils.js.map +1 -1
  367. package/util/DirectoryExportedClassesLoader.d.ts +1 -1
  368. package/util/DirectoryExportedClassesLoader.js +54 -31
  369. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  370. package/util/ImportUtils.d.ts +1 -0
  371. package/util/ImportUtils.js +94 -0
  372. package/util/ImportUtils.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/migration/MigrationExecutor.ts"],"names":[],"mappings":"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","file":"MigrationExecutor.js","sourcesContent":["import {Table} from \"../schema-builder/table/Table\";\nimport {Connection} from \"../connection/Connection\";\nimport {Migration} from \"./Migration\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MssqlParameter} from \"../driver/sqlserver/MssqlParameter\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {MongoQueryRunner} from \"../driver/mongodb/MongoQueryRunner\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nexport class MigrationExecutor {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n transaction: \"all\" | \"none\" | \"each\" = \"all\";\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private readonly migrationsDatabase?: string;\n private readonly migrationsSchema?: string;\n private readonly migrationsTable: string;\n private readonly migrationsTableName: string;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner?: QueryRunner) {\n\n const { schema } = this.connection.driver.options as any;\n const database = this.connection.driver.database;\n this.migrationsDatabase = database;\n this.migrationsSchema = schema;\n this.migrationsTableName = connection.options.migrationsTableName || \"migrations\";\n this.migrationsTable = this.connection.driver.buildTableName(this.migrationsTableName, schema, database);\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Tries to execute a single migration given.\n */\n public async executeMigration(migration: Migration): Promise<Migration> {\n return this.withQueryRunner(async (queryRunner) => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n await (migration.instance as any).up(queryRunner);\n await this.insertExecutedMigration(queryRunner, migration);\n\n return migration;\n });\n }\n\n /**\n * Returns an array of all migrations.\n */\n public async getAllMigrations(): Promise<Migration[]> {\n return Promise.resolve(this.getMigrations());\n }\n\n /**\n * Returns an array of all executed migrations.\n */\n public async getExecutedMigrations(): Promise<Migration[]> {\n return this.withQueryRunner(async queryRunner => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n return await this.loadExecutedMigrations(queryRunner);\n });\n }\n\n /**\n * Returns an array of all pending migrations.\n */\n public async getPendingMigrations(): Promise<Migration[]> {\n const allMigrations = await this.getAllMigrations();\n const executedMigrations = await this.getExecutedMigrations();\n\n return allMigrations.filter(migration =>\n !executedMigrations.find(\n executedMigration =>\n executedMigration.name === migration.name\n )\n );\n }\n\n /**\n * Inserts an executed migration.\n */\n public insertMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.insertExecutedMigration(q, migration));\n }\n\n /**\n * Deletes an executed migration.\n */\n public deleteMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.deleteExecutedMigration(q, migration));\n }\n\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n async showMigrations(): Promise<boolean> {\n let hasUnappliedMigrations = false;\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n for (const migration of allMigrations) {\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n\n if (executedMigration) {\n this.connection.logger.logSchemaBuild(` [X] ${migration.name}`);\n } else {\n hasUnappliedMigrations = true;\n this.connection.logger.logSchemaBuild(` [ ] ${migration.name}`);\n }\n }\n\n // if query runner was created by us then release it\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n\n return hasUnappliedMigrations;\n }\n\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n async executePendingMigrations(): Promise<Migration[]> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestTimestampMigration(executedMigrations);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // variable to store all migrations we did successefuly\n const successMigrations: Migration[] = [];\n\n // find all migrations that needs to be executed\n const pendingMigrations = allMigrations.filter(migration => {\n // check if we already have executed migration\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n if (executedMigration)\n return false;\n\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new TypeORMError(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n\n // every check is passed means that migration was not run yet and we need to run it\n return true;\n });\n\n // if no migrations are pending then nothing to do here\n if (!pendingMigrations.length) {\n this.connection.logger.logSchemaBuild(`No migrations are pending`);\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n return [];\n }\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${allMigrations.length} migrations were found in the source code.`);\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`${pendingMigrations.length} migrations are new migrations that needs to be executed.`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if (this.transaction === \"all\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // run all pending migrations in a sequence\n try {\n for (const migration of pendingMigrations) {\n if (this.transaction === \"each\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n await migration.instance!.up(queryRunner)\n .catch(error => { // informative log about migration failure\n this.connection.logger.logMigration(`Migration \"${migration.name}\" has been failed, error: ${error?.message}`);\n throw error;\n })\n .then(async () => { // now when migration is executed we need to insert record about it into the database\n await this.insertExecutedMigration(queryRunner, migration);\n // commit transaction if we started it\n if (this.transaction === \"each\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n })\n .then(() => { // informative log about migration success\n successMigrations.push(migration);\n this.connection.logger.logSchemaBuild(`Migration ${migration.name} has been executed successfully.`);\n });\n }\n\n // commit transaction if we started it\n if (this.transaction === \"all\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n return successMigrations;\n\n }\n\n /**\n * Reverts last migration that were run.\n */\n async undoLastMigration(): Promise<void> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestExecutedMigration(executedMigrations);\n\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(`No migrations was found in the database. Nothing to revert!`);\n return;\n }\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // find the instance of the migration we need to remove\n const migrationToRevert = allMigrations.find(migration => migration.name === lastTimeExecutedMigration!.name);\n\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new TypeORMError(`No migration ${lastTimeExecutedMigration.name} was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.`);\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`Now reverting it...`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if ((this.transaction !== \"none\") && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n try {\n await migrationToRevert.instance!.down(queryRunner);\n await this.deleteExecutedMigration(queryRunner, migrationToRevert);\n this.connection.logger.logSchemaBuild(`Migration ${migrationToRevert.name} has been reverted successfully.`);\n\n // commit transaction if we started it\n if (transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n protected async createMigrationsTableIfNotExist(queryRunner: QueryRunner): Promise<void> {\n // If driver is mongo no need to create\n if (this.connection.driver instanceof MongoDriver) {\n return;\n }\n const tableExist = await queryRunner.hasTable(this.migrationsTable); // todo: table name should be configurable\n if (!tableExist) {\n await queryRunner.createTable(new Table(\n {\n database: this.migrationsDatabase,\n schema: this.migrationsSchema,\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationId}),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationTimestamp}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationName}),\n isNullable: false\n },\n ]\n },\n ));\n }\n }\n\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n protected async loadExecutedMigrations(queryRunner: QueryRunner): Promise<Migration[]> {\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n return await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .find<Migration>()\n .sort({\"_id\": -1})\n .toArray();\n } else {\n const migrationsRaw: ObjectLiteral[] = await this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany();\n return migrationsRaw.map(migrationRaw => {\n return new Migration(parseInt(migrationRaw[\"id\"]), parseInt(migrationRaw[\"timestamp\"]), migrationRaw[\"name\"]);\n });\n }\n }\n\n /**\n * Gets all migrations that setup for this connection.\n */\n protected getMigrations(): Migration[] {\n const migrations = this.connection.migrations.map(migration => {\n const migrationClassName = migration.name || (migration.constructor as any).name;\n const migrationTimestamp = parseInt(migrationClassName.substr(-13), 10);\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new TypeORMError(`${migrationClassName} migration name is wrong. Migration class name should have a JavaScript timestamp appended.`);\n }\n\n return new Migration(undefined, migrationTimestamp, migrationClassName, migration);\n });\n\n this.checkForDuplicateMigrations(migrations);\n\n // sort them by timestamp\n return migrations.sort((a, b) => a.timestamp - b.timestamp);\n }\n\n protected checkForDuplicateMigrations(migrations: Migration[]) {\n const migrationNames = migrations.map(migration => migration.name);\n const duplicates = Array.from(new Set(migrationNames.filter((migrationName, index) => migrationNames.indexOf(migrationName) < index)));\n if (duplicates.length > 0) {\n throw Error(`Duplicate migrations: ${duplicates.join(\", \")}`);\n }\n }\n\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n protected getLatestTimestampMigration(migrations: Migration[]): Migration|undefined {\n const sortedMigrations = migrations.map(migration => migration).sort((a, b) => (a.timestamp - b.timestamp) * -1);\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n protected getLatestExecutedMigration(sortedMigrations: Migration[]): Migration|undefined {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Inserts new executed migration's data into migrations table.\n */\n protected async insertExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n const values: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n values[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n values[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n values[\"timestamp\"] = migration.timestamp;\n values[\"name\"] = migration.name;\n }\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).insertOne(values);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.insert()\n .into(this.migrationsTable)\n .values(values)\n .execute();\n }\n }\n\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n protected async deleteExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n\n const conditions: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n conditions[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n conditions[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n conditions[\"timestamp\"] = migration.timestamp;\n conditions[\"name\"] = migration.name;\n }\n\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).deleteOne(conditions);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.delete()\n .from(this.migrationsTable)\n .where(`${qb.escape(\"timestamp\")} = :timestamp`)\n .andWhere(`${qb.escape(\"name\")} = :name`)\n .setParameters(conditions)\n .execute();\n }\n\n }\n\n protected async withQueryRunner<T extends any>(callback: (queryRunner: QueryRunner) => T | Promise<T>) {\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n try {\n return callback(queryRunner);\n } finally {\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n }\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/migration/MigrationExecutor.ts"],"names":[],"mappings":"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","file":"MigrationExecutor.js","sourcesContent":["import {Table} from \"../schema-builder/table/Table\";\nimport {Connection} from \"../connection/Connection\";\nimport {Migration} from \"./Migration\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MssqlParameter} from \"../driver/sqlserver/MssqlParameter\";\nimport {RdbmsSchemaBuilder} from \"../schema-builder/RdbmsSchemaBuilder\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {MongoQueryRunner} from \"../driver/mongodb/MongoQueryRunner\";\nimport {TypeORMError} from \"../error\";\n\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nexport class MigrationExecutor {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n transaction: \"all\" | \"none\" | \"each\" = \"all\";\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private readonly migrationsDatabase?: string;\n private readonly migrationsSchema?: string;\n private readonly migrationsTable: string;\n private readonly migrationsTableName: string;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner?: QueryRunner) {\n\n const { schema } = this.connection.driver.options as any;\n const database = this.connection.driver.database;\n this.migrationsDatabase = database;\n this.migrationsSchema = schema;\n this.migrationsTableName = connection.options.migrationsTableName || \"migrations\";\n this.migrationsTable = this.connection.driver.buildTableName(this.migrationsTableName, schema, database);\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Tries to execute a single migration given.\n */\n public async executeMigration(migration: Migration): Promise<Migration> {\n return this.withQueryRunner(async (queryRunner) => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n await (migration.instance as any).up(queryRunner);\n await this.insertExecutedMigration(queryRunner, migration);\n\n return migration;\n });\n }\n\n /**\n * Returns an array of all migrations.\n */\n public async getAllMigrations(): Promise<Migration[]> {\n return Promise.resolve(this.getMigrations());\n }\n\n /**\n * Returns an array of all executed migrations.\n */\n public async getExecutedMigrations(): Promise<Migration[]> {\n return this.withQueryRunner(async queryRunner => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n return await this.loadExecutedMigrations(queryRunner);\n });\n }\n\n /**\n * Returns an array of all pending migrations.\n */\n public async getPendingMigrations(): Promise<Migration[]> {\n const allMigrations = await this.getAllMigrations();\n const executedMigrations = await this.getExecutedMigrations();\n\n return allMigrations.filter(migration =>\n !executedMigrations.find(\n executedMigration =>\n executedMigration.name === migration.name\n )\n );\n }\n\n /**\n * Inserts an executed migration.\n */\n public insertMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.insertExecutedMigration(q, migration));\n }\n\n /**\n * Deletes an executed migration.\n */\n public deleteMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.deleteExecutedMigration(q, migration));\n }\n\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n async showMigrations(): Promise<boolean> {\n let hasUnappliedMigrations = false;\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n for (const migration of allMigrations) {\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n\n if (executedMigration) {\n this.connection.logger.logSchemaBuild(` [X] ${migration.name}`);\n } else {\n hasUnappliedMigrations = true;\n this.connection.logger.logSchemaBuild(` [ ] ${migration.name}`);\n }\n }\n\n // if query runner was created by us then release it\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n\n return hasUnappliedMigrations;\n }\n\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n async executePendingMigrations(): Promise<Migration[]> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n // create the typeorm_metadata table if necessary\n const schemaBuilder = this.connection.driver.createSchemaBuilder();\n\n if (schemaBuilder instanceof RdbmsSchemaBuilder) {\n await schemaBuilder.createMetadataTableIfNecessary(queryRunner);\n }\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestTimestampMigration(executedMigrations);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // variable to store all migrations we did successefuly\n const successMigrations: Migration[] = [];\n\n // find all migrations that needs to be executed\n const pendingMigrations = allMigrations.filter(migration => {\n // check if we already have executed migration\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n if (executedMigration)\n return false;\n\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new TypeORMError(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n\n // every check is passed means that migration was not run yet and we need to run it\n return true;\n });\n\n // if no migrations are pending then nothing to do here\n if (!pendingMigrations.length) {\n this.connection.logger.logSchemaBuild(`No migrations are pending`);\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n return [];\n }\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${allMigrations.length} migrations were found in the source code.`);\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`${pendingMigrations.length} migrations are new migrations that needs to be executed.`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if (this.transaction === \"all\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // run all pending migrations in a sequence\n try {\n for (const migration of pendingMigrations) {\n if (this.transaction === \"each\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n await migration.instance!.up(queryRunner)\n .catch(error => { // informative log about migration failure\n this.connection.logger.logMigration(`Migration \"${migration.name}\" failed, error: ${error?.message}`);\n throw error;\n })\n .then(async () => { // now when migration is executed we need to insert record about it into the database\n await this.insertExecutedMigration(queryRunner, migration);\n // commit transaction if we started it\n if (this.transaction === \"each\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n })\n .then(() => { // informative log about migration success\n successMigrations.push(migration);\n this.connection.logger.logSchemaBuild(`Migration ${migration.name} has been executed successfully.`);\n });\n }\n\n // commit transaction if we started it\n if (this.transaction === \"all\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n return successMigrations;\n\n }\n\n /**\n * Reverts last migration that were run.\n */\n async undoLastMigration(): Promise<void> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestExecutedMigration(executedMigrations);\n\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(`No migrations was found in the database. Nothing to revert!`);\n return;\n }\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // find the instance of the migration we need to remove\n const migrationToRevert = allMigrations.find(migration => migration.name === lastTimeExecutedMigration!.name);\n\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new TypeORMError(`No migration ${lastTimeExecutedMigration.name} was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.`);\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`Now reverting it...`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if ((this.transaction !== \"none\") && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n try {\n await migrationToRevert.instance!.down(queryRunner);\n await this.deleteExecutedMigration(queryRunner, migrationToRevert);\n this.connection.logger.logSchemaBuild(`Migration ${migrationToRevert.name} has been reverted successfully.`);\n\n // commit transaction if we started it\n if (transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n protected async createMigrationsTableIfNotExist(queryRunner: QueryRunner): Promise<void> {\n // If driver is mongo no need to create\n if (this.connection.driver instanceof MongoDriver) {\n return;\n }\n const tableExist = await queryRunner.hasTable(this.migrationsTable); // todo: table name should be configurable\n if (!tableExist) {\n await queryRunner.createTable(new Table(\n {\n database: this.migrationsDatabase,\n schema: this.migrationsSchema,\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationId}),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationTimestamp}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationName}),\n isNullable: false\n },\n ]\n },\n ));\n }\n }\n\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n protected async loadExecutedMigrations(queryRunner: QueryRunner): Promise<Migration[]> {\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n return await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .find<Migration>()\n .sort({\"_id\": -1})\n .toArray();\n } else {\n const migrationsRaw: ObjectLiteral[] = await this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany();\n return migrationsRaw.map(migrationRaw => {\n return new Migration(parseInt(migrationRaw[\"id\"]), parseInt(migrationRaw[\"timestamp\"]), migrationRaw[\"name\"]);\n });\n }\n }\n\n /**\n * Gets all migrations that setup for this connection.\n */\n protected getMigrations(): Migration[] {\n const migrations = this.connection.migrations.map(migration => {\n const migrationClassName = migration.name || (migration.constructor as any).name;\n const migrationTimestamp = parseInt(migrationClassName.substr(-13), 10);\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new TypeORMError(`${migrationClassName} migration name is wrong. Migration class name should have a JavaScript timestamp appended.`);\n }\n\n return new Migration(undefined, migrationTimestamp, migrationClassName, migration);\n });\n\n this.checkForDuplicateMigrations(migrations);\n\n // sort them by timestamp\n return migrations.sort((a, b) => a.timestamp - b.timestamp);\n }\n\n protected checkForDuplicateMigrations(migrations: Migration[]) {\n const migrationNames = migrations.map(migration => migration.name);\n const duplicates = Array.from(new Set(migrationNames.filter((migrationName, index) => migrationNames.indexOf(migrationName) < index)));\n if (duplicates.length > 0) {\n throw Error(`Duplicate migrations: ${duplicates.join(\", \")}`);\n }\n }\n\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n protected getLatestTimestampMigration(migrations: Migration[]): Migration|undefined {\n const sortedMigrations = migrations.map(migration => migration).sort((a, b) => (a.timestamp - b.timestamp) * -1);\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n protected getLatestExecutedMigration(sortedMigrations: Migration[]): Migration|undefined {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Inserts new executed migration's data into migrations table.\n */\n protected async insertExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n const values: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n values[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n values[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n values[\"timestamp\"] = migration.timestamp;\n values[\"name\"] = migration.name;\n }\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).insertOne(values);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.insert()\n .into(this.migrationsTable)\n .values(values)\n .execute();\n }\n }\n\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n protected async deleteExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n\n const conditions: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n conditions[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n conditions[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n conditions[\"timestamp\"] = migration.timestamp;\n conditions[\"name\"] = migration.name;\n }\n\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).deleteOne(conditions);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.delete()\n .from(this.migrationsTable)\n .where(`${qb.escape(\"timestamp\")} = :timestamp`)\n .andWhere(`${qb.escape(\"name\")} = :name`)\n .setParameters(conditions)\n .execute();\n }\n\n }\n\n protected async withQueryRunner<T extends any>(callback: (queryRunner: QueryRunner) => T | Promise<T>) {\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n try {\n return callback(queryRunner);\n } finally {\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n }\n }\n}\n"],"sourceRoot":".."}
package/package.json CHANGED
@@ -1 +1 @@
1
- { "name": "typeorm", "private": false, "version": "0.2.41-dev.c895680", "description": "Data-Mapper ORM for TypeScript, ES7, ES6, ES5. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, MongoDB databases.", "license": "MIT", "readmeFilename": "README.md", "author": { "name": "Umed Khudoiberdiev", "email": "pleerock.me@gmail.com" }, "main": "./index.js", "browser": { "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js", "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js", "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js", "./index.js": "./browser/index.js" }, "repository": { "type": "git", "url": "https://github.com/typeorm/typeorm.git" }, "bugs": { "url": "https://github.com/typeorm/typeorm/issues" }, "tags": [ "orm", "typescript", "typescript-orm", "mysql", "mysql-orm", "postgresql", "postgresql-orm", "mariadb", "mariadb-orm", "sqlite", "sqlite-orm", "sql-server", "sql-server-orm", "oracle", "oracle-orm" ], "devDependencies": { "@types/app-root-path": "^1.2.4", "@types/chai": "^4.2.15", "@types/chai-as-promised": "^7.1.3", "@types/debug": "^4.1.5", "@types/dotenv": "^8.2.0", "@types/js-yaml": "^4.0.0", "@types/mkdirp": "^1.0.1", "@types/mocha": "^8.2.1", "@types/node": "^14.14.31", "@types/rimraf": "^3.0.0", "@types/sha.js": "^2.4.0", "@types/sinon": "^9.0.10", "@types/source-map-support": "^0.5.3", "@types/xml2js": "^0.4.8", "@types/yargs": "^17.0.2", "@typescript-eslint/eslint-plugin": "^4.15.2", "@typescript-eslint/parser": "^4.15.2", "better-sqlite3": "^7.1.2", "chai": "^4.3.0", "chai-as-promised": "^7.1.1", "class-transformer": "^0.4.0", "conventional-changelog-angular": "^5.0.12", "conventional-changelog-cli": "^2.1.1", "del": "^6.0.0", "eslint": "^7.20.0", "gulp": "^4.0.2", "gulp-eslint": "^6.0.0", "gulp-istanbul": "^1.1.3", "gulp-mocha": "^8.0.0", "gulp-rename": "^2.0.0", "gulp-replace": "^1.0.0", "gulp-shell": "^0.8.0", "gulp-sourcemaps": "^3.0.0", "gulp-typescript": "^6.0.0-alpha.1", "gulpclass": "^0.2.0", "husky": "^5.1.1", "lint-staged": "^10.5.4", "mocha": "^8.3.0", "mongodb": "^3.6.4", "mssql": "^6.3.1", "mysql": "^2.18.1", "mysql2": "^2.2.5", "oracledb": "^5.1.0", "pg": "^8.5.1", "pg-query-stream": "^4.0.0", "redis": "^3.1.1", "remap-istanbul": "^0.13.0", "rimraf": "^3.0.2", "sinon": "^9.2.4", "sinon-chai": "^3.5.0", "source-map-support": "^0.5.19", "sql.js": "^1.4.0", "sqlite3": "^5.0.2", "ts-node": "^9.1.1", "typeorm-aurora-data-api-driver": "^2.0.0", "typescript": "^4.2.2" }, "peerDependencies": { "@sap/hana-client": "*", "better-sqlite3": "*", "hdb-pool": "*", "ioredis": "*", "mongodb": "^3.6.0", "mssql": "*", "mysql2": "*", "oracledb": "*", "pg": "*", "pg-native": "*", "pg-query-stream": "*", "redis": "*", "sql.js": "*", "sqlite3": "*", "typeorm-aurora-data-api-driver": "*" }, "peerDependenciesMeta": { "@sap/hana-client": { "optional": true }, "better-sqlite3": { "optional": true }, "hdb-pool": { "optional": true }, "ioredis": { "optional": true }, "mongodb": { "optional": true }, "mssql": { "optional": true }, "mysql2": { "optional": true }, "oracledb": { "optional": true }, "pg": { "optional": true }, "pg-native": { "optional": true }, "pg-query-stream": { "optional": true }, "redis": { "optional": true }, "sql.js": { "optional": true }, "sqlite3": { "optional": true }, "typeorm-aurora-data-api-driver": { "optional": true } }, "dependencies": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", "buffer": "^6.0.3", "chalk": "^4.1.0", "cli-highlight": "^2.1.11", "debug": "^4.3.1", "dotenv": "^8.2.0", "glob": "^7.1.6", "js-yaml": "^4.0.0", "mkdirp": "^1.0.4", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", "tslib": "^2.1.0", "xml2js": "^0.4.23", "yargs": "^17.0.1", "zen-observable-ts": "^1.0.0" }, "lint-staged": { "*.ts": [ "eslint --fix", "git add" ] }, "scripts": { "test": "rimraf ./build && tsc && mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "test-fast": "mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "compile": "rimraf ./build && tsc", "watch": "./node_modules/.bin/tsc -w", "package": "gulp package", "pack": "gulp pack", "lint": "eslint -c ./.eslintrc.js src/**/*.ts test/**/*.ts sample/**/*.ts", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 2" }, "bin": { "typeorm": "./cli.js" }, "funding": "https://opencollective.com/typeorm", "collective": { "type": "opencollective", "url": "https://opencollective.com/typeorm", "logo": "https://opencollective.com/opencollective/logo.txt" }, "nyc": { "all": true, "cache": false, "exclude": [ "**/*.d.ts" ], "extension": [ ".ts" ], "include": [ "build/compiled/src/**", "src/**" ], "reporter": "json" } }
1
+ { "name": "typeorm", "private": false, "version": "0.2.42-dev.1446e02", "description": "Data-Mapper ORM for TypeScript, ES7, ES6, ES5. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, MongoDB databases.", "license": "MIT", "readmeFilename": "README.md", "author": { "name": "Umed Khudoiberdiev", "email": "pleerock.me@gmail.com" }, "exports": { ".": { "import": "./index.mjs", "require": "./index.js" }, "./*": "./*" }, "main": "./index.js", "module": "./index.mjs", "types": "./index.d.ts", "type": "commonjs", "browser": { "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js", "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js", "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js", "./index.js": "./browser/index.js" }, "repository": { "type": "git", "url": "https://github.com/typeorm/typeorm.git" }, "bugs": { "url": "https://github.com/typeorm/typeorm/issues" }, "tags": [ "orm", "typescript", "typescript-orm", "mysql", "mysql-orm", "postgresql", "postgresql-orm", "mariadb", "mariadb-orm", "sqlite", "sqlite-orm", "sql-server", "sql-server-orm", "oracle", "oracle-orm" ], "devDependencies": { "@types/app-root-path": "^1.2.4", "@types/chai": "^4.2.15", "@types/chai-as-promised": "^7.1.3", "@types/debug": "^4.1.5", "@types/dotenv": "^8.2.0", "@types/js-yaml": "^4.0.0", "@types/mkdirp": "^1.0.1", "@types/mocha": "^8.2.1", "@types/node": "^14.14.31", "@types/rimraf": "^3.0.0", "@types/sha.js": "^2.4.0", "@types/sinon": "^9.0.10", "@types/source-map-support": "^0.5.3", "@types/xml2js": "^0.4.8", "@types/yargs": "^17.0.2", "@typescript-eslint/eslint-plugin": "^4.15.2", "@typescript-eslint/parser": "^4.15.2", "better-sqlite3": "^7.1.2", "chai": "^4.3.0", "chai-as-promised": "^7.1.1", "class-transformer": "^0.4.0", "conventional-changelog-angular": "^5.0.12", "conventional-changelog-cli": "^2.1.1", "del": "^6.0.0", "eslint": "^7.20.0", "gulp": "^4.0.2", "gulp-eslint": "^6.0.0", "gulp-istanbul": "^1.1.3", "gulp-mocha": "^8.0.0", "gulp-rename": "^2.0.0", "gulp-replace": "^1.0.0", "gulp-shell": "^0.8.0", "gulp-sourcemaps": "^3.0.0", "gulp-typescript": "^6.0.0-alpha.1", "gulpclass": "^0.2.0", "husky": "^5.1.1", "lint-staged": "^10.5.4", "mocha": "^8.3.0", "mongodb": "^3.6.4", "mssql": "^6.3.1", "mysql": "^2.18.1", "mysql2": "^2.2.5", "oracledb": "^5.1.0", "pg": "^8.5.1", "pg-query-stream": "^4.0.0", "redis": "^3.1.1", "remap-istanbul": "^0.13.0", "rimraf": "^3.0.2", "sinon": "^9.2.4", "sinon-chai": "^3.5.0", "source-map-support": "^0.5.19", "sql.js": "^1.4.0", "sqlite3": "^5.0.2", "ts-node": "^9.1.1", "typeorm-aurora-data-api-driver": "^2.0.0", "typescript": "^4.2.2" }, "peerDependencies": { "@sap/hana-client": "*", "better-sqlite3": "*", "hdb-pool": "*", "ioredis": "*", "mongodb": "^3.6.0", "mssql": "*", "mysql2": "*", "oracledb": "*", "pg": "*", "pg-native": "*", "pg-query-stream": "*", "redis": "*", "sql.js": "*", "sqlite3": "*", "typeorm-aurora-data-api-driver": "*" }, "peerDependenciesMeta": { "@sap/hana-client": { "optional": true }, "better-sqlite3": { "optional": true }, "hdb-pool": { "optional": true }, "ioredis": { "optional": true }, "mongodb": { "optional": true }, "mssql": { "optional": true }, "mysql2": { "optional": true }, "oracledb": { "optional": true }, "pg": { "optional": true }, "pg-native": { "optional": true }, "pg-query-stream": { "optional": true }, "redis": { "optional": true }, "sql.js": { "optional": true }, "sqlite3": { "optional": true }, "typeorm-aurora-data-api-driver": { "optional": true } }, "dependencies": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", "buffer": "^6.0.3", "chalk": "^4.1.0", "cli-highlight": "^2.1.11", "debug": "^4.3.1", "dotenv": "^8.2.0", "glob": "^7.1.6", "js-yaml": "^4.0.0", "mkdirp": "^1.0.4", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", "tslib": "^2.1.0", "xml2js": "^0.4.23", "yargs": "^17.0.1", "zen-observable-ts": "^1.0.0" }, "lint-staged": { "*.ts": [ "eslint --fix", "git add" ] }, "scripts": { "test": "rimraf ./build && tsc && mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "test-fast": "mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "compile": "rimraf ./build && tsc", "watch": "./node_modules/.bin/tsc -w", "package": "gulp package", "pack": "gulp pack", "lint": "eslint -c ./.eslintrc.js src/**/*.ts test/**/*.ts sample/**/*.ts", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 2" }, "bin": { "typeorm": "./cli.js" }, "funding": "https://opencollective.com/typeorm", "collective": { "type": "opencollective", "url": "https://opencollective.com/typeorm", "logo": "https://opencollective.com/opencollective/logo.txt" }, "nyc": { "all": true, "cache": false, "exclude": [ "**/*.d.ts" ], "extension": [ ".ts" ], "include": [ "build/compiled/src/**", "src/**" ], "reporter": "json" } }
@@ -854,10 +854,10 @@ var SubjectExecutor = /** @class */ (function () {
854
854
  if (this.updateSubjects.length)
855
855
  this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.updateSubjects);
856
856
  // update soft-removed entity properties
857
- if (this.updateSubjects.length)
857
+ if (this.softRemoveSubjects.length)
858
858
  this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.softRemoveSubjects);
859
859
  // update recovered entity properties
860
- if (this.updateSubjects.length)
860
+ if (this.recoverSubjects.length)
861
861
  this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.recoverSubjects);
862
862
  // remove ids from the entities that were removed
863
863
  if (this.removeSubjects.length) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../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 (ok, fail) => {\n for (const subject of nestedSetSubjects) {\n try {\n await updateSubject(subject);\n } catch (error) {\n fail(error);\n }\n }\n ok();\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":["../../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 (ok, fail) => {\n for (const subject of nestedSetSubjects) {\n try {\n await updateSubject(subject);\n } catch (error) {\n fail(error);\n }\n }\n ok();\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.softRemoveSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.softRemoveSubjects);\n\n // update recovered entity properties\n if (this.recoverSubjects.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":".."}
@@ -162,6 +162,9 @@ var OneToManySubjectBuilder = /** @class */ (function () {
162
162
  else if (relation.inverseRelation.orphanedRowAction === "delete") {
163
163
  removedRelatedEntitySubject.mustBeRemoved = true;
164
164
  }
165
+ else if (relation.inverseRelation.orphanedRowAction === "soft-delete") {
166
+ removedRelatedEntitySubject.canBeSoftRemoved = true;
167
+ }
165
168
  _this.subjects.push(removedRelatedEntitySubject);
166
169
  });
167
170
  };