typeorm 0.2.38-dev.d8f6037 → 0.2.39-dev.179ae75

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 (657) hide show
  1. package/README.md +60 -59
  2. package/browser/connection/ConnectionMetadataBuilder.js +4 -4
  3. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  4. package/browser/connection/ConnectionOptionsReader.js +2 -1
  5. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  6. package/browser/connection/options-reader/ConnectionOptionsYmlReader.js +1 -1
  7. package/browser/connection/options-reader/ConnectionOptionsYmlReader.js.map +1 -1
  8. package/browser/decorator/transaction/Transaction.js +3 -3
  9. package/browser/decorator/transaction/Transaction.js.map +1 -1
  10. package/browser/driver/DriverUtils.js +1 -1
  11. package/browser/driver/DriverUtils.js.map +1 -1
  12. package/browser/driver/aurora-data-api/AuroraDataApiConnectionOptions.d.ts +5 -0
  13. package/browser/driver/aurora-data-api/AuroraDataApiConnectionOptions.js.map +1 -1
  14. package/browser/driver/aurora-data-api/AuroraDataApiDriver.js +6 -5
  15. package/browser/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
  16. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +19 -48
  17. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  18. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresConnectionOptions.d.ts +5 -0
  19. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresConnectionOptions.js.map +1 -1
  20. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js +2 -1
  21. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js.map +1 -1
  22. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +17 -46
  23. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
  24. package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +5 -0
  25. package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
  26. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +4 -3
  27. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  28. package/browser/driver/cockroachdb/CockroachConnectionOptions.d.ts +10 -0
  29. package/browser/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
  30. package/browser/driver/cockroachdb/CockroachDriver.js +5 -4
  31. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  32. package/browser/driver/cockroachdb/CockroachQueryRunner.js +46 -77
  33. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  34. package/browser/driver/cordova/CordovaConnectionOptions.d.ts +5 -0
  35. package/browser/driver/cordova/CordovaConnectionOptions.js.map +1 -1
  36. package/browser/driver/cordova/CordovaDriver.js +2 -1
  37. package/browser/driver/cordova/CordovaDriver.js.map +1 -1
  38. package/browser/driver/expo/ExpoQueryRunner.js +12 -43
  39. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  40. package/browser/driver/mongodb/MongoConnectionOptions.d.ts +5 -0
  41. package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  42. package/browser/driver/mongodb/MongoDriver.js +2 -1
  43. package/browser/driver/mongodb/MongoDriver.js.map +1 -1
  44. package/browser/driver/mysql/MysqlConnectionOptions.d.ts +6 -0
  45. package/browser/driver/mysql/MysqlConnectionOptions.js.map +1 -1
  46. package/browser/driver/mysql/MysqlDriver.js +4 -2
  47. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  48. package/browser/driver/mysql/MysqlQueryRunner.js +24 -54
  49. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  50. package/browser/driver/nativescript/NativescriptQueryRunner.js +45 -37
  51. package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  52. package/browser/driver/oracle/OracleConnectionOptions.d.ts +5 -0
  53. package/browser/driver/oracle/OracleConnectionOptions.js.map +1 -1
  54. package/browser/driver/oracle/OracleDriver.js +5 -4
  55. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  56. package/browser/driver/oracle/OracleQueryRunner.js +20 -48
  57. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  58. package/browser/driver/postgres/PostgresConnectionOptions.d.ts +10 -0
  59. package/browser/driver/postgres/PostgresConnectionOptions.js.map +1 -1
  60. package/browser/driver/postgres/PostgresDriver.js +6 -5
  61. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  62. package/browser/driver/postgres/PostgresQueryRunner.js +21 -51
  63. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  64. package/browser/driver/react-native/ReactNativeConnectionOptions.d.ts +5 -0
  65. package/browser/driver/react-native/ReactNativeConnectionOptions.js.map +1 -1
  66. package/browser/driver/react-native/ReactNativeDriver.js +2 -1
  67. package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
  68. package/browser/driver/sap/SapConnectionOptions.d.ts +16 -6
  69. package/browser/driver/sap/SapConnectionOptions.js.map +1 -1
  70. package/browser/driver/sap/SapDriver.js +6 -3
  71. package/browser/driver/sap/SapDriver.js.map +1 -1
  72. package/browser/driver/sap/SapQueryRunner.js +20 -50
  73. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  74. package/browser/driver/sqlite/SqliteConnectionOptions.d.ts +5 -0
  75. package/browser/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
  76. package/browser/driver/sqlite/SqliteDriver.js +4 -3
  77. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  78. package/browser/driver/sqlite/SqliteQueryRunner.js +16 -8
  79. package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  80. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +19 -49
  81. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  82. package/browser/driver/sqljs/SqljsConnectionOptions.d.ts +5 -0
  83. package/browser/driver/sqljs/SqljsConnectionOptions.js.map +1 -1
  84. package/browser/driver/sqljs/SqljsDriver.js +4 -2
  85. package/browser/driver/sqljs/SqljsDriver.js.map +1 -1
  86. package/browser/driver/sqlserver/SqlServerConnectionOptions.d.ts +5 -0
  87. package/browser/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
  88. package/browser/driver/sqlserver/SqlServerDriver.js +7 -6
  89. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  90. package/browser/driver/sqlserver/SqlServerQueryRunner.js +84 -116
  91. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  92. package/browser/entity-manager/MongoEntityManager.js +8 -13
  93. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  94. package/browser/find-options/FindOptionsUtils.js +1 -1
  95. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  96. package/browser/metadata/ColumnMetadata.js +4 -4
  97. package/browser/metadata/ColumnMetadata.js.map +1 -1
  98. package/browser/metadata/EmbeddedMetadata.js +1 -1
  99. package/browser/metadata/EmbeddedMetadata.js.map +1 -1
  100. package/browser/metadata/EntityMetadata.js +1 -1
  101. package/browser/metadata/EntityMetadata.js.map +1 -1
  102. package/browser/metadata/RelationMetadata.js +4 -4
  103. package/browser/metadata/RelationMetadata.js.map +1 -1
  104. package/browser/metadata-builder/EntityMetadataBuilder.js +5 -5
  105. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  106. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +1 -1
  107. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  108. package/browser/naming-strategy/DefaultNamingStrategy.js +5 -5
  109. package/browser/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  110. package/browser/persistence/Subject.js +1 -1
  111. package/browser/persistence/Subject.js.map +1 -1
  112. package/browser/persistence/SubjectDatabaseEntityLoader.js +1 -1
  113. package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  114. package/browser/persistence/SubjectExecutor.js +1 -1
  115. package/browser/persistence/SubjectExecutor.js.map +1 -1
  116. package/browser/persistence/SubjectTopoligicalSorter.js +5 -5
  117. package/browser/persistence/SubjectTopoligicalSorter.js.map +1 -1
  118. package/browser/persistence/tree/ClosureSubjectExecutor.js +4 -4
  119. package/browser/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  120. package/browser/query-builder/DeleteQueryBuilder.js +3 -10
  121. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  122. package/browser/query-builder/InsertQueryBuilder.js +4 -6
  123. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  124. package/browser/query-builder/QueryBuilder.js +9 -9
  125. package/browser/query-builder/QueryBuilder.js.map +1 -1
  126. package/browser/query-builder/RelationLoader.js +2 -2
  127. package/browser/query-builder/RelationLoader.js.map +1 -1
  128. package/browser/query-builder/RelationRemover.js +6 -6
  129. package/browser/query-builder/RelationRemover.js.map +1 -1
  130. package/browser/query-builder/SelectQueryBuilder.js +14 -14
  131. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  132. package/browser/query-builder/SoftDeleteQueryBuilder.js +3 -10
  133. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  134. package/browser/query-builder/UpdateQueryBuilder.js +5 -12
  135. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  136. package/browser/query-builder/relation-id/RelationIdLoader.js +1 -1
  137. package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  138. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +2 -2
  139. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  140. package/browser/query-runner/BaseQueryRunner.js +2 -2
  141. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  142. package/browser/query-runner/QueryLock.js +1 -1
  143. package/browser/query-runner/QueryLock.js.map +1 -1
  144. package/browser/repository/BaseEntity.js +1 -1
  145. package/browser/repository/BaseEntity.js.map +1 -1
  146. package/browser/repository/Repository.js +1 -1
  147. package/browser/repository/Repository.js.map +1 -1
  148. package/browser/repository/TreeRepository.js +2 -2
  149. package/browser/repository/TreeRepository.js.map +1 -1
  150. package/browser/schema-builder/table/TableCheck.js +1 -1
  151. package/browser/schema-builder/table/TableCheck.js.map +1 -1
  152. package/browser/schema-builder/table/TableForeignKey.js +2 -2
  153. package/browser/schema-builder/table/TableForeignKey.js.map +1 -1
  154. package/browser/schema-builder/table/TableIndex.js +1 -1
  155. package/browser/schema-builder/table/TableIndex.js.map +1 -1
  156. package/browser/schema-builder/table/TableUnique.js +1 -1
  157. package/browser/schema-builder/table/TableUnique.js.map +1 -1
  158. package/browser/subscriber/Broadcaster.d.ts +23 -2
  159. package/browser/subscriber/Broadcaster.js +35 -2
  160. package/browser/subscriber/Broadcaster.js.map +1 -1
  161. package/browser/subscriber/BroadcasterResult.d.ts +4 -0
  162. package/browser/subscriber/BroadcasterResult.js +19 -0
  163. package/browser/subscriber/BroadcasterResult.js.map +1 -1
  164. package/cache/DbQueryResultCache.js +12 -12
  165. package/cache/RedisQueryResultCache.js +12 -12
  166. package/cli.js +1 -6
  167. package/cli.js.map +1 -1
  168. package/commands/CacheClearCommand.js +4 -4
  169. package/commands/CacheClearCommand.js.map +1 -1
  170. package/commands/CommandUtils.js +10 -10
  171. package/commands/CommandUtils.js.map +1 -1
  172. package/commands/EntityCreateCommand.js +3 -3
  173. package/commands/EntityCreateCommand.js.map +1 -1
  174. package/commands/InitCommand.js +5 -5
  175. package/commands/InitCommand.js.map +1 -1
  176. package/commands/MigrationCreateCommand.js +5 -5
  177. package/commands/MigrationCreateCommand.js.map +1 -1
  178. package/commands/MigrationGenerateCommand.js +7 -7
  179. package/commands/MigrationGenerateCommand.js.map +1 -1
  180. package/commands/MigrationRevertCommand.js +4 -4
  181. package/commands/MigrationRevertCommand.js.map +1 -1
  182. package/commands/MigrationRunCommand.js +5 -5
  183. package/commands/MigrationRunCommand.js.map +1 -1
  184. package/commands/MigrationShowCommand.js +5 -5
  185. package/commands/MigrationShowCommand.js.map +1 -1
  186. package/commands/QueryCommand.js +4 -4
  187. package/commands/QueryCommand.js.map +1 -1
  188. package/commands/SchemaDropCommand.js +4 -4
  189. package/commands/SchemaDropCommand.js.map +1 -1
  190. package/commands/SchemaLogCommand.js +5 -5
  191. package/commands/SchemaLogCommand.js.map +1 -1
  192. package/commands/SchemaSyncCommand.js +4 -4
  193. package/commands/SchemaSyncCommand.js.map +1 -1
  194. package/commands/SubscriberCreateCommand.js +3 -3
  195. package/commands/SubscriberCreateCommand.js.map +1 -1
  196. package/commands/VersionCommand.js +3 -3
  197. package/commands/VersionCommand.js.map +1 -1
  198. package/connection/Connection.js +19 -19
  199. package/connection/Connection.js.map +1 -1
  200. package/connection/ConnectionMetadataBuilder.js +11 -11
  201. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  202. package/connection/ConnectionOptionsReader.js +11 -10
  203. package/connection/ConnectionOptionsReader.js.map +1 -1
  204. package/connection/options-reader/ConnectionOptionsEnvReader.js +2 -2
  205. package/connection/options-reader/ConnectionOptionsXmlReader.js +3 -3
  206. package/connection/options-reader/ConnectionOptionsXmlReader.js.map +1 -1
  207. package/connection/options-reader/ConnectionOptionsYmlReader.js +4 -4
  208. package/connection/options-reader/ConnectionOptionsYmlReader.js.map +1 -1
  209. package/decorator/Check.js +1 -1
  210. package/decorator/Check.js.map +1 -1
  211. package/decorator/EntityRepository.js +1 -1
  212. package/decorator/EntityRepository.js.map +1 -1
  213. package/decorator/Exclusion.js +1 -1
  214. package/decorator/Exclusion.js.map +1 -1
  215. package/decorator/Generated.js +1 -1
  216. package/decorator/Generated.js.map +1 -1
  217. package/decorator/Index.js +1 -1
  218. package/decorator/Index.js.map +1 -1
  219. package/decorator/Unique.js +1 -1
  220. package/decorator/Unique.js.map +1 -1
  221. package/decorator/columns/Column.js +4 -4
  222. package/decorator/columns/Column.js.map +1 -1
  223. package/decorator/columns/CreateDateColumn.js +1 -1
  224. package/decorator/columns/CreateDateColumn.js.map +1 -1
  225. package/decorator/columns/DeleteDateColumn.js +1 -1
  226. package/decorator/columns/DeleteDateColumn.js.map +1 -1
  227. package/decorator/columns/ObjectIdColumn.js +1 -1
  228. package/decorator/columns/ObjectIdColumn.js.map +1 -1
  229. package/decorator/columns/PrimaryColumn.js +2 -2
  230. package/decorator/columns/PrimaryColumn.js.map +1 -1
  231. package/decorator/columns/PrimaryGeneratedColumn.js +2 -2
  232. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  233. package/decorator/columns/UpdateDateColumn.js +1 -1
  234. package/decorator/columns/UpdateDateColumn.js.map +1 -1
  235. package/decorator/columns/VersionColumn.js +1 -1
  236. package/decorator/columns/VersionColumn.js.map +1 -1
  237. package/decorator/columns/ViewColumn.js +1 -1
  238. package/decorator/columns/ViewColumn.js.map +1 -1
  239. package/decorator/entity/ChildEntity.js +2 -2
  240. package/decorator/entity/ChildEntity.js.map +1 -1
  241. package/decorator/entity/Entity.js +1 -1
  242. package/decorator/entity/Entity.js.map +1 -1
  243. package/decorator/entity/TableInheritance.js +1 -1
  244. package/decorator/entity/TableInheritance.js.map +1 -1
  245. package/decorator/entity-view/ViewEntity.js +1 -1
  246. package/decorator/entity-view/ViewEntity.js.map +1 -1
  247. package/decorator/listeners/AfterInsert.js +1 -1
  248. package/decorator/listeners/AfterInsert.js.map +1 -1
  249. package/decorator/listeners/AfterLoad.js +1 -1
  250. package/decorator/listeners/AfterLoad.js.map +1 -1
  251. package/decorator/listeners/AfterRemove.js +1 -1
  252. package/decorator/listeners/AfterRemove.js.map +1 -1
  253. package/decorator/listeners/AfterUpdate.js +1 -1
  254. package/decorator/listeners/AfterUpdate.js.map +1 -1
  255. package/decorator/listeners/BeforeInsert.js +1 -1
  256. package/decorator/listeners/BeforeInsert.js.map +1 -1
  257. package/decorator/listeners/BeforeRemove.js +1 -1
  258. package/decorator/listeners/BeforeRemove.js.map +1 -1
  259. package/decorator/listeners/BeforeUpdate.js +1 -1
  260. package/decorator/listeners/BeforeUpdate.js.map +1 -1
  261. package/decorator/listeners/EventSubscriber.js +1 -1
  262. package/decorator/listeners/EventSubscriber.js.map +1 -1
  263. package/decorator/relations/JoinColumn.js +1 -1
  264. package/decorator/relations/JoinColumn.js.map +1 -1
  265. package/decorator/relations/JoinTable.js +1 -1
  266. package/decorator/relations/JoinTable.js.map +1 -1
  267. package/decorator/relations/ManyToMany.js +1 -1
  268. package/decorator/relations/ManyToMany.js.map +1 -1
  269. package/decorator/relations/ManyToOne.js +1 -1
  270. package/decorator/relations/ManyToOne.js.map +1 -1
  271. package/decorator/relations/OneToMany.js +1 -1
  272. package/decorator/relations/OneToMany.js.map +1 -1
  273. package/decorator/relations/OneToOne.js +1 -1
  274. package/decorator/relations/OneToOne.js.map +1 -1
  275. package/decorator/relations/RelationCount.js +1 -1
  276. package/decorator/relations/RelationCount.js.map +1 -1
  277. package/decorator/relations/RelationId.js +1 -1
  278. package/decorator/relations/RelationId.js.map +1 -1
  279. package/decorator/transaction/Transaction.js +7 -7
  280. package/decorator/transaction/Transaction.js.map +1 -1
  281. package/decorator/transaction/TransactionManager.js +1 -1
  282. package/decorator/transaction/TransactionManager.js.map +1 -1
  283. package/decorator/transaction/TransactionRepository.js +1 -1
  284. package/decorator/transaction/TransactionRepository.js.map +1 -1
  285. package/decorator/tree/Tree.js +1 -1
  286. package/decorator/tree/Tree.js.map +1 -1
  287. package/decorator/tree/TreeChildren.js +1 -1
  288. package/decorator/tree/TreeChildren.js.map +1 -1
  289. package/decorator/tree/TreeLevelColumn.js +1 -1
  290. package/decorator/tree/TreeLevelColumn.js.map +1 -1
  291. package/decorator/tree/TreeParent.js +1 -1
  292. package/decorator/tree/TreeParent.js.map +1 -1
  293. package/driver/DriverUtils.js +9 -9
  294. package/driver/DriverUtils.js.map +1 -1
  295. package/driver/aurora-data-api/AuroraDataApiConnection.js +1 -1
  296. package/driver/aurora-data-api/AuroraDataApiConnection.js.map +1 -1
  297. package/driver/aurora-data-api/AuroraDataApiConnectionOptions.d.ts +5 -0
  298. package/driver/aurora-data-api/AuroraDataApiConnectionOptions.js.map +1 -1
  299. package/driver/aurora-data-api/AuroraDataApiDriver.js +12 -11
  300. package/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
  301. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +146 -175
  302. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  303. package/driver/aurora-data-api-pg/AuroraDataApiPostgresConnectionOptions.d.ts +5 -0
  304. package/driver/aurora-data-api-pg/AuroraDataApiPostgresConnectionOptions.js.map +1 -1
  305. package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js +10 -9
  306. package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js.map +1 -1
  307. package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +29 -58
  308. package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
  309. package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +5 -0
  310. package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
  311. package/driver/better-sqlite3/BetterSqlite3Driver.js +12 -11
  312. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  313. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +5 -5
  314. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  315. package/driver/capacitor/CapacitorDriver.js +7 -7
  316. package/driver/capacitor/CapacitorDriver.js.map +1 -1
  317. package/driver/capacitor/CapacitorQueryRunner.js +5 -5
  318. package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  319. package/driver/cockroachdb/CockroachConnectionOptions.d.ts +10 -0
  320. package/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
  321. package/driver/cockroachdb/CockroachDriver.js +15 -14
  322. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  323. package/driver/cockroachdb/CockroachQueryRunner.js +180 -211
  324. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  325. package/driver/cordova/CordovaConnectionOptions.d.ts +5 -0
  326. package/driver/cordova/CordovaConnectionOptions.js.map +1 -1
  327. package/driver/cordova/CordovaDriver.js +5 -4
  328. package/driver/cordova/CordovaDriver.js.map +1 -1
  329. package/driver/cordova/CordovaQueryRunner.js +13 -13
  330. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  331. package/driver/expo/ExpoDriver.js +3 -3
  332. package/driver/expo/ExpoDriver.js.map +1 -1
  333. package/driver/expo/ExpoQueryRunner.js +23 -54
  334. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  335. package/driver/mongodb/MongoConnectionOptions.d.ts +5 -0
  336. package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  337. package/driver/mongodb/MongoDriver.js +4 -3
  338. package/driver/mongodb/MongoDriver.js.map +1 -1
  339. package/driver/mongodb/MongoQueryRunner.js +178 -178
  340. package/driver/mysql/MysqlConnectionOptions.d.ts +6 -0
  341. package/driver/mysql/MysqlConnectionOptions.js.map +1 -1
  342. package/driver/mysql/MysqlDriver.js +9 -7
  343. package/driver/mysql/MysqlDriver.js.map +1 -1
  344. package/driver/mysql/MysqlQueryRunner.js +152 -182
  345. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  346. package/driver/nativescript/NativescriptDriver.js +3 -3
  347. package/driver/nativescript/NativescriptDriver.js.map +1 -1
  348. package/driver/nativescript/NativescriptQueryRunner.js +48 -40
  349. package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  350. package/driver/oracle/OracleConnectionOptions.d.ts +5 -0
  351. package/driver/oracle/OracleConnectionOptions.js.map +1 -1
  352. package/driver/oracle/OracleDriver.js +13 -12
  353. package/driver/oracle/OracleDriver.js.map +1 -1
  354. package/driver/oracle/OracleQueryRunner.js +143 -171
  355. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  356. package/driver/postgres/PostgresConnectionOptions.d.ts +10 -0
  357. package/driver/postgres/PostgresConnectionOptions.js.map +1 -1
  358. package/driver/postgres/PostgresDriver.js +24 -23
  359. package/driver/postgres/PostgresDriver.js.map +1 -1
  360. package/driver/postgres/PostgresQueryRunner.js +169 -199
  361. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  362. package/driver/react-native/ReactNativeConnectionOptions.d.ts +5 -0
  363. package/driver/react-native/ReactNativeConnectionOptions.js.map +1 -1
  364. package/driver/react-native/ReactNativeDriver.js +5 -4
  365. package/driver/react-native/ReactNativeDriver.js.map +1 -1
  366. package/driver/react-native/ReactNativeQueryRunner.js +3 -3
  367. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  368. package/driver/sap/SapConnectionOptions.d.ts +16 -6
  369. package/driver/sap/SapConnectionOptions.js.map +1 -1
  370. package/driver/sap/SapDriver.js +11 -8
  371. package/driver/sap/SapDriver.js.map +1 -1
  372. package/driver/sap/SapQueryRunner.js +153 -183
  373. package/driver/sap/SapQueryRunner.js.map +1 -1
  374. package/driver/sqlite/SqliteConnectionOptions.d.ts +5 -0
  375. package/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
  376. package/driver/sqlite/SqliteDriver.js +12 -11
  377. package/driver/sqlite/SqliteDriver.js.map +1 -1
  378. package/driver/sqlite/SqliteQueryRunner.js +21 -13
  379. package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  380. package/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -4
  381. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +138 -168
  382. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  383. package/driver/sqljs/SqljsConnectionOptions.d.ts +5 -0
  384. package/driver/sqljs/SqljsConnectionOptions.js.map +1 -1
  385. package/driver/sqljs/SqljsDriver.js +17 -15
  386. package/driver/sqljs/SqljsDriver.js.map +1 -1
  387. package/driver/sqljs/SqljsQueryRunner.js +9 -9
  388. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  389. package/driver/sqlserver/SqlServerConnectionOptions.d.ts +5 -0
  390. package/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
  391. package/driver/sqlserver/SqlServerDriver.js +13 -12
  392. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  393. package/driver/sqlserver/SqlServerQueryRunner.js +220 -252
  394. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  395. package/entity-manager/EntityManager.js +30 -30
  396. package/entity-manager/EntityManager.js.map +1 -1
  397. package/entity-manager/MongoEntityManager.js +23 -28
  398. package/entity-manager/MongoEntityManager.js.map +1 -1
  399. package/entity-manager/SqljsEntityManager.js +5 -5
  400. package/entity-manager/SqljsEntityManager.js.map +1 -1
  401. package/entity-schema/EntitySchemaTransformer.js +1 -1
  402. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  403. package/error/AlreadyHasActiveConnectionError.js +1 -1
  404. package/error/AlreadyHasActiveConnectionError.js.map +1 -1
  405. package/error/CannotAttachTreeChildrenEntityError.js +1 -1
  406. package/error/CannotAttachTreeChildrenEntityError.js.map +1 -1
  407. package/error/CannotConnectAlreadyConnectedError.js +1 -1
  408. package/error/CannotConnectAlreadyConnectedError.js.map +1 -1
  409. package/error/CannotCreateEntityIdMapError.js +1 -1
  410. package/error/CannotCreateEntityIdMapError.js.map +1 -1
  411. package/error/CannotDetermineEntityError.js +1 -1
  412. package/error/CannotDetermineEntityError.js.map +1 -1
  413. package/error/CannotExecuteNotConnectedError.js +1 -1
  414. package/error/CannotExecuteNotConnectedError.js.map +1 -1
  415. package/error/CannotGetEntityManagerNotConnectedError.js +1 -1
  416. package/error/CannotGetEntityManagerNotConnectedError.js.map +1 -1
  417. package/error/CannotReflectMethodParameterTypeError.js +1 -1
  418. package/error/CannotReflectMethodParameterTypeError.js.map +1 -1
  419. package/error/CircularRelationsError.js +1 -1
  420. package/error/CircularRelationsError.js.map +1 -1
  421. package/error/ColumnTypeUndefinedError.js +1 -1
  422. package/error/ColumnTypeUndefinedError.js.map +1 -1
  423. package/error/ConnectionIsNotSetError.js +1 -1
  424. package/error/ConnectionIsNotSetError.js.map +1 -1
  425. package/error/ConnectionNotFoundError.js +1 -1
  426. package/error/ConnectionNotFoundError.js.map +1 -1
  427. package/error/CustomRepositoryCannotInheritRepositoryError.js +1 -1
  428. package/error/CustomRepositoryCannotInheritRepositoryError.js.map +1 -1
  429. package/error/CustomRepositoryDoesNotHaveEntityError.js +1 -1
  430. package/error/CustomRepositoryDoesNotHaveEntityError.js.map +1 -1
  431. package/error/CustomRepositoryNotFoundError.js +1 -1
  432. package/error/CustomRepositoryNotFoundError.js.map +1 -1
  433. package/error/DataTypeNotSupportedError.js +1 -1
  434. package/error/DataTypeNotSupportedError.js.map +1 -1
  435. package/error/DriverOptionNotSetError.js +1 -1
  436. package/error/DriverOptionNotSetError.js.map +1 -1
  437. package/error/DriverPackageNotInstalledError.js +1 -1
  438. package/error/DriverPackageNotInstalledError.js.map +1 -1
  439. package/error/EntityColumnNotFound.js +1 -1
  440. package/error/EntityColumnNotFound.js.map +1 -1
  441. package/error/EntityMetadataNotFoundError.js +1 -1
  442. package/error/EntityMetadataNotFoundError.js.map +1 -1
  443. package/error/EntityNotFoundError.js +1 -1
  444. package/error/EntityNotFoundError.js.map +1 -1
  445. package/error/FindRelationsNotFoundError.js +1 -1
  446. package/error/FindRelationsNotFoundError.js.map +1 -1
  447. package/error/InitializedRelationError.js +1 -1
  448. package/error/InitializedRelationError.js.map +1 -1
  449. package/error/InsertValuesMissingError.js +1 -1
  450. package/error/InsertValuesMissingError.js.map +1 -1
  451. package/error/LimitOnUpdateNotSupportedError.js +1 -1
  452. package/error/LimitOnUpdateNotSupportedError.js.map +1 -1
  453. package/error/LockNotSupportedOnGivenDriverError.js +1 -1
  454. package/error/LockNotSupportedOnGivenDriverError.js.map +1 -1
  455. package/error/MetadataAlreadyExistsError.js +1 -1
  456. package/error/MetadataAlreadyExistsError.js.map +1 -1
  457. package/error/MetadataWithSuchNameAlreadyExistsError.js +1 -1
  458. package/error/MetadataWithSuchNameAlreadyExistsError.js.map +1 -1
  459. package/error/MissingDeleteDateColumnError.js +1 -1
  460. package/error/MissingDeleteDateColumnError.js.map +1 -1
  461. package/error/MissingDriverError.js +1 -1
  462. package/error/MissingDriverError.js.map +1 -1
  463. package/error/MissingJoinColumnError.js +1 -1
  464. package/error/MissingJoinColumnError.js.map +1 -1
  465. package/error/MissingJoinTableError.js +1 -1
  466. package/error/MissingJoinTableError.js.map +1 -1
  467. package/error/MissingPrimaryColumnError.js +1 -1
  468. package/error/MissingPrimaryColumnError.js.map +1 -1
  469. package/error/MustBeEntityError.js +1 -1
  470. package/error/MustBeEntityError.js.map +1 -1
  471. package/error/NamingStrategyNotFoundError.js +1 -1
  472. package/error/NamingStrategyNotFoundError.js.map +1 -1
  473. package/error/NestedSetMultipleRootError.js +1 -1
  474. package/error/NestedSetMultipleRootError.js.map +1 -1
  475. package/error/NoConnectionForRepositoryError.js +1 -1
  476. package/error/NoConnectionForRepositoryError.js.map +1 -1
  477. package/error/NoConnectionOptionError.js +1 -1
  478. package/error/NoConnectionOptionError.js.map +1 -1
  479. package/error/NoNeedToReleaseEntityManagerError.js +1 -1
  480. package/error/NoNeedToReleaseEntityManagerError.js.map +1 -1
  481. package/error/NoVersionOrUpdateDateColumnError.js +1 -1
  482. package/error/NoVersionOrUpdateDateColumnError.js.map +1 -1
  483. package/error/OffsetWithoutLimitNotSupportedError.js +1 -1
  484. package/error/OffsetWithoutLimitNotSupportedError.js.map +1 -1
  485. package/error/OptimisticLockCanNotBeUsedError.js +1 -1
  486. package/error/OptimisticLockCanNotBeUsedError.js.map +1 -1
  487. package/error/OptimisticLockVersionMismatchError.js +1 -1
  488. package/error/OptimisticLockVersionMismatchError.js.map +1 -1
  489. package/error/PersistedEntityNotFoundError.js +1 -1
  490. package/error/PersistedEntityNotFoundError.js.map +1 -1
  491. package/error/PessimisticLockTransactionRequiredError.js +1 -1
  492. package/error/PessimisticLockTransactionRequiredError.js.map +1 -1
  493. package/error/PrimaryColumnCannotBeNullableError.js +1 -1
  494. package/error/PrimaryColumnCannotBeNullableError.js.map +1 -1
  495. package/error/QueryFailedError.js +3 -3
  496. package/error/QueryFailedError.js.map +1 -1
  497. package/error/QueryRunnerAlreadyReleasedError.js +1 -1
  498. package/error/QueryRunnerAlreadyReleasedError.js.map +1 -1
  499. package/error/QueryRunnerProviderAlreadyReleasedError.js +1 -1
  500. package/error/QueryRunnerProviderAlreadyReleasedError.js.map +1 -1
  501. package/error/RepositoryNotFoundError.js +1 -1
  502. package/error/RepositoryNotFoundError.js.map +1 -1
  503. package/error/RepositoryNotTreeError.js +1 -1
  504. package/error/RepositoryNotTreeError.js.map +1 -1
  505. package/error/ReturningStatementNotSupportedError.js +1 -1
  506. package/error/ReturningStatementNotSupportedError.js.map +1 -1
  507. package/error/SubjectRemovedAndUpdatedError.js +1 -1
  508. package/error/SubjectRemovedAndUpdatedError.js.map +1 -1
  509. package/error/SubjectWithoutIdentifierError.js +1 -1
  510. package/error/SubjectWithoutIdentifierError.js.map +1 -1
  511. package/error/TransactionAlreadyStartedError.js +1 -1
  512. package/error/TransactionAlreadyStartedError.js.map +1 -1
  513. package/error/TransactionNotStartedError.js +1 -1
  514. package/error/TransactionNotStartedError.js.map +1 -1
  515. package/error/TreeRepositoryNotSupportedError.js +1 -1
  516. package/error/TreeRepositoryNotSupportedError.js.map +1 -1
  517. package/error/TypeORMError.js +1 -1
  518. package/error/TypeORMError.js.map +1 -1
  519. package/error/UpdateValuesMissingError.js +1 -1
  520. package/error/UpdateValuesMissingError.js.map +1 -1
  521. package/error/UsingJoinColumnIsNotAllowedError.js +1 -1
  522. package/error/UsingJoinColumnIsNotAllowedError.js.map +1 -1
  523. package/error/UsingJoinColumnOnlyOnOneSideAllowedError.js +1 -1
  524. package/error/UsingJoinColumnOnlyOnOneSideAllowedError.js.map +1 -1
  525. package/error/UsingJoinTableIsNotAllowedError.js +1 -1
  526. package/error/UsingJoinTableIsNotAllowedError.js.map +1 -1
  527. package/error/UsingJoinTableOnlyOnOneSideAllowedError.js +1 -1
  528. package/error/UsingJoinTableOnlyOnOneSideAllowedError.js.map +1 -1
  529. package/error/index.js +62 -62
  530. package/error/index.js.map +1 -1
  531. package/find-options/FindOptionsUtils.js +4 -4
  532. package/find-options/FindOptionsUtils.js.map +1 -1
  533. package/globals.js +7 -7
  534. package/globals.js.map +1 -1
  535. package/index.js +102 -102
  536. package/index.js.map +1 -1
  537. package/logger/DebugLogger.js +9 -9
  538. package/logger/DebugLogger.js.map +1 -1
  539. package/logger/FileLogger.js +1 -1
  540. package/logger/FileLogger.js.map +1 -1
  541. package/metadata/ColumnMetadata.js +4 -4
  542. package/metadata/ColumnMetadata.js.map +1 -1
  543. package/metadata/EmbeddedMetadata.js +1 -1
  544. package/metadata/EmbeddedMetadata.js.map +1 -1
  545. package/metadata/EntityMetadata.js +2 -2
  546. package/metadata/EntityMetadata.js.map +1 -1
  547. package/metadata/RelationMetadata.js +4 -4
  548. package/metadata/RelationMetadata.js.map +1 -1
  549. package/metadata-builder/EntityMetadataBuilder.js +5 -5
  550. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  551. package/metadata-builder/JunctionEntityMetadataBuilder.js +1 -1
  552. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  553. package/migration/MigrationExecutor.js +33 -33
  554. package/migration/MigrationExecutor.js.map +1 -1
  555. package/naming-strategy/DefaultNamingStrategy.js +10 -10
  556. package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  557. package/package.json +1 -1
  558. package/persistence/EntityPersistExecutor.js +5 -5
  559. package/persistence/EntityPersistExecutor.js.map +1 -1
  560. package/persistence/Subject.js +1 -1
  561. package/persistence/Subject.js.map +1 -1
  562. package/persistence/SubjectDatabaseEntityLoader.js +6 -6
  563. package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  564. package/persistence/SubjectExecutor.js +31 -31
  565. package/persistence/SubjectExecutor.js.map +1 -1
  566. package/persistence/SubjectTopoligicalSorter.js +5 -5
  567. package/persistence/SubjectTopoligicalSorter.js.map +1 -1
  568. package/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
  569. package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  570. package/persistence/tree/ClosureSubjectExecutor.js +13 -13
  571. package/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  572. package/persistence/tree/MaterializedPathSubjectExecutor.js +5 -5
  573. package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  574. package/persistence/tree/NestedSetSubjectExecutor.js +14 -14
  575. package/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
  576. package/platform/PlatformTools.js +8 -8
  577. package/platform/PlatformTools.js.map +1 -1
  578. package/query-builder/DeleteQueryBuilder.js +7 -14
  579. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  580. package/query-builder/InsertQueryBuilder.js +9 -11
  581. package/query-builder/InsertQueryBuilder.js.map +1 -1
  582. package/query-builder/JoinAttribute.js +1 -1
  583. package/query-builder/JoinAttribute.js.map +1 -1
  584. package/query-builder/QueryBuilder.js +37 -37
  585. package/query-builder/QueryBuilder.js.map +1 -1
  586. package/query-builder/QueryBuilderUtils.js +1 -1
  587. package/query-builder/QueryBuilderUtils.js.map +1 -1
  588. package/query-builder/QueryExpressionMap.js +3 -3
  589. package/query-builder/QueryExpressionMap.js.map +1 -1
  590. package/query-builder/RelationLoader.js +2 -2
  591. package/query-builder/RelationLoader.js.map +1 -1
  592. package/query-builder/RelationQueryBuilder.js +13 -13
  593. package/query-builder/RelationQueryBuilder.js.map +1 -1
  594. package/query-builder/RelationRemover.js +12 -12
  595. package/query-builder/RelationRemover.js.map +1 -1
  596. package/query-builder/RelationUpdater.js +2 -2
  597. package/query-builder/ReturningResultsEntityUpdator.js +6 -6
  598. package/query-builder/SelectQueryBuilder.js +43 -43
  599. package/query-builder/SelectQueryBuilder.js.map +1 -1
  600. package/query-builder/SoftDeleteQueryBuilder.js +7 -14
  601. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  602. package/query-builder/UpdateQueryBuilder.js +10 -17
  603. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  604. package/query-builder/relation-count/RelationCountAttribute.js +2 -2
  605. package/query-builder/relation-count/RelationCountAttribute.js.map +1 -1
  606. package/query-builder/relation-count/RelationCountLoader.js +4 -4
  607. package/query-builder/relation-id/RelationIdAttribute.js +1 -1
  608. package/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
  609. package/query-builder/relation-id/RelationIdLoader.js +5 -5
  610. package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  611. package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js +3 -3
  612. package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
  613. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +2 -2
  614. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  615. package/query-runner/BaseQueryRunner.js +25 -25
  616. package/query-runner/BaseQueryRunner.js.map +1 -1
  617. package/query-runner/QueryLock.js +3 -3
  618. package/query-runner/QueryLock.js.map +1 -1
  619. package/repository/AbstractRepository.js +1 -1
  620. package/repository/AbstractRepository.js.map +1 -1
  621. package/repository/BaseEntity.js +4 -4
  622. package/repository/BaseEntity.js.map +1 -1
  623. package/repository/MongoRepository.js +1 -1
  624. package/repository/MongoRepository.js.map +1 -1
  625. package/repository/Repository.js +1 -1
  626. package/repository/Repository.js.map +1 -1
  627. package/repository/TreeRepository.js +7 -7
  628. package/repository/TreeRepository.js.map +1 -1
  629. package/schema-builder/MongoSchemaBuilder.js +2 -2
  630. package/schema-builder/RdbmsSchemaBuilder.js +95 -95
  631. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  632. package/schema-builder/table/Table.js +1 -1
  633. package/schema-builder/table/Table.js.map +1 -1
  634. package/schema-builder/table/TableCheck.js +1 -1
  635. package/schema-builder/table/TableCheck.js.map +1 -1
  636. package/schema-builder/table/TableForeignKey.js +2 -2
  637. package/schema-builder/table/TableForeignKey.js.map +1 -1
  638. package/schema-builder/table/TableIndex.js +1 -1
  639. package/schema-builder/table/TableIndex.js.map +1 -1
  640. package/schema-builder/table/TableUnique.js +1 -1
  641. package/schema-builder/table/TableUnique.js.map +1 -1
  642. package/subscriber/Broadcaster.d.ts +23 -2
  643. package/subscriber/Broadcaster.js +35 -2
  644. package/subscriber/Broadcaster.js.map +1 -1
  645. package/subscriber/BroadcasterResult.d.ts +4 -0
  646. package/subscriber/BroadcasterResult.js +19 -0
  647. package/subscriber/BroadcasterResult.js.map +1 -1
  648. package/util/DateUtils.js +1 -1
  649. package/util/DateUtils.js.map +1 -1
  650. package/util/DirectoryExportedClassesLoader.js +1 -1
  651. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  652. package/util/ObjectUtils.js +2 -2
  653. package/util/ObjectUtils.js.map +1 -1
  654. package/util/OrmUtils.js +2 -2
  655. package/util/OrmUtils.js.map +1 -1
  656. package/util/StringUtils.js +2 -2
  657. package/util/StringUtils.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/RelationLoader.ts"],"names":[],"mappings":"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","file":"RelationLoader.js","sourcesContent":["import {Connection} from \"../connection/Connection\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\n\n/**\n * Wraps entities and creates getters/setters for their relations\n * to be able to lazily load relations when accessing these relations.\n */\nexport class RelationLoader {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private connection: Connection) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation data for the given entity and its relation.\n */\n load(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any[]> { // todo: check all places where it uses non array\n if (queryRunner && queryRunner.isReleased) queryRunner = undefined; // get new one if already closed\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadManyToOneOrOneToOneOwner(relation, entityOrEntities, queryRunner);\n\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadOneToManyOrOneToOneNotOwner(relation, entityOrEntities, queryRunner);\n\n } else if (relation.isManyToManyOwner) {\n return this.loadManyToManyOwner(relation, entityOrEntities, queryRunner);\n\n } else { // many-to-many non owner\n return this.loadManyToManyNotOwner(relation, entityOrEntities, queryRunner);\n }\n }\n\n /**\n * Loads data for many-to-one and one-to-one owner relations.\n *\n * (ow) post.category<=>category.post\n * loaded: category from post\n * example: SELECT category.id AS category_id, category.name AS category_name FROM category category\n * INNER JOIN post Post ON Post.category=category.id WHERE Post.id=1\n */\n loadManyToOneOrOneToOneOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const columns = relation.entityMetadata.primaryColumns;\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.joinColumns;\n const conditions = joinColumns.map(joinColumn => {\n return `${relation.entityMetadata.name}.${joinColumn.propertyName} = ${relation.propertyName}.${joinColumn.referencedColumn!.propertyName}`;\n }).join(\" AND \");\n\n const joinAliasName = relation.entityMetadata.name;\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName) // category\n .from(relation.type, relation.propertyName) // Category, category\n .innerJoin(relation.entityMetadata.target as Function, joinAliasName, conditions);\n\n if (columns.length === 1) {\n qb.where(`${joinAliasName}.${columns[0].propertyPath} IN (:...${joinAliasName + \"_\" + columns[0].propertyName})`);\n qb.setParameter(joinAliasName + \"_\" + columns[0].propertyName, entities.map(entity => columns[0].getEntityValue(entity)));\n\n } else {\n const condition = entities.map((entity, entityIndex) => {\n return columns.map((column, columnIndex) => {\n const paramName = joinAliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity));\n return joinAliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(condition => \"(\" + condition + \")\").join(\" OR \");\n qb.where(condition);\n }\n\n return qb.getMany();\n // return qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for one-to-many and one-to-one not owner relations.\n *\n * SELECT post\n * FROM post post\n * WHERE post.[joinColumn.name] = entity[joinColumn.referencedColumn]\n */\n loadOneToManyOrOneToOneNotOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const aliasName = relation.propertyName;\n const columns = relation.inverseRelation!.joinColumns;\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(aliasName)\n .from(relation.inverseRelation!.entityMetadata.target, aliasName);\n\n if (columns.length === 1) {\n qb.where(`${aliasName}.${columns[0].propertyPath} IN (:...${aliasName + \"_\" + columns[0].propertyName})`);\n qb.setParameter(aliasName + \"_\" + columns[0].propertyName, entities.map(entity => columns[0].referencedColumn!.getEntityValue(entity)));\n\n } else {\n const condition = entities.map((entity, entityIndex) => {\n return columns.map((column, columnIndex) => {\n const paramName = aliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.referencedColumn!.getEntityValue(entity));\n return aliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(condition => \"(\" + condition + \")\").join(\" OR \");\n qb.where(condition);\n }\n return qb.getMany();\n // return relation.isOneToMany ? qb.getMany() : qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for many-to-many owner relations.\n *\n * SELECT category\n * FROM category category\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = :postId\n * AND post_categories.categoryId = category.id\n */\n loadManyToManyOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const mainAlias = relation.propertyName;\n const joinAlias = relation.junctionEntityMetadata!.tableName;\n const joinColumnConditions = relation.joinColumns.map(joinColumn => {\n return `${joinAlias}.${joinColumn.propertyName} IN (:...${joinColumn.propertyName})`;\n });\n const inverseJoinColumnConditions = relation.inverseJoinColumns.map(inverseJoinColumn => {\n return `${joinAlias}.${inverseJoinColumn.propertyName}=${mainAlias}.${inverseJoinColumn.referencedColumn!.propertyName}`;\n });\n const parameters = relation.joinColumns.reduce((parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map(entity => joinColumn.referencedColumn!.getEntityValue(entity));\n return parameters;\n }, {} as ObjectLiteral);\n\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, [...joinColumnConditions, ...inverseJoinColumnConditions].join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n }\n\n /**\n * Loads data for many-to-many not owner relations.\n *\n * SELECT post\n * FROM post post\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = post.id\n * AND post_categories.categoryId = post_categories.categoryId\n */\n loadManyToManyNotOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const mainAlias = relation.propertyName;\n const joinAlias = relation.junctionEntityMetadata!.tableName;\n const joinColumnConditions = relation.inverseRelation!.joinColumns.map(joinColumn => {\n return `${joinAlias}.${joinColumn.propertyName} = ${mainAlias}.${joinColumn.referencedColumn!.propertyName}`;\n });\n const inverseJoinColumnConditions = relation.inverseRelation!.inverseJoinColumns.map(inverseJoinColumn => {\n return `${joinAlias}.${inverseJoinColumn.propertyName} IN (:...${inverseJoinColumn.propertyName})`;\n });\n const parameters = relation.inverseRelation!.inverseJoinColumns.reduce((parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map(entity => joinColumn.referencedColumn!.getEntityValue(entity));\n return parameters;\n }, {} as ObjectLiteral);\n\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, [...joinColumnConditions, ...inverseJoinColumnConditions].join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n }\n\n /**\n * Wraps given entity and creates getters/setters for its given relation\n * to be able to lazily load data when accessing this relation.\n */\n enableLazyLoad(relation: RelationMetadata, entity: ObjectLiteral, queryRunner?: QueryRunner) {\n const relationLoader = this;\n const dataIndex = \"__\" + relation.propertyName + \"__\"; // in what property of the entity loaded data will be stored\n const promiseIndex = \"__promise_\" + relation.propertyName + \"__\"; // in what property of the entity loading promise will be stored\n const resolveIndex = \"__has_\" + relation.propertyName + \"__\"; // indicates if relation data already was loaded or not, we need this flag if loaded data is empty\n\n const setData = (entity: ObjectLiteral, value: any) => {\n entity[dataIndex] = value;\n entity[resolveIndex] = true;\n delete entity[promiseIndex];\n return value;\n };\n const setPromise = (entity: ObjectLiteral, value: Promise<any>) => {\n delete entity[resolveIndex];\n delete entity[dataIndex];\n entity[promiseIndex] = value;\n value.then(\n // ensure different value is not assigned yet\n result => entity[promiseIndex] === value ? setData(entity, result) : result\n );\n return value;\n };\n\n Object.defineProperty(entity, relation.propertyName, {\n get: function() {\n if (this[resolveIndex] === true || this[dataIndex] !== undefined) // if related data already was loaded then simply return it\n return Promise.resolve(this[dataIndex]);\n\n if (this[promiseIndex]) // if related data is loading then return a promise relationLoader loads it\n return this[promiseIndex];\n\n // nothing is loaded yet, load relation data and save it in the model once they are loaded\n const loader = relationLoader.load(relation, this, queryRunner).then(\n result => relation.isOneToOne || relation.isManyToOne ? (result.length === 0 ? null : result[0]) : result\n );\n return setPromise(this, loader);\n },\n set: function(value: any|Promise<any>) {\n if (value instanceof Promise) { // if set data is a promise then wait for its resolve and save in the object\n setPromise(this, value);\n } else { // if its direct data set (non promise, probably not safe-typed)\n setData(this, value);\n }\n },\n configurable: true\n });\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/RelationLoader.ts"],"names":[],"mappings":"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","file":"RelationLoader.js","sourcesContent":["import {Connection} from \"../connection/Connection\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\n\n/**\n * Wraps entities and creates getters/setters for their relations\n * to be able to lazily load relations when accessing these relations.\n */\nexport class RelationLoader {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private connection: Connection) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation data for the given entity and its relation.\n */\n load(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any[]> { // todo: check all places where it uses non array\n if (queryRunner && queryRunner.isReleased) queryRunner = undefined; // get new one if already closed\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadManyToOneOrOneToOneOwner(relation, entityOrEntities, queryRunner);\n\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadOneToManyOrOneToOneNotOwner(relation, entityOrEntities, queryRunner);\n\n } else if (relation.isManyToManyOwner) {\n return this.loadManyToManyOwner(relation, entityOrEntities, queryRunner);\n\n } else { // many-to-many non owner\n return this.loadManyToManyNotOwner(relation, entityOrEntities, queryRunner);\n }\n }\n\n /**\n * Loads data for many-to-one and one-to-one owner relations.\n *\n * (ow) post.category<=>category.post\n * loaded: category from post\n * example: SELECT category.id AS category_id, category.name AS category_name FROM category category\n * INNER JOIN post Post ON Post.category=category.id WHERE Post.id=1\n */\n loadManyToOneOrOneToOneOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const columns = relation.entityMetadata.primaryColumns;\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.joinColumns;\n const conditions = joinColumns.map(joinColumn => {\n return `${relation.entityMetadata.name}.${joinColumn.propertyName} = ${relation.propertyName}.${joinColumn.referencedColumn!.propertyName}`;\n }).join(\" AND \");\n\n const joinAliasName = relation.entityMetadata.name;\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName) // category\n .from(relation.type, relation.propertyName) // Category, category\n .innerJoin(relation.entityMetadata.target as Function, joinAliasName, conditions);\n\n if (columns.length === 1) {\n qb.where(`${joinAliasName}.${columns[0].propertyPath} IN (:...${joinAliasName + \"_\" + columns[0].propertyName})`);\n qb.setParameter(joinAliasName + \"_\" + columns[0].propertyName, entities.map(entity => columns[0].getEntityValue(entity)));\n\n } else {\n const condition = entities.map((entity, entityIndex) => {\n return columns.map((column, columnIndex) => {\n const paramName = joinAliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity));\n return joinAliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(condition => \"(\" + condition + \")\").join(\" OR \");\n qb.where(condition);\n }\n\n return qb.getMany();\n // return qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for one-to-many and one-to-one not owner relations.\n *\n * SELECT post\n * FROM post post\n * WHERE post.[joinColumn.name] = entity[joinColumn.referencedColumn]\n */\n loadOneToManyOrOneToOneNotOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const aliasName = relation.propertyName;\n const columns = relation.inverseRelation!.joinColumns;\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(aliasName)\n .from(relation.inverseRelation!.entityMetadata.target, aliasName);\n\n if (columns.length === 1) {\n qb.where(`${aliasName}.${columns[0].propertyPath} IN (:...${aliasName + \"_\" + columns[0].propertyName})`);\n qb.setParameter(aliasName + \"_\" + columns[0].propertyName, entities.map(entity => columns[0].referencedColumn!.getEntityValue(entity)));\n\n } else {\n const condition = entities.map((entity, entityIndex) => {\n return columns.map((column, columnIndex) => {\n const paramName = aliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.referencedColumn!.getEntityValue(entity));\n return aliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(condition => \"(\" + condition + \")\").join(\" OR \");\n qb.where(condition);\n }\n return qb.getMany();\n // return relation.isOneToMany ? qb.getMany() : qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for many-to-many owner relations.\n *\n * SELECT category\n * FROM category category\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = :postId\n * AND post_categories.categoryId = category.id\n */\n loadManyToManyOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const mainAlias = relation.propertyName;\n const joinAlias = relation.junctionEntityMetadata!.tableName;\n const joinColumnConditions = relation.joinColumns.map(joinColumn => {\n return `${joinAlias}.${joinColumn.propertyName} IN (:...${joinColumn.propertyName})`;\n });\n const inverseJoinColumnConditions = relation.inverseJoinColumns.map(inverseJoinColumn => {\n return `${joinAlias}.${inverseJoinColumn.propertyName}=${mainAlias}.${inverseJoinColumn.referencedColumn!.propertyName}`;\n });\n const parameters = relation.joinColumns.reduce((parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map(entity => joinColumn.referencedColumn!.getEntityValue(entity));\n return parameters;\n }, {} as ObjectLiteral);\n\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, [...joinColumnConditions, ...inverseJoinColumnConditions].join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n }\n\n /**\n * Loads data for many-to-many not owner relations.\n *\n * SELECT post\n * FROM post post\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = post.id\n * AND post_categories.categoryId = post_categories.categoryId\n */\n loadManyToManyNotOwner(relation: RelationMetadata, entityOrEntities: ObjectLiteral|ObjectLiteral[], queryRunner?: QueryRunner): Promise<any> {\n const entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n const mainAlias = relation.propertyName;\n const joinAlias = relation.junctionEntityMetadata!.tableName;\n const joinColumnConditions = relation.inverseRelation!.joinColumns.map(joinColumn => {\n return `${joinAlias}.${joinColumn.propertyName} = ${mainAlias}.${joinColumn.referencedColumn!.propertyName}`;\n });\n const inverseJoinColumnConditions = relation.inverseRelation!.inverseJoinColumns.map(inverseJoinColumn => {\n return `${joinAlias}.${inverseJoinColumn.propertyName} IN (:...${inverseJoinColumn.propertyName})`;\n });\n const parameters = relation.inverseRelation!.inverseJoinColumns.reduce((parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map(entity => joinColumn.referencedColumn!.getEntityValue(entity));\n return parameters;\n }, {} as ObjectLiteral);\n\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, [...joinColumnConditions, ...inverseJoinColumnConditions].join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n }\n\n /**\n * Wraps given entity and creates getters/setters for its given relation\n * to be able to lazily load data when accessing this relation.\n */\n enableLazyLoad(relation: RelationMetadata, entity: ObjectLiteral, queryRunner?: QueryRunner) {\n const relationLoader = this;\n const dataIndex = \"__\" + relation.propertyName + \"__\"; // in what property of the entity loaded data will be stored\n const promiseIndex = \"__promise_\" + relation.propertyName + \"__\"; // in what property of the entity loading promise will be stored\n const resolveIndex = \"__has_\" + relation.propertyName + \"__\"; // indicates if relation data already was loaded or not, we need this flag if loaded data is empty\n\n const setData = (entity: ObjectLiteral, value: any) => {\n entity[dataIndex] = value;\n entity[resolveIndex] = true;\n delete entity[promiseIndex];\n return value;\n };\n const setPromise = (entity: ObjectLiteral, value: Promise<any>) => {\n delete entity[resolveIndex];\n delete entity[dataIndex];\n entity[promiseIndex] = value;\n value.then(\n // ensure different value is not assigned yet\n result => entity[promiseIndex] === value ? setData(entity, result) : result\n );\n return value;\n };\n\n Object.defineProperty(entity, relation.propertyName, {\n get: function() {\n if (this[resolveIndex] === true || this[dataIndex] !== undefined) // if related data already was loaded then simply return it\n return Promise.resolve(this[dataIndex]);\n\n if (this[promiseIndex]) // if related data is loading then return a promise relationLoader loads it\n return this[promiseIndex];\n\n // nothing is loaded yet, load relation data and save it in the model once they are loaded\n const loader = relationLoader.load(relation, this, queryRunner).then(\n result => relation.isOneToOne || relation.isManyToOne ? (result.length === 0 ? null : result[0]) : result\n );\n return setPromise(this, loader);\n },\n set: function(value: any|Promise<any>) {\n if (value instanceof Promise) { // if set data is a promise then wait for its resolve and save in the object\n setPromise(this, value);\n } else { // if its direct data set (non promise, probably not safe-typed)\n setData(this, value);\n }\n },\n configurable: true\n });\n }\n\n}\n"],"sourceRoot":".."}
@@ -12,7 +12,7 @@ var error_1 = require("../error");
12
12
  * todo: add transactions everywhere
13
13
  */
14
14
  var RelationQueryBuilder = /** @class */ (function (_super) {
15
- tslib_1.__extends(RelationQueryBuilder, _super);
15
+ (0, tslib_1.__extends)(RelationQueryBuilder, _super);
16
16
  function RelationQueryBuilder() {
17
17
  return _super !== null && _super.apply(this, arguments) || this;
18
18
  }
@@ -42,9 +42,9 @@ var RelationQueryBuilder = /** @class */ (function (_super) {
42
42
  * For many-to-many and one-to-many relations use #add and #remove methods instead.
43
43
  */
44
44
  RelationQueryBuilder.prototype.set = function (value) {
45
- return tslib_1.__awaiter(this, void 0, void 0, function () {
45
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
46
46
  var relation, updater;
47
- return tslib_1.__generator(this, function (_a) {
47
+ return (0, tslib_1.__generator)(this, function (_a) {
48
48
  relation = this.expressionMap.relationMetadata;
49
49
  if (!this.expressionMap.of) // todo: move this check before relation query builder creation?
50
50
  throw new error_1.TypeORMError("Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.");
@@ -70,9 +70,9 @@ var RelationQueryBuilder = /** @class */ (function (_super) {
70
70
  * For many-to-one and one-to-one use #set method instead.
71
71
  */
72
72
  RelationQueryBuilder.prototype.add = function (value) {
73
- return tslib_1.__awaiter(this, void 0, void 0, function () {
73
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
74
74
  var relation, updater;
75
- return tslib_1.__generator(this, function (_a) {
75
+ return (0, tslib_1.__generator)(this, function (_a) {
76
76
  if (Array.isArray(value) && value.length === 0)
77
77
  return [2 /*return*/];
78
78
  relation = this.expressionMap.relationMetadata;
@@ -100,9 +100,9 @@ var RelationQueryBuilder = /** @class */ (function (_super) {
100
100
  * For many-to-one and one-to-one use #set method instead.
101
101
  */
102
102
  RelationQueryBuilder.prototype.remove = function (value) {
103
- return tslib_1.__awaiter(this, void 0, void 0, function () {
103
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
104
104
  var relation, remover;
105
- return tslib_1.__generator(this, function (_a) {
105
+ return (0, tslib_1.__generator)(this, function (_a) {
106
106
  if (Array.isArray(value) && value.length === 0)
107
107
  return [2 /*return*/];
108
108
  relation = this.expressionMap.relationMetadata;
@@ -125,8 +125,8 @@ var RelationQueryBuilder = /** @class */ (function (_super) {
125
125
  * For many-to-one and one-to-one use #set method instead.
126
126
  */
127
127
  RelationQueryBuilder.prototype.addAndRemove = function (added, removed) {
128
- return tslib_1.__awaiter(this, void 0, void 0, function () {
129
- return tslib_1.__generator(this, function (_a) {
128
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
129
+ return (0, tslib_1.__generator)(this, function (_a) {
130
130
  switch (_a.label) {
131
131
  case 0: return [4 /*yield*/, this.remove(removed)];
132
132
  case 1:
@@ -154,8 +154,8 @@ var RelationQueryBuilder = /** @class */ (function (_super) {
154
154
  * You can also provide id of relational entity to filter by.
155
155
  */
156
156
  RelationQueryBuilder.prototype.loadOne = function () {
157
- return tslib_1.__awaiter(this, void 0, void 0, function () {
158
- return tslib_1.__generator(this, function (_a) {
157
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
158
+ return (0, tslib_1.__generator)(this, function (_a) {
159
159
  return [2 /*return*/, this.loadMany().then(function (results) { return results[0]; })];
160
160
  });
161
161
  });
@@ -165,9 +165,9 @@ var RelationQueryBuilder = /** @class */ (function (_super) {
165
165
  * You can also provide ids of relational entities to filter by.
166
166
  */
167
167
  RelationQueryBuilder.prototype.loadMany = function () {
168
- return tslib_1.__awaiter(this, void 0, void 0, function () {
168
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
169
169
  var of, metadata;
170
- return tslib_1.__generator(this, function (_a) {
170
+ return (0, tslib_1.__generator)(this, function (_a) {
171
171
  of = this.expressionMap.of;
172
172
  if (!(of instanceof Object)) {
173
173
  metadata = this.expressionMap.mainAlias.metadata;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/RelationQueryBuilder.ts"],"names":[],"mappings":"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","file":"RelationQueryBuilder.js","sourcesContent":["import {QueryBuilder} from \"./QueryBuilder\";\nimport {RelationUpdater} from \"./RelationUpdater\";\nimport {RelationRemover} from \"./RelationRemover\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nexport class RelationQueryBuilder<Entity> extends QueryBuilder<Entity> {\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated sql query without parameters being replaced.\n */\n getQuery(): string {\n return \"\";\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sets entity (target) which relations will be updated.\n */\n of(entity: any|any[]): this {\n this.expressionMap.of = entity;\n return this;\n }\n\n /**\n * Sets entity relation's value.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Works only for many-to-one and one-to-one relations.\n * For many-to-many and one-to-many relations use #add and #remove methods instead.\n */\n async set(value: any): Promise<void> {\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToMany || relation.isOneToMany)\n throw new TypeORMError(`Set operation is only supported for many-to-one and one-to-one relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .add() method instead.`);\n\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new TypeORMError(`Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \"...\", lastName: \"...\" })`);\n\n const updater = new RelationUpdater(this, this.expressionMap);\n return updater.update(value);\n }\n\n /**\n * Adds (binds) given value to entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async add(value: any|any[]): Promise<void> {\n if (Array.isArray(value) && value.length === 0)\n return;\n\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToOne || relation.isOneToOne)\n throw new TypeORMError(`Add operation is only supported for many-to-many and one-to-many relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .set() method instead.`);\n\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new TypeORMError(`Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \"...\", lastName: \"...\" })`);\n\n const updater = new RelationUpdater(this, this.expressionMap);\n return updater.update(value);\n }\n\n /**\n * Removes (unbinds) given value from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async remove(value: any|any[]): Promise<void> {\n if (Array.isArray(value) && value.length === 0)\n return;\n\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToOne || relation.isOneToOne)\n throw new TypeORMError(`Add operation is only supported for many-to-many and one-to-many relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .set(null) method instead.`);\n\n const remover = new RelationRemover(this, this.expressionMap);\n return remover.remove(value);\n }\n\n /**\n * Adds (binds) and removes (unbinds) given values to/from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async addAndRemove(added: any|any[], removed: any|any[]): Promise<void> {\n await this.remove(removed);\n await this.add(added);\n }\n\n /**\n * Gets entity's relation id.\n async getId(): Promise<any> {\n\n }*/\n\n /**\n * Gets entity's relation ids.\n async getIds(): Promise<any[]> {\n return [];\n }*/\n\n /**\n * Loads a single entity (relational) from the relation.\n * You can also provide id of relational entity to filter by.\n */\n async loadOne<T = any>(): Promise<T|undefined> {\n return this.loadMany<T>().then(results => results[0]);\n }\n\n /**\n * Loads many entities (relational) from the relation.\n * You can also provide ids of relational entities to filter by.\n */\n async loadMany<T = any>(): Promise<T[]> {\n let of = this.expressionMap.of;\n if (!(of instanceof Object)) {\n const metadata = this.expressionMap.mainAlias!.metadata;\n if (metadata.hasMultiplePrimaryKeys)\n throw new TypeORMError(`Cannot load entity because only one primary key was specified, however entity contains multiple primary keys`);\n\n of = metadata.primaryColumns[0].createValueMap(of);\n }\n\n return this.connection.relationLoader.load(this.expressionMap.relationMetadata, of, this.queryRunner);\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/RelationQueryBuilder.ts"],"names":[],"mappings":"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","file":"RelationQueryBuilder.js","sourcesContent":["import {QueryBuilder} from \"./QueryBuilder\";\nimport {RelationUpdater} from \"./RelationUpdater\";\nimport {RelationRemover} from \"./RelationRemover\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nexport class RelationQueryBuilder<Entity> extends QueryBuilder<Entity> {\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated sql query without parameters being replaced.\n */\n getQuery(): string {\n return \"\";\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sets entity (target) which relations will be updated.\n */\n of(entity: any|any[]): this {\n this.expressionMap.of = entity;\n return this;\n }\n\n /**\n * Sets entity relation's value.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Works only for many-to-one and one-to-one relations.\n * For many-to-many and one-to-many relations use #add and #remove methods instead.\n */\n async set(value: any): Promise<void> {\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToMany || relation.isOneToMany)\n throw new TypeORMError(`Set operation is only supported for many-to-one and one-to-one relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .add() method instead.`);\n\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new TypeORMError(`Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \"...\", lastName: \"...\" })`);\n\n const updater = new RelationUpdater(this, this.expressionMap);\n return updater.update(value);\n }\n\n /**\n * Adds (binds) given value to entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async add(value: any|any[]): Promise<void> {\n if (Array.isArray(value) && value.length === 0)\n return;\n\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToOne || relation.isOneToOne)\n throw new TypeORMError(`Add operation is only supported for many-to-many and one-to-many relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .set() method instead.`);\n\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new TypeORMError(`Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \"...\", lastName: \"...\" })`);\n\n const updater = new RelationUpdater(this, this.expressionMap);\n return updater.update(value);\n }\n\n /**\n * Removes (unbinds) given value from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async remove(value: any|any[]): Promise<void> {\n if (Array.isArray(value) && value.length === 0)\n return;\n\n const relation = this.expressionMap.relationMetadata;\n\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new TypeORMError(`Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.`);\n\n if (relation.isManyToOne || relation.isOneToOne)\n throw new TypeORMError(`Add operation is only supported for many-to-many and one-to-many relations. ` +\n `However given \"${relation.propertyPath}\" has ${relation.relationType} relation. ` +\n `Use .set(null) method instead.`);\n\n const remover = new RelationRemover(this, this.expressionMap);\n return remover.remove(value);\n }\n\n /**\n * Adds (binds) and removes (unbinds) given values to/from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n async addAndRemove(added: any|any[], removed: any|any[]): Promise<void> {\n await this.remove(removed);\n await this.add(added);\n }\n\n /**\n * Gets entity's relation id.\n async getId(): Promise<any> {\n\n }*/\n\n /**\n * Gets entity's relation ids.\n async getIds(): Promise<any[]> {\n return [];\n }*/\n\n /**\n * Loads a single entity (relational) from the relation.\n * You can also provide id of relational entity to filter by.\n */\n async loadOne<T = any>(): Promise<T|undefined> {\n return this.loadMany<T>().then(results => results[0]);\n }\n\n /**\n * Loads many entities (relational) from the relation.\n * You can also provide ids of relational entities to filter by.\n */\n async loadMany<T = any>(): Promise<T[]> {\n let of = this.expressionMap.of;\n if (!(of instanceof Object)) {\n const metadata = this.expressionMap.mainAlias!.metadata;\n if (metadata.hasMultiplePrimaryKeys)\n throw new TypeORMError(`Cannot load entity because only one primary key was specified, however entity contains multiple primary keys`);\n\n of = metadata.primaryColumns[0].createValueMap(of);\n }\n\n return this.connection.relationLoader.load(this.expressionMap.relationMetadata, of, this.queryRunner);\n }\n\n}\n"],"sourceRoot":".."}
@@ -22,9 +22,9 @@ var RelationRemover = /** @class */ (function () {
22
22
  * Performs remove operation on a relation.
23
23
  */
24
24
  RelationRemover.prototype.remove = function (value) {
25
- return tslib_1.__awaiter(this, void 0, void 0, function () {
25
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
26
26
  var relation, ofs, values_1, updateSet_1, parameters_1, conditions_1, condition, junctionMetadata_1, ofs, values, firstColumnValues, secondColumnValues_1, parameters_2, conditions_2, condition;
27
- return tslib_1.__generator(this, function (_a) {
27
+ return (0, tslib_1.__generator)(this, function (_a) {
28
28
  switch (_a.label) {
29
29
  case 0:
30
30
  relation = this.expressionMap.relationMetadata;
@@ -38,17 +38,17 @@ var RelationRemover = /** @class */ (function () {
38
38
  parameters_1 = {};
39
39
  conditions_1 = [];
40
40
  ofs.forEach(function (of, ofIndex) {
41
- conditions_1.push.apply(conditions_1, tslib_1.__spreadArray([], tslib_1.__read(values_1.map(function (value, valueIndex) {
42
- return tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(relation.inverseRelation.joinColumns.map(function (column, columnIndex) {
41
+ conditions_1.push.apply(conditions_1, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(values_1.map(function (value, valueIndex) {
42
+ return (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(relation.inverseRelation.joinColumns.map(function (column, columnIndex) {
43
43
  var parameterName = "joinColumn_" + ofIndex + "_" + valueIndex + "_" + columnIndex;
44
44
  parameters_1[parameterName] = of instanceof Object ? column.referencedColumn.getEntityValue(of) : of;
45
45
  return column.propertyPath + " = :" + parameterName;
46
- }))), tslib_1.__read(relation.inverseRelation.entityMetadata.primaryColumns.map(function (column, columnIndex) {
46
+ })), false), (0, tslib_1.__read)(relation.inverseRelation.entityMetadata.primaryColumns.map(function (column, columnIndex) {
47
47
  var parameterName = "primaryColumn_" + valueIndex + "_" + valueIndex + "_" + columnIndex;
48
48
  parameters_1[parameterName] = value instanceof Object ? column.getEntityValue(value) : value;
49
49
  return column.propertyPath + " = :" + parameterName;
50
- }))).join(" AND ");
51
- }))));
50
+ })), false).join(" AND ");
51
+ })), false));
52
52
  });
53
53
  condition = conditions_1.map(function (str) { return "(" + str + ")"; }).join(" OR ");
54
54
  if (!condition)
@@ -72,17 +72,17 @@ var RelationRemover = /** @class */ (function () {
72
72
  parameters_2 = {};
73
73
  conditions_2 = [];
74
74
  firstColumnValues.forEach(function (firstColumnVal, firstColumnValIndex) {
75
- conditions_2.push.apply(conditions_2, tslib_1.__spreadArray([], tslib_1.__read(secondColumnValues_1.map(function (secondColumnVal, secondColumnValIndex) {
76
- return tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(junctionMetadata_1.ownerColumns.map(function (column, columnIndex) {
75
+ conditions_2.push.apply(conditions_2, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(secondColumnValues_1.map(function (secondColumnVal, secondColumnValIndex) {
76
+ return (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(junctionMetadata_1.ownerColumns.map(function (column, columnIndex) {
77
77
  var parameterName = "firstValue_" + firstColumnValIndex + "_" + secondColumnValIndex + "_" + columnIndex;
78
78
  parameters_2[parameterName] = firstColumnVal instanceof Object ? column.referencedColumn.getEntityValue(firstColumnVal) : firstColumnVal;
79
79
  return column.databaseName + " = :" + parameterName;
80
- }))), tslib_1.__read(junctionMetadata_1.inverseColumns.map(function (column, columnIndex) {
80
+ })), false), (0, tslib_1.__read)(junctionMetadata_1.inverseColumns.map(function (column, columnIndex) {
81
81
  var parameterName = "secondValue_" + firstColumnValIndex + "_" + secondColumnValIndex + "_" + columnIndex;
82
82
  parameters_2[parameterName] = secondColumnVal instanceof Object ? column.referencedColumn.getEntityValue(secondColumnVal) : secondColumnVal;
83
83
  return column.databaseName + " = :" + parameterName;
84
- }))).join(" AND ");
85
- }))));
84
+ })), false).join(" AND ");
85
+ })), false));
86
86
  });
87
87
  condition = conditions_2.map(function (str) { return "(" + str + ")"; }).join(" OR ");
88
88
  return [4 /*yield*/, this.queryBuilder
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/RelationRemover.ts"],"names":[],"mappings":"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","file":"RelationRemover.js","sourcesContent":["import {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\n\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nexport class RelationRemover {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected queryBuilder: QueryBuilder<any>,\n protected expressionMap: QueryExpressionMap) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs remove operation on a relation.\n */\n async remove(value: any|any[]): Promise<void> {\n const relation = this.expressionMap.relationMetadata;\n\n if (relation.isOneToMany) {\n\n // if (this.expressionMap.of instanceof Array)\n // throw new TypeORMError(`You cannot update relations of multiple entities with the same related object. Provide a single entity into .of method.`);\n\n // DELETE FROM post WHERE post.categoryId = of AND post.id = id\n const ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n const values = Array.isArray(value) ? value : [value];\n\n const updateSet: ObjectLiteral = {};\n relation.inverseRelation!.joinColumns.forEach(column => {\n updateSet[column.propertyName] = null;\n });\n\n const parameters: ObjectLiteral = {};\n const conditions: string[] = [];\n ofs.forEach((of, ofIndex) => {\n conditions.push(...values.map((value, valueIndex) => {\n return [\n ...relation.inverseRelation!.joinColumns.map((column, columnIndex) => {\n const parameterName = \"joinColumn_\" + ofIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters[parameterName] = of instanceof Object ? column.referencedColumn!.getEntityValue(of) : of;\n return `${column.propertyPath} = :${parameterName}`;\n }),\n ...relation.inverseRelation!.entityMetadata.primaryColumns.map((column, columnIndex) => {\n const parameterName = \"primaryColumn_\" + valueIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters[parameterName] = value instanceof Object ? column.getEntityValue(value) : value;\n return `${column.propertyPath} = :${parameterName}`;\n })\n ].join(\" AND \");\n }));\n });\n const condition = conditions.map(str => \"(\" + str + \")\").join(\" OR \");\n if (!condition) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .where(condition)\n .setParameters(parameters)\n .execute();\n\n } else { // many to many\n\n const junctionMetadata = relation.junctionEntityMetadata!;\n const ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n const values = Array.isArray(value) ? value : [value];\n const firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n const secondColumnValues = relation.isManyToManyOwner ? values : ofs;\n\n const parameters: ObjectLiteral = {};\n const conditions: string[] = [];\n firstColumnValues.forEach((firstColumnVal, firstColumnValIndex) => {\n conditions.push(...secondColumnValues.map((secondColumnVal, secondColumnValIndex) => {\n return [\n ...junctionMetadata.ownerColumns.map((column, columnIndex) => {\n const parameterName = \"firstValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters[parameterName] = firstColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(firstColumnVal) : firstColumnVal;\n return `${column.databaseName} = :${parameterName}`;\n }),\n ...junctionMetadata.inverseColumns.map((column, columnIndex) => {\n const parameterName = \"secondValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters[parameterName] = secondColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(secondColumnVal) : secondColumnVal;\n return `${column.databaseName} = :${parameterName}`;\n })\n ].join(\" AND \");\n }));\n });\n const condition = conditions.map(str => \"(\" + str + \")\").join(\" OR \");\n\n await this.queryBuilder\n .createQueryBuilder()\n .delete()\n .from(junctionMetadata.tableName)\n .where(condition)\n .setParameters(parameters)\n .execute();\n }\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/RelationRemover.ts"],"names":[],"mappings":"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","file":"RelationRemover.js","sourcesContent":["import {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\n\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nexport class RelationRemover {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected queryBuilder: QueryBuilder<any>,\n protected expressionMap: QueryExpressionMap) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs remove operation on a relation.\n */\n async remove(value: any|any[]): Promise<void> {\n const relation = this.expressionMap.relationMetadata;\n\n if (relation.isOneToMany) {\n\n // if (this.expressionMap.of instanceof Array)\n // throw new TypeORMError(`You cannot update relations of multiple entities with the same related object. Provide a single entity into .of method.`);\n\n // DELETE FROM post WHERE post.categoryId = of AND post.id = id\n const ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n const values = Array.isArray(value) ? value : [value];\n\n const updateSet: ObjectLiteral = {};\n relation.inverseRelation!.joinColumns.forEach(column => {\n updateSet[column.propertyName] = null;\n });\n\n const parameters: ObjectLiteral = {};\n const conditions: string[] = [];\n ofs.forEach((of, ofIndex) => {\n conditions.push(...values.map((value, valueIndex) => {\n return [\n ...relation.inverseRelation!.joinColumns.map((column, columnIndex) => {\n const parameterName = \"joinColumn_\" + ofIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters[parameterName] = of instanceof Object ? column.referencedColumn!.getEntityValue(of) : of;\n return `${column.propertyPath} = :${parameterName}`;\n }),\n ...relation.inverseRelation!.entityMetadata.primaryColumns.map((column, columnIndex) => {\n const parameterName = \"primaryColumn_\" + valueIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters[parameterName] = value instanceof Object ? column.getEntityValue(value) : value;\n return `${column.propertyPath} = :${parameterName}`;\n })\n ].join(\" AND \");\n }));\n });\n const condition = conditions.map(str => \"(\" + str + \")\").join(\" OR \");\n if (!condition) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .where(condition)\n .setParameters(parameters)\n .execute();\n\n } else { // many to many\n\n const junctionMetadata = relation.junctionEntityMetadata!;\n const ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n const values = Array.isArray(value) ? value : [value];\n const firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n const secondColumnValues = relation.isManyToManyOwner ? values : ofs;\n\n const parameters: ObjectLiteral = {};\n const conditions: string[] = [];\n firstColumnValues.forEach((firstColumnVal, firstColumnValIndex) => {\n conditions.push(...secondColumnValues.map((secondColumnVal, secondColumnValIndex) => {\n return [\n ...junctionMetadata.ownerColumns.map((column, columnIndex) => {\n const parameterName = \"firstValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters[parameterName] = firstColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(firstColumnVal) : firstColumnVal;\n return `${column.databaseName} = :${parameterName}`;\n }),\n ...junctionMetadata.inverseColumns.map((column, columnIndex) => {\n const parameterName = \"secondValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters[parameterName] = secondColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(secondColumnVal) : secondColumnVal;\n return `${column.databaseName} = :${parameterName}`;\n })\n ].join(\" AND \");\n }));\n });\n const condition = conditions.map(str => \"(\" + str + \")\").join(\" OR \");\n\n await this.queryBuilder\n .createQueryBuilder()\n .delete()\n .from(junctionMetadata.tableName)\n .where(condition)\n .setParameters(parameters)\n .execute();\n }\n }\n\n}\n"],"sourceRoot":".."}
@@ -25,10 +25,10 @@ var RelationUpdater = /** @class */ (function () {
25
25
  * Performs set or add operation on a relation.
26
26
  */
27
27
  RelationUpdater.prototype.update = function (value) {
28
- return tslib_1.__awaiter(this, void 0, void 0, function () {
28
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
29
29
  var relation, updateSet, updateSet_1, ofs, parameters_1, conditions_1, condition, of_1, updateSet, junctionMetadata_1, ofs, values, firstColumnValues, secondColumnValues_1, bulkInserted_1;
30
30
  var _this = this;
31
- return tslib_1.__generator(this, function (_a) {
31
+ return (0, tslib_1.__generator)(this, function (_a) {
32
32
  switch (_a.label) {
33
33
  case 0:
34
34
  relation = this.expressionMap.relationMetadata;
@@ -22,17 +22,17 @@ var ReturningResultsEntityUpdator = /** @class */ (function () {
22
22
  * Updates entities with a special columns after updation query execution.
23
23
  */
24
24
  ReturningResultsEntityUpdator.prototype.update = function (updateResult, entities) {
25
- return tslib_1.__awaiter(this, void 0, void 0, function () {
25
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
26
26
  var metadata;
27
27
  var _this = this;
28
- return tslib_1.__generator(this, function (_a) {
28
+ return (0, tslib_1.__generator)(this, function (_a) {
29
29
  switch (_a.label) {
30
30
  case 0:
31
31
  metadata = this.expressionMap.mainAlias.metadata;
32
- return [4 /*yield*/, Promise.all(entities.map(function (entity, entityIndex) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
32
+ return [4 /*yield*/, Promise.all(entities.map(function (entity, entityIndex) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
33
33
  var result, returningColumns, updationColumns, entityId, loadedReturningColumns;
34
34
  var _this = this;
35
- return tslib_1.__generator(this, function (_a) {
35
+ return (0, tslib_1.__generator)(this, function (_a) {
36
36
  switch (_a.label) {
37
37
  case 0:
38
38
  if (!this.queryRunner.connection.driver.isReturningSqlSupported()) return [3 /*break*/, 1];
@@ -85,10 +85,10 @@ var ReturningResultsEntityUpdator = /** @class */ (function () {
85
85
  * Updates entities with a special columns after insertion query execution.
86
86
  */
87
87
  ReturningResultsEntityUpdator.prototype.insert = function (insertResult, entities) {
88
- return tslib_1.__awaiter(this, void 0, void 0, function () {
88
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
89
89
  var metadata, insertionColumns, generatedMaps, entityIds, returningResult_1;
90
90
  var _this = this;
91
- return tslib_1.__generator(this, function (_a) {
91
+ return (0, tslib_1.__generator)(this, function (_a) {
92
92
  switch (_a.label) {
93
93
  case 0:
94
94
  metadata = this.expressionMap.mainAlias.metadata;