typeorm 0.2.27 → 0.2.28

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 (674) hide show
  1. package/browser/connection/Connection.d.ts +2 -2
  2. package/browser/connection/Connection.js +2 -2
  3. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  4. package/browser/connection/ConnectionOptionsReader.d.ts +3 -3
  5. package/browser/connection/ConnectionOptionsReader.js +3 -3
  6. package/browser/driver/DriverFactory.js.map +1 -1
  7. package/browser/driver/DriverUtils.js.map +1 -1
  8. package/browser/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
  9. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  10. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js.map +1 -1
  11. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
  12. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  13. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  14. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  15. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  16. package/browser/driver/postgres/PostgresDriver.d.ts +1 -1
  17. package/browser/driver/postgres/PostgresDriver.js +1 -1
  18. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  19. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  20. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  21. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  22. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  23. package/browser/entity-manager/EntityManager.d.ts +13 -13
  24. package/browser/entity-manager/EntityManager.js.map +1 -1
  25. package/browser/entity-manager/MongoEntityManager.d.ts +1 -1
  26. package/browser/entity-manager/MongoEntityManager.js +1 -1
  27. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  28. package/browser/find-options/FindOperator.d.ts +5 -5
  29. package/browser/find-options/FindOperator.js +5 -5
  30. package/browser/find-options/FindOptionsUtils.d.ts +2 -2
  31. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  32. package/browser/index.js +0 -22
  33. package/browser/index.js.map +1 -1
  34. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  35. package/browser/persistence/Subject.d.ts +4 -4
  36. package/browser/persistence/Subject.js +4 -4
  37. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  38. package/browser/query-builder/Alias.d.ts +3 -4
  39. package/browser/query-builder/Alias.js +3 -3
  40. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  41. package/browser/query-builder/JoinAttribute.d.ts +10 -10
  42. package/browser/query-builder/JoinAttribute.js +10 -10
  43. package/browser/query-builder/QueryBuilder.d.ts +1 -1
  44. package/browser/query-builder/QueryBuilder.js +1 -1
  45. package/browser/query-builder/QueryBuilder.js.map +1 -1
  46. package/browser/query-builder/QueryBuilderUtils.js.map +1 -1
  47. package/browser/query-builder/QueryExpressionMap.d.ts +2 -2
  48. package/browser/query-builder/QueryExpressionMap.js +2 -2
  49. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  50. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  51. package/browser/query-builder/relation-count/RelationCountAttribute.d.ts +7 -7
  52. package/browser/query-builder/relation-count/RelationCountAttribute.js +7 -7
  53. package/browser/query-builder/relation-count/RelationCountAttribute.js.map +1 -1
  54. package/browser/query-builder/relation-id/RelationIdAttribute.d.ts +8 -8
  55. package/browser/query-builder/relation-id/RelationIdAttribute.js +8 -8
  56. package/browser/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
  57. package/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js +3 -3
  58. package/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
  59. package/browser/repository/AbstractRepository.d.ts +2 -2
  60. package/browser/repository/AbstractRepository.js +2 -2
  61. package/browser/repository/BaseEntity.d.ts +1 -1
  62. package/browser/repository/BaseEntity.js +1 -1
  63. package/browser/repository/Repository.d.ts +1 -1
  64. package/browser/repository/Repository.js +1 -1
  65. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +2 -2
  66. package/browser/schema-builder/RdbmsSchemaBuilder.js +2 -2
  67. package/browser/schema-builder/table/Table.d.ts +1 -1
  68. package/browser/schema-builder/table/Table.js +1 -1
  69. package/browser/util/DateUtils.js.map +1 -1
  70. package/browser/util/StringUtils.js.map +1 -1
  71. package/cache/DbQueryResultCache.js +0 -1
  72. package/cache/DbQueryResultCache.js.map +1 -1
  73. package/cache/QueryResultCacheFactory.js +0 -1
  74. package/cache/QueryResultCacheFactory.js.map +1 -1
  75. package/cache/RedisQueryResultCache.js +0 -1
  76. package/cache/RedisQueryResultCache.js.map +1 -1
  77. package/commands/CacheClearCommand.js +0 -1
  78. package/commands/CacheClearCommand.js.map +1 -1
  79. package/commands/CommandUtils.js +0 -1
  80. package/commands/CommandUtils.js.map +1 -1
  81. package/commands/EntityCreateCommand.js +0 -1
  82. package/commands/EntityCreateCommand.js.map +1 -1
  83. package/commands/InitCommand.js +0 -1
  84. package/commands/InitCommand.js.map +1 -1
  85. package/commands/MigrationCreateCommand.js +0 -1
  86. package/commands/MigrationCreateCommand.js.map +1 -1
  87. package/commands/MigrationGenerateCommand.js +0 -1
  88. package/commands/MigrationGenerateCommand.js.map +1 -1
  89. package/commands/MigrationRevertCommand.js +0 -1
  90. package/commands/MigrationRevertCommand.js.map +1 -1
  91. package/commands/MigrationRunCommand.js +0 -1
  92. package/commands/MigrationRunCommand.js.map +1 -1
  93. package/commands/MigrationShowCommand.js +0 -1
  94. package/commands/MigrationShowCommand.js.map +1 -1
  95. package/commands/QueryCommand.js +0 -1
  96. package/commands/QueryCommand.js.map +1 -1
  97. package/commands/SchemaDropCommand.js +0 -1
  98. package/commands/SchemaDropCommand.js.map +1 -1
  99. package/commands/SchemaLogCommand.js +0 -1
  100. package/commands/SchemaLogCommand.js.map +1 -1
  101. package/commands/SchemaSyncCommand.js +0 -1
  102. package/commands/SchemaSyncCommand.js.map +1 -1
  103. package/commands/SubscriberCreateCommand.js +0 -1
  104. package/commands/SubscriberCreateCommand.js.map +1 -1
  105. package/commands/VersionCommand.js +0 -1
  106. package/commands/VersionCommand.js.map +1 -1
  107. package/connection/Connection.d.ts +2 -2
  108. package/connection/Connection.js +2 -3
  109. package/connection/Connection.js.map +1 -1
  110. package/connection/ConnectionManager.js +0 -1
  111. package/connection/ConnectionManager.js.map +1 -1
  112. package/connection/ConnectionMetadataBuilder.js +0 -1
  113. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  114. package/connection/ConnectionOptionsReader.d.ts +3 -3
  115. package/connection/ConnectionOptionsReader.js +3 -4
  116. package/connection/ConnectionOptionsReader.js.map +1 -1
  117. package/connection/options-reader/ConnectionOptionsEnvReader.js +0 -1
  118. package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  119. package/connection/options-reader/ConnectionOptionsXmlReader.js +0 -1
  120. package/connection/options-reader/ConnectionOptionsXmlReader.js.map +1 -1
  121. package/connection/options-reader/ConnectionOptionsYmlReader.js +0 -1
  122. package/connection/options-reader/ConnectionOptionsYmlReader.js.map +1 -1
  123. package/container.js +0 -1
  124. package/container.js.map +1 -1
  125. package/decorator/Check.js +0 -1
  126. package/decorator/Check.js.map +1 -1
  127. package/decorator/EntityRepository.js +0 -1
  128. package/decorator/EntityRepository.js.map +1 -1
  129. package/decorator/Exclusion.js +0 -1
  130. package/decorator/Exclusion.js.map +1 -1
  131. package/decorator/Generated.js +0 -1
  132. package/decorator/Generated.js.map +1 -1
  133. package/decorator/Index.js +0 -1
  134. package/decorator/Index.js.map +1 -1
  135. package/decorator/Unique.js +0 -1
  136. package/decorator/Unique.js.map +1 -1
  137. package/decorator/columns/Column.js +0 -1
  138. package/decorator/columns/Column.js.map +1 -1
  139. package/decorator/columns/CreateDateColumn.js +0 -1
  140. package/decorator/columns/CreateDateColumn.js.map +1 -1
  141. package/decorator/columns/DeleteDateColumn.js +0 -1
  142. package/decorator/columns/DeleteDateColumn.js.map +1 -1
  143. package/decorator/columns/ObjectIdColumn.js +0 -1
  144. package/decorator/columns/ObjectIdColumn.js.map +1 -1
  145. package/decorator/columns/PrimaryColumn.js +0 -1
  146. package/decorator/columns/PrimaryColumn.js.map +1 -1
  147. package/decorator/columns/PrimaryGeneratedColumn.js +0 -1
  148. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  149. package/decorator/columns/UpdateDateColumn.js +0 -1
  150. package/decorator/columns/UpdateDateColumn.js.map +1 -1
  151. package/decorator/columns/VersionColumn.js +0 -1
  152. package/decorator/columns/VersionColumn.js.map +1 -1
  153. package/decorator/columns/ViewColumn.js +0 -1
  154. package/decorator/columns/ViewColumn.js.map +1 -1
  155. package/decorator/entity/ChildEntity.js +0 -1
  156. package/decorator/entity/ChildEntity.js.map +1 -1
  157. package/decorator/entity/Entity.js +0 -1
  158. package/decorator/entity/Entity.js.map +1 -1
  159. package/decorator/entity/TableInheritance.js +0 -1
  160. package/decorator/entity/TableInheritance.js.map +1 -1
  161. package/decorator/entity-view/ViewEntity.js +0 -1
  162. package/decorator/entity-view/ViewEntity.js.map +1 -1
  163. package/decorator/listeners/AfterInsert.js +0 -1
  164. package/decorator/listeners/AfterInsert.js.map +1 -1
  165. package/decorator/listeners/AfterLoad.js +0 -1
  166. package/decorator/listeners/AfterLoad.js.map +1 -1
  167. package/decorator/listeners/AfterRemove.js +0 -1
  168. package/decorator/listeners/AfterRemove.js.map +1 -1
  169. package/decorator/listeners/AfterUpdate.js +0 -1
  170. package/decorator/listeners/AfterUpdate.js.map +1 -1
  171. package/decorator/listeners/BeforeInsert.js +0 -1
  172. package/decorator/listeners/BeforeInsert.js.map +1 -1
  173. package/decorator/listeners/BeforeRemove.js +0 -1
  174. package/decorator/listeners/BeforeRemove.js.map +1 -1
  175. package/decorator/listeners/BeforeUpdate.js +0 -1
  176. package/decorator/listeners/BeforeUpdate.js.map +1 -1
  177. package/decorator/listeners/EventSubscriber.js +0 -1
  178. package/decorator/listeners/EventSubscriber.js.map +1 -1
  179. package/decorator/relations/JoinColumn.js +0 -1
  180. package/decorator/relations/JoinColumn.js.map +1 -1
  181. package/decorator/relations/JoinTable.js +0 -1
  182. package/decorator/relations/JoinTable.js.map +1 -1
  183. package/decorator/relations/ManyToMany.js +0 -1
  184. package/decorator/relations/ManyToMany.js.map +1 -1
  185. package/decorator/relations/ManyToOne.js +0 -1
  186. package/decorator/relations/ManyToOne.js.map +1 -1
  187. package/decorator/relations/OneToMany.js +0 -1
  188. package/decorator/relations/OneToMany.js.map +1 -1
  189. package/decorator/relations/OneToOne.js +0 -1
  190. package/decorator/relations/OneToOne.js.map +1 -1
  191. package/decorator/relations/RelationCount.js +0 -1
  192. package/decorator/relations/RelationCount.js.map +1 -1
  193. package/decorator/relations/RelationId.js +0 -1
  194. package/decorator/relations/RelationId.js.map +1 -1
  195. package/decorator/transaction/Transaction.js +0 -1
  196. package/decorator/transaction/Transaction.js.map +1 -1
  197. package/decorator/transaction/TransactionManager.js +0 -1
  198. package/decorator/transaction/TransactionManager.js.map +1 -1
  199. package/decorator/transaction/TransactionRepository.js +0 -1
  200. package/decorator/transaction/TransactionRepository.js.map +1 -1
  201. package/decorator/tree/Tree.js +0 -1
  202. package/decorator/tree/Tree.js.map +1 -1
  203. package/decorator/tree/TreeChildren.js +0 -1
  204. package/decorator/tree/TreeChildren.js.map +1 -1
  205. package/decorator/tree/TreeLevelColumn.js +0 -1
  206. package/decorator/tree/TreeLevelColumn.js.map +1 -1
  207. package/decorator/tree/TreeParent.js +0 -1
  208. package/decorator/tree/TreeParent.js.map +1 -1
  209. package/driver/DriverFactory.js +0 -1
  210. package/driver/DriverFactory.js.map +1 -1
  211. package/driver/DriverUtils.js +0 -1
  212. package/driver/DriverUtils.js.map +1 -1
  213. package/driver/Query.js +0 -1
  214. package/driver/Query.js.map +1 -1
  215. package/driver/SqlInMemory.js +0 -1
  216. package/driver/SqlInMemory.js.map +1 -1
  217. package/driver/aurora-data-api/AuroraDataApiConnection.js +0 -1
  218. package/driver/aurora-data-api/AuroraDataApiConnection.js.map +1 -1
  219. package/driver/aurora-data-api/AuroraDataApiDriver.js +0 -1
  220. package/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
  221. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +0 -1
  222. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  223. package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js +0 -1
  224. package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js.map +1 -1
  225. package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +0 -1
  226. package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
  227. package/driver/better-sqlite3/BetterSqlite3Driver.js +0 -1
  228. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  229. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +0 -1
  230. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  231. package/driver/cockroachdb/CockroachDriver.js +0 -1
  232. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  233. package/driver/cockroachdb/CockroachQueryRunner.js +0 -1
  234. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  235. package/driver/cordova/CordovaDriver.js +0 -1
  236. package/driver/cordova/CordovaDriver.js.map +1 -1
  237. package/driver/cordova/CordovaQueryRunner.js +0 -1
  238. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  239. package/driver/expo/ExpoDriver.js +0 -1
  240. package/driver/expo/ExpoDriver.js.map +1 -1
  241. package/driver/expo/ExpoQueryRunner.js +0 -1
  242. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  243. package/driver/mongodb/MongoDriver.js +0 -1
  244. package/driver/mongodb/MongoDriver.js.map +1 -1
  245. package/driver/mongodb/MongoQueryRunner.js +0 -1
  246. package/driver/mongodb/MongoQueryRunner.js.map +1 -1
  247. package/driver/mysql/MysqlDriver.js +0 -1
  248. package/driver/mysql/MysqlDriver.js.map +1 -1
  249. package/driver/mysql/MysqlQueryRunner.js +0 -1
  250. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  251. package/driver/nativescript/NativescriptDriver.js +0 -1
  252. package/driver/nativescript/NativescriptDriver.js.map +1 -1
  253. package/driver/nativescript/NativescriptQueryRunner.js +0 -1
  254. package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  255. package/driver/oracle/OracleDriver.js +0 -1
  256. package/driver/oracle/OracleDriver.js.map +1 -1
  257. package/driver/oracle/OracleQueryRunner.js +0 -1
  258. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  259. package/driver/postgres/PostgresDriver.d.ts +1 -1
  260. package/driver/postgres/PostgresDriver.js +1 -2
  261. package/driver/postgres/PostgresDriver.js.map +1 -1
  262. package/driver/postgres/PostgresQueryRunner.js +0 -1
  263. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  264. package/driver/react-native/ReactNativeDriver.js +0 -1
  265. package/driver/react-native/ReactNativeDriver.js.map +1 -1
  266. package/driver/react-native/ReactNativeQueryRunner.js +0 -1
  267. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  268. package/driver/sap/SapDriver.js +0 -1
  269. package/driver/sap/SapDriver.js.map +1 -1
  270. package/driver/sap/SapQueryRunner.js +0 -1
  271. package/driver/sap/SapQueryRunner.js.map +1 -1
  272. package/driver/sqlite/SqliteDriver.js +0 -1
  273. package/driver/sqlite/SqliteDriver.js.map +1 -1
  274. package/driver/sqlite/SqliteQueryRunner.js +0 -1
  275. package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  276. package/driver/sqlite-abstract/AbstractSqliteDriver.js +0 -1
  277. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  278. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +0 -1
  279. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  280. package/driver/sqljs/SqljsDriver.js +0 -1
  281. package/driver/sqljs/SqljsDriver.js.map +1 -1
  282. package/driver/sqljs/SqljsQueryRunner.js +0 -1
  283. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  284. package/driver/sqlserver/MssqlParameter.js +0 -1
  285. package/driver/sqlserver/MssqlParameter.js.map +1 -1
  286. package/driver/sqlserver/SqlServerDriver.js +0 -1
  287. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  288. package/driver/sqlserver/SqlServerQueryRunner.js +0 -1
  289. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  290. package/entity-manager/EntityManager.d.ts +13 -13
  291. package/entity-manager/EntityManager.js +0 -1
  292. package/entity-manager/EntityManager.js.map +1 -1
  293. package/entity-manager/EntityManagerFactory.js +0 -1
  294. package/entity-manager/EntityManagerFactory.js.map +1 -1
  295. package/entity-manager/MongoEntityManager.d.ts +1 -1
  296. package/entity-manager/MongoEntityManager.js +1 -2
  297. package/entity-manager/MongoEntityManager.js.map +1 -1
  298. package/entity-manager/SqljsEntityManager.js +0 -1
  299. package/entity-manager/SqljsEntityManager.js.map +1 -1
  300. package/entity-schema/EntitySchema.js +0 -1
  301. package/entity-schema/EntitySchema.js.map +1 -1
  302. package/entity-schema/EntitySchemaOptions.js +0 -1
  303. package/entity-schema/EntitySchemaOptions.js.map +1 -1
  304. package/entity-schema/EntitySchemaTransformer.js +0 -1
  305. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  306. package/error/AlreadyHasActiveConnectionError.js +0 -1
  307. package/error/AlreadyHasActiveConnectionError.js.map +1 -1
  308. package/error/CannotAttachTreeChildrenEntityError.js +0 -1
  309. package/error/CannotAttachTreeChildrenEntityError.js.map +1 -1
  310. package/error/CannotConnectAlreadyConnectedError.js +0 -1
  311. package/error/CannotConnectAlreadyConnectedError.js.map +1 -1
  312. package/error/CannotCreateEntityIdMapError.js +0 -1
  313. package/error/CannotCreateEntityIdMapError.js.map +1 -1
  314. package/error/CannotDetermineEntityError.js +0 -1
  315. package/error/CannotDetermineEntityError.js.map +1 -1
  316. package/error/CannotExecuteNotConnectedError.js +0 -1
  317. package/error/CannotExecuteNotConnectedError.js.map +1 -1
  318. package/error/CannotGetEntityManagerNotConnectedError.js +0 -1
  319. package/error/CannotGetEntityManagerNotConnectedError.js.map +1 -1
  320. package/error/CannotReflectMethodParameterTypeError.js +0 -1
  321. package/error/CannotReflectMethodParameterTypeError.js.map +1 -1
  322. package/error/CircularRelationsError.js +0 -1
  323. package/error/CircularRelationsError.js.map +1 -1
  324. package/error/ColumnTypeUndefinedError.js +0 -1
  325. package/error/ColumnTypeUndefinedError.js.map +1 -1
  326. package/error/ConnectionIsNotSetError.js +0 -1
  327. package/error/ConnectionIsNotSetError.js.map +1 -1
  328. package/error/ConnectionNotFoundError.js +0 -1
  329. package/error/ConnectionNotFoundError.js.map +1 -1
  330. package/error/CustomRepositoryCannotInheritRepositoryError.js +0 -1
  331. package/error/CustomRepositoryCannotInheritRepositoryError.js.map +1 -1
  332. package/error/CustomRepositoryDoesNotHaveEntityError.js +0 -1
  333. package/error/CustomRepositoryDoesNotHaveEntityError.js.map +1 -1
  334. package/error/CustomRepositoryNotFoundError.js +0 -1
  335. package/error/CustomRepositoryNotFoundError.js.map +1 -1
  336. package/error/DataTypeNotSupportedError.js +0 -1
  337. package/error/DataTypeNotSupportedError.js.map +1 -1
  338. package/error/DriverOptionNotSetError.js +0 -1
  339. package/error/DriverOptionNotSetError.js.map +1 -1
  340. package/error/DriverPackageNotInstalledError.js +0 -1
  341. package/error/DriverPackageNotInstalledError.js.map +1 -1
  342. package/error/EntityColumnNotFound.js +0 -1
  343. package/error/EntityColumnNotFound.js.map +1 -1
  344. package/error/EntityMetadataNotFoundError.js +0 -1
  345. package/error/EntityMetadataNotFoundError.js.map +1 -1
  346. package/error/EntityNotFoundError.js +0 -1
  347. package/error/EntityNotFoundError.js.map +1 -1
  348. package/error/FindRelationsNotFoundError.js +0 -1
  349. package/error/FindRelationsNotFoundError.js.map +1 -1
  350. package/error/InitializedRelationError.js +0 -1
  351. package/error/InitializedRelationError.js.map +1 -1
  352. package/error/InsertValuesMissingError.js +0 -1
  353. package/error/InsertValuesMissingError.js.map +1 -1
  354. package/error/LimitOnUpdateNotSupportedError.js +0 -1
  355. package/error/LimitOnUpdateNotSupportedError.js.map +1 -1
  356. package/error/LockNotSupportedOnGivenDriverError.js +0 -1
  357. package/error/LockNotSupportedOnGivenDriverError.js.map +1 -1
  358. package/error/MetadataAlreadyExistsError.js +0 -1
  359. package/error/MetadataAlreadyExistsError.js.map +1 -1
  360. package/error/MetadataWithSuchNameAlreadyExistsError.js +0 -1
  361. package/error/MetadataWithSuchNameAlreadyExistsError.js.map +1 -1
  362. package/error/MissingDeleteDateColumnError.js +0 -1
  363. package/error/MissingDeleteDateColumnError.js.map +1 -1
  364. package/error/MissingDriverError.js +0 -1
  365. package/error/MissingDriverError.js.map +1 -1
  366. package/error/MissingJoinColumnError.js +0 -1
  367. package/error/MissingJoinColumnError.js.map +1 -1
  368. package/error/MissingJoinTableError.js +0 -1
  369. package/error/MissingJoinTableError.js.map +1 -1
  370. package/error/MissingPrimaryColumnError.js +0 -1
  371. package/error/MissingPrimaryColumnError.js.map +1 -1
  372. package/error/MustBeEntityError.js +0 -1
  373. package/error/MustBeEntityError.js.map +1 -1
  374. package/error/NamingStrategyNotFoundError.js +0 -1
  375. package/error/NamingStrategyNotFoundError.js.map +1 -1
  376. package/error/NoConnectionForRepositoryError.js +0 -1
  377. package/error/NoConnectionForRepositoryError.js.map +1 -1
  378. package/error/NoConnectionOptionError.js +0 -1
  379. package/error/NoConnectionOptionError.js.map +1 -1
  380. package/error/NoNeedToReleaseEntityManagerError.js +0 -1
  381. package/error/NoNeedToReleaseEntityManagerError.js.map +1 -1
  382. package/error/NoVersionOrUpdateDateColumnError.js +0 -1
  383. package/error/NoVersionOrUpdateDateColumnError.js.map +1 -1
  384. package/error/OffsetWithoutLimitNotSupportedError.js +0 -1
  385. package/error/OffsetWithoutLimitNotSupportedError.js.map +1 -1
  386. package/error/OptimisticLockCanNotBeUsedError.js +0 -1
  387. package/error/OptimisticLockCanNotBeUsedError.js.map +1 -1
  388. package/error/OptimisticLockVersionMismatchError.js +0 -1
  389. package/error/OptimisticLockVersionMismatchError.js.map +1 -1
  390. package/error/PersistedEntityNotFoundError.js +0 -1
  391. package/error/PersistedEntityNotFoundError.js.map +1 -1
  392. package/error/PessimisticLockTransactionRequiredError.js +0 -1
  393. package/error/PessimisticLockTransactionRequiredError.js.map +1 -1
  394. package/error/PrimaryColumnCannotBeNullableError.js +0 -1
  395. package/error/PrimaryColumnCannotBeNullableError.js.map +1 -1
  396. package/error/QueryFailedError.js +0 -1
  397. package/error/QueryFailedError.js.map +1 -1
  398. package/error/QueryRunnerAlreadyReleasedError.js +0 -1
  399. package/error/QueryRunnerAlreadyReleasedError.js.map +1 -1
  400. package/error/QueryRunnerProviderAlreadyReleasedError.js +0 -1
  401. package/error/QueryRunnerProviderAlreadyReleasedError.js.map +1 -1
  402. package/error/RepositoryNotFoundError.js +0 -1
  403. package/error/RepositoryNotFoundError.js.map +1 -1
  404. package/error/RepositoryNotTreeError.js +0 -1
  405. package/error/RepositoryNotTreeError.js.map +1 -1
  406. package/error/ReturningStatementNotSupportedError.js +0 -1
  407. package/error/ReturningStatementNotSupportedError.js.map +1 -1
  408. package/error/SubjectRemovedAndUpdatedError.js +0 -1
  409. package/error/SubjectRemovedAndUpdatedError.js.map +1 -1
  410. package/error/SubjectWithoutIdentifierError.js +0 -1
  411. package/error/SubjectWithoutIdentifierError.js.map +1 -1
  412. package/error/TransactionAlreadyStartedError.js +0 -1
  413. package/error/TransactionAlreadyStartedError.js.map +1 -1
  414. package/error/TransactionNotStartedError.js +0 -1
  415. package/error/TransactionNotStartedError.js.map +1 -1
  416. package/error/TreeRepositoryNotSupportedError.js +0 -1
  417. package/error/TreeRepositoryNotSupportedError.js.map +1 -1
  418. package/error/UpdateValuesMissingError.js +0 -1
  419. package/error/UpdateValuesMissingError.js.map +1 -1
  420. package/error/UsingJoinColumnIsNotAllowedError.js +0 -1
  421. package/error/UsingJoinColumnIsNotAllowedError.js.map +1 -1
  422. package/error/UsingJoinColumnOnlyOnOneSideAllowedError.js +0 -1
  423. package/error/UsingJoinColumnOnlyOnOneSideAllowedError.js.map +1 -1
  424. package/error/UsingJoinTableIsNotAllowedError.js +0 -1
  425. package/error/UsingJoinTableIsNotAllowedError.js.map +1 -1
  426. package/error/UsingJoinTableOnlyOnOneSideAllowedError.js +0 -1
  427. package/error/UsingJoinTableOnlyOnOneSideAllowedError.js.map +1 -1
  428. package/find-options/FindOperator.d.ts +5 -5
  429. package/find-options/FindOperator.js +5 -6
  430. package/find-options/FindOperator.js.map +1 -1
  431. package/find-options/FindOptionsUtils.d.ts +2 -2
  432. package/find-options/FindOptionsUtils.js +0 -1
  433. package/find-options/FindOptionsUtils.js.map +1 -1
  434. package/find-options/operator/Any.js +0 -1
  435. package/find-options/operator/Any.js.map +1 -1
  436. package/find-options/operator/Between.js +0 -1
  437. package/find-options/operator/Between.js.map +1 -1
  438. package/find-options/operator/Equal.js +0 -1
  439. package/find-options/operator/Equal.js.map +1 -1
  440. package/find-options/operator/In.js +0 -1
  441. package/find-options/operator/In.js.map +1 -1
  442. package/find-options/operator/IsNull.js +0 -1
  443. package/find-options/operator/IsNull.js.map +1 -1
  444. package/find-options/operator/LessThan.js +0 -1
  445. package/find-options/operator/LessThan.js.map +1 -1
  446. package/find-options/operator/LessThanOrEqual.js +0 -1
  447. package/find-options/operator/LessThanOrEqual.js.map +1 -1
  448. package/find-options/operator/Like.js +0 -1
  449. package/find-options/operator/Like.js.map +1 -1
  450. package/find-options/operator/MoreThan.js +0 -1
  451. package/find-options/operator/MoreThan.js.map +1 -1
  452. package/find-options/operator/MoreThanOrEqual.js +0 -1
  453. package/find-options/operator/MoreThanOrEqual.js.map +1 -1
  454. package/find-options/operator/Not.js +0 -1
  455. package/find-options/operator/Not.js.map +1 -1
  456. package/find-options/operator/Raw.js +0 -1
  457. package/find-options/operator/Raw.js.map +1 -1
  458. package/index.js +18 -41
  459. package/index.js.map +1 -1
  460. package/logger/AdvancedConsoleLogger.js +0 -1
  461. package/logger/AdvancedConsoleLogger.js.map +1 -1
  462. package/logger/DebugLogger.js +0 -1
  463. package/logger/DebugLogger.js.map +1 -1
  464. package/logger/FileLogger.js +0 -1
  465. package/logger/FileLogger.js.map +1 -1
  466. package/logger/LoggerFactory.js +0 -1
  467. package/logger/LoggerFactory.js.map +1 -1
  468. package/logger/SimpleConsoleLogger.js +0 -1
  469. package/logger/SimpleConsoleLogger.js.map +1 -1
  470. package/metadata/CheckMetadata.js +0 -1
  471. package/metadata/CheckMetadata.js.map +1 -1
  472. package/metadata/ColumnMetadata.js +0 -1
  473. package/metadata/ColumnMetadata.js.map +1 -1
  474. package/metadata/EmbeddedMetadata.js +0 -1
  475. package/metadata/EmbeddedMetadata.js.map +1 -1
  476. package/metadata/EntityListenerMetadata.js +0 -1
  477. package/metadata/EntityListenerMetadata.js.map +1 -1
  478. package/metadata/EntityMetadata.js +0 -1
  479. package/metadata/EntityMetadata.js.map +1 -1
  480. package/metadata/ExclusionMetadata.js +0 -1
  481. package/metadata/ExclusionMetadata.js.map +1 -1
  482. package/metadata/ForeignKeyMetadata.js +0 -1
  483. package/metadata/ForeignKeyMetadata.js.map +1 -1
  484. package/metadata/IndexMetadata.js +0 -1
  485. package/metadata/IndexMetadata.js.map +1 -1
  486. package/metadata/RelationCountMetadata.js +0 -1
  487. package/metadata/RelationCountMetadata.js.map +1 -1
  488. package/metadata/RelationIdMetadata.js +0 -1
  489. package/metadata/RelationIdMetadata.js.map +1 -1
  490. package/metadata/RelationMetadata.js +0 -1
  491. package/metadata/RelationMetadata.js.map +1 -1
  492. package/metadata/UniqueMetadata.js +0 -1
  493. package/metadata/UniqueMetadata.js.map +1 -1
  494. package/metadata/types/EventListenerTypes.js +0 -1
  495. package/metadata/types/EventListenerTypes.js.map +1 -1
  496. package/metadata-args/MetadataArgsStorage.js +0 -1
  497. package/metadata-args/MetadataArgsStorage.js.map +1 -1
  498. package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js +0 -1
  499. package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
  500. package/metadata-builder/EntityMetadataBuilder.js +0 -1
  501. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  502. package/metadata-builder/EntityMetadataValidator.js +0 -1
  503. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  504. package/metadata-builder/JunctionEntityMetadataBuilder.js +0 -1
  505. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  506. package/metadata-builder/MetadataUtils.js +0 -1
  507. package/metadata-builder/MetadataUtils.js.map +1 -1
  508. package/metadata-builder/RelationJoinColumnBuilder.js +0 -1
  509. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  510. package/migration/Migration.js +0 -1
  511. package/migration/Migration.js.map +1 -1
  512. package/migration/MigrationExecutor.js +0 -1
  513. package/migration/MigrationExecutor.js.map +1 -1
  514. package/naming-strategy/DefaultNamingStrategy.js +0 -1
  515. package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  516. package/package.json +2 -2
  517. package/persistence/EntityPersistExecutor.js +0 -1
  518. package/persistence/EntityPersistExecutor.js.map +1 -1
  519. package/persistence/Subject.d.ts +4 -4
  520. package/persistence/Subject.js +4 -5
  521. package/persistence/Subject.js.map +1 -1
  522. package/persistence/SubjectChangedColumnsComputer.js +0 -1
  523. package/persistence/SubjectChangedColumnsComputer.js.map +1 -1
  524. package/persistence/SubjectDatabaseEntityLoader.js +0 -1
  525. package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  526. package/persistence/SubjectExecutor.js +0 -1
  527. package/persistence/SubjectExecutor.js.map +1 -1
  528. package/persistence/SubjectTopoligicalSorter.js +0 -1
  529. package/persistence/SubjectTopoligicalSorter.js.map +1 -1
  530. package/persistence/subject-builder/CascadesSubjectBuilder.js +0 -1
  531. package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  532. package/persistence/subject-builder/ManyToManySubjectBuilder.js +0 -1
  533. package/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  534. package/persistence/subject-builder/OneToManySubjectBuilder.js +0 -1
  535. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  536. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +0 -1
  537. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  538. package/persistence/tree/ClosureSubjectExecutor.js +0 -1
  539. package/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  540. package/persistence/tree/MaterializedPathSubjectExecutor.js +0 -1
  541. package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  542. package/persistence/tree/NestedSetSubjectExecutor.js +0 -1
  543. package/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
  544. package/platform/PlatformTools.js +4 -5
  545. package/platform/PlatformTools.js.map +1 -1
  546. package/query-builder/Alias.d.ts +3 -4
  547. package/query-builder/Alias.js +3 -4
  548. package/query-builder/Alias.js.map +1 -1
  549. package/query-builder/Brackets.js +0 -1
  550. package/query-builder/Brackets.js.map +1 -1
  551. package/query-builder/DeleteQueryBuilder.js +0 -1
  552. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  553. package/query-builder/InsertQueryBuilder.js +0 -1
  554. package/query-builder/InsertQueryBuilder.js.map +1 -1
  555. package/query-builder/JoinAttribute.d.ts +10 -10
  556. package/query-builder/JoinAttribute.js +10 -11
  557. package/query-builder/JoinAttribute.js.map +1 -1
  558. package/query-builder/QueryBuilder.d.ts +1 -1
  559. package/query-builder/QueryBuilder.js +1 -2
  560. package/query-builder/QueryBuilder.js.map +1 -1
  561. package/query-builder/QueryBuilderUtils.js +0 -1
  562. package/query-builder/QueryBuilderUtils.js.map +1 -1
  563. package/query-builder/QueryExpressionMap.d.ts +2 -2
  564. package/query-builder/QueryExpressionMap.js +2 -3
  565. package/query-builder/QueryExpressionMap.js.map +1 -1
  566. package/query-builder/RelationIdLoader.js +0 -1
  567. package/query-builder/RelationIdLoader.js.map +1 -1
  568. package/query-builder/RelationLoader.js +0 -1
  569. package/query-builder/RelationLoader.js.map +1 -1
  570. package/query-builder/RelationQueryBuilder.js +0 -1
  571. package/query-builder/RelationQueryBuilder.js.map +1 -1
  572. package/query-builder/RelationRemover.js +0 -1
  573. package/query-builder/RelationRemover.js.map +1 -1
  574. package/query-builder/RelationUpdater.js +0 -1
  575. package/query-builder/RelationUpdater.js.map +1 -1
  576. package/query-builder/ReturningResultsEntityUpdator.js +0 -1
  577. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  578. package/query-builder/SelectQueryBuilder.js +0 -1
  579. package/query-builder/SelectQueryBuilder.js.map +1 -1
  580. package/query-builder/SoftDeleteQueryBuilder.js +0 -1
  581. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  582. package/query-builder/UpdateQueryBuilder.js +0 -1
  583. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  584. package/query-builder/relation-count/RelationCountAttribute.d.ts +7 -7
  585. package/query-builder/relation-count/RelationCountAttribute.js +7 -8
  586. package/query-builder/relation-count/RelationCountAttribute.js.map +1 -1
  587. package/query-builder/relation-count/RelationCountLoader.js +0 -1
  588. package/query-builder/relation-count/RelationCountLoader.js.map +1 -1
  589. package/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js +0 -1
  590. package/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js.map +1 -1
  591. package/query-builder/relation-id/RelationIdAttribute.d.ts +8 -8
  592. package/query-builder/relation-id/RelationIdAttribute.js +8 -9
  593. package/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
  594. package/query-builder/relation-id/RelationIdLoader.js +0 -1
  595. package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  596. package/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js +0 -1
  597. package/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js.map +1 -1
  598. package/query-builder/result/DeleteResult.js +0 -1
  599. package/query-builder/result/DeleteResult.js.map +1 -1
  600. package/query-builder/result/InsertResult.js +0 -1
  601. package/query-builder/result/InsertResult.js.map +1 -1
  602. package/query-builder/result/UpdateResult.js +0 -1
  603. package/query-builder/result/UpdateResult.js.map +1 -1
  604. package/query-builder/transformer/DocumentToEntityTransformer.js +0 -1
  605. package/query-builder/transformer/DocumentToEntityTransformer.js.map +1 -1
  606. package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js +3 -4
  607. package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
  608. package/query-builder/transformer/PlainObjectToNewEntityTransformer.js +0 -1
  609. package/query-builder/transformer/PlainObjectToNewEntityTransformer.js.map +1 -1
  610. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +0 -1
  611. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  612. package/query-runner/BaseQueryRunner.js +0 -1
  613. package/query-runner/BaseQueryRunner.js.map +1 -1
  614. package/repository/AbstractRepository.d.ts +2 -2
  615. package/repository/AbstractRepository.js +2 -3
  616. package/repository/AbstractRepository.js.map +1 -1
  617. package/repository/BaseEntity.d.ts +1 -1
  618. package/repository/BaseEntity.js +1 -2
  619. package/repository/BaseEntity.js.map +1 -1
  620. package/repository/MongoRepository.js +0 -1
  621. package/repository/MongoRepository.js.map +1 -1
  622. package/repository/Repository.d.ts +1 -1
  623. package/repository/Repository.js +1 -2
  624. package/repository/Repository.js.map +1 -1
  625. package/repository/RepositoryFactory.js +0 -1
  626. package/repository/RepositoryFactory.js.map +1 -1
  627. package/repository/TreeRepository.js +0 -1
  628. package/repository/TreeRepository.js.map +1 -1
  629. package/schema-builder/MongoSchemaBuilder.js +0 -1
  630. package/schema-builder/MongoSchemaBuilder.js.map +1 -1
  631. package/schema-builder/RdbmsSchemaBuilder.d.ts +2 -2
  632. package/schema-builder/RdbmsSchemaBuilder.js +2 -3
  633. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  634. package/schema-builder/table/Table.d.ts +1 -1
  635. package/schema-builder/table/Table.js +1 -2
  636. package/schema-builder/table/Table.js.map +1 -1
  637. package/schema-builder/table/TableCheck.js +0 -1
  638. package/schema-builder/table/TableCheck.js.map +1 -1
  639. package/schema-builder/table/TableColumn.js +0 -1
  640. package/schema-builder/table/TableColumn.js.map +1 -1
  641. package/schema-builder/table/TableExclusion.js +0 -1
  642. package/schema-builder/table/TableExclusion.js.map +1 -1
  643. package/schema-builder/table/TableForeignKey.js +0 -1
  644. package/schema-builder/table/TableForeignKey.js.map +1 -1
  645. package/schema-builder/table/TableIndex.js +0 -1
  646. package/schema-builder/table/TableIndex.js.map +1 -1
  647. package/schema-builder/table/TableUnique.js +0 -1
  648. package/schema-builder/table/TableUnique.js.map +1 -1
  649. package/schema-builder/util/TableUtils.js +0 -1
  650. package/schema-builder/util/TableUtils.js.map +1 -1
  651. package/schema-builder/view/View.js +0 -1
  652. package/schema-builder/view/View.js.map +1 -1
  653. package/subscriber/Broadcaster.js +0 -1
  654. package/subscriber/Broadcaster.js.map +1 -1
  655. package/subscriber/BroadcasterResult.js +0 -1
  656. package/subscriber/BroadcasterResult.js.map +1 -1
  657. package/util/ApplyValueTransformers.js +0 -1
  658. package/util/ApplyValueTransformers.js.map +1 -1
  659. package/util/DateUtils.js +0 -1
  660. package/util/DateUtils.js.map +1 -1
  661. package/util/DepGraph.js +0 -1
  662. package/util/DepGraph.js.map +1 -1
  663. package/util/DirectoryExportedClassesLoader.js +0 -1
  664. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  665. package/util/ObjectUtils.js +0 -1
  666. package/util/ObjectUtils.js.map +1 -1
  667. package/util/OrmUtils.js +0 -1
  668. package/util/OrmUtils.js.map +1 -1
  669. package/util/RandomGenerator.js +0 -1
  670. package/util/RandomGenerator.js.map +1 -1
  671. package/util/StringUtils.js +0 -1
  672. package/util/StringUtils.js.map +1 -1
  673. package/util/VersionUtils.js +0 -1
  674. package/util/VersionUtils.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/JoinAttribute.ts"],"names":[],"mappings":"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","file":"JoinAttribute.js","sourcesContent":["import {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {Connection} from \"../connection/Connection\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\nimport {QueryBuilderUtils} from \"./QueryBuilderUtils\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\nimport {Alias} from \"./Alias\";\nimport {ObjectUtils} from \"../util/ObjectUtils\";\n\n/**\n * Stores all join attributes which will be used to build a JOIN query.\n */\nexport class JoinAttribute {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Join direction.\n */\n direction: \"LEFT\"|\"INNER\";\n\n /**\n * Alias of the joined (destination) table.\n */\n alias: Alias;\n\n /**\n * Joined table, entity target, or relation in \"post.category\" format.\n */\n entityOrProperty: Function|string;\n\n /**\n * Extra condition applied to \"ON\" section of join.\n */\n condition?: string;\n\n /**\n * Property + alias of the object where to joined data should be mapped.\n */\n mapToProperty?: string;\n\n /**\n * Indicates if user maps one or many objects from the join.\n */\n isMappingMany?: boolean;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private connection: Connection,\n private queryExpressionMap: QueryExpressionMap,\n joinAttribute?: JoinAttribute) {\n ObjectUtils.assign(this, joinAttribute || {});\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n get isMany(): boolean {\n if (this.isMappingMany !== undefined)\n return this.isMappingMany;\n\n if (this.relation)\n return this.relation.isManyToMany || this.relation.isOneToMany;\n\n return false;\n }\n\n\n isSelectedCache: boolean;\n isSelectedEvaluated: boolean = false;\n /**\n * Indicates if this join is selected.\n */\n get isSelected(): boolean {\n if (!this.isSelectedEvaluated) {\n let getValue = () => {\n for (const select of this.queryExpressionMap.selects) {\n if (select.selection === this.alias.name)\n return true;\n\n if (this.metadata && !!this.metadata.columns.find(column => select.selection === this.alias.name + \".\" + column.propertyPath))\n return true;\n }\n\n return false;\n };\n this.isSelectedCache = getValue();\n this.isSelectedEvaluated = true;\n }\n return this.isSelectedCache;\n\n }\n\n /**\n * Name of the table which we should join.\n */\n get tablePath(): string {\n return this.metadata ? this.metadata.tablePath : this.entityOrProperty as string;\n }\n\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get parentAlias(): string|undefined {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n\n return this.entityOrProperty.substr(0, this.entityOrProperty.indexOf(\".\"));\n }\n\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get relationPropertyPath(): string|undefined {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n\n return this.entityOrProperty.substr(this.entityOrProperty.indexOf(\".\") + 1);\n }\n\n relationCache: RelationMetadata|undefined;\n relationEvaluated: boolean = false;\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n * Relation can be undefined if entityOrProperty is regular entity or custom table.\n */\n get relation(): RelationMetadata | undefined {\n if (!this.relationEvaluated) {\n let getValue = () => {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n\n const relationOwnerSelection = this.queryExpressionMap.findAliasByName(this.parentAlias!);\n let relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(this.relationPropertyPath!);\n\n if (relation) {\n return relation;\n }\n\n if (relationOwnerSelection.metadata.parentEntityMetadata) {\n relation = relationOwnerSelection.metadata.parentEntityMetadata.findRelationWithPropertyPath(this.relationPropertyPath!);\n if (relation) {\n return relation;\n }\n }\n\n throw new Error(`Relation with property path ${this.relationPropertyPath} in entity was not found.`);\n };\n this.relationCache = getValue.bind(this)();\n this.relationEvaluated = true;\n }\n return this.relationCache;\n }\n\n /**\n * Metadata of the joined entity.\n * If table without entity was joined, then it will return undefined.\n */\n get metadata(): EntityMetadata|undefined {\n\n // entityOrProperty is relation, e.g. \"post.category\"\n if (this.relation)\n return this.relation.inverseEntityMetadata;\n\n // entityOrProperty is Entity class\n if (this.connection.hasMetadata(this.entityOrProperty))\n return this.connection.getMetadata(this.entityOrProperty);\n\n return undefined;\n\n /*if (typeof this.entityOrProperty === \"string\") { // entityOrProperty is a custom table\n\n // first try to find entity with such name, this is needed when entity does not have a target class,\n // and its target is a string name (scenario when plain old javascript is used or entity schema is loaded from files)\n const metadata = this.connection.entityMetadatas.find(metadata => metadata.name === this.entityOrProperty);\n if (metadata)\n return metadata;\n\n // check if we have entity with such table name, and use its metadata if found\n return this.connection.entityMetadatas.find(metadata => metadata.tableName === this.entityOrProperty);\n }*/\n }\n\n /**\n * Generates alias of junction table, whose ids we get.\n */\n get junctionAlias(): string {\n if (!this.relation)\n throw new Error(`Cannot get junction table for join without relation.`);\n\n return this.relation.isOwning ? this.parentAlias + \"_\" + this.alias.name : this.alias.name + \"_\" + this.parentAlias;\n }\n\n get mapToPropertyParentAlias(): string|undefined {\n if (!this.mapToProperty)\n return undefined;\n\n return this.mapToProperty!.split(\".\")[0];\n }\n\n get mapToPropertyPropertyName(): string|undefined {\n if (!this.mapToProperty)\n return undefined;\n\n return this.mapToProperty!.split(\".\")[1];\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/JoinAttribute.ts"],"names":[],"mappings":"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","file":"JoinAttribute.js","sourcesContent":["import {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {Connection} from \"../connection/Connection\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\nimport {QueryBuilderUtils} from \"./QueryBuilderUtils\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\nimport {Alias} from \"./Alias\";\nimport {ObjectUtils} from \"../util/ObjectUtils\";\n\n/**\n * Stores all join attributes which will be used to build a JOIN query.\n */\nexport class JoinAttribute {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Join direction.\n */\n direction: \"LEFT\"|\"INNER\";\n\n /**\n * Alias of the joined (destination) table.\n */\n alias: Alias;\n\n /**\n * Joined table, entity target, or relation in \"post.category\" format.\n */\n entityOrProperty: Function|string;\n\n /**\n * Extra condition applied to \"ON\" section of join.\n */\n condition?: string;\n\n /**\n * Property + alias of the object where to joined data should be mapped.\n */\n mapToProperty?: string;\n\n /**\n * Indicates if user maps one or many objects from the join.\n */\n isMappingMany?: boolean;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private connection: Connection,\n private queryExpressionMap: QueryExpressionMap,\n joinAttribute?: JoinAttribute) {\n ObjectUtils.assign(this, joinAttribute || {});\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n get isMany(): boolean {\n if (this.isMappingMany !== undefined)\n return this.isMappingMany;\n\n if (this.relation)\n return this.relation.isManyToMany || this.relation.isOneToMany;\n\n return false;\n }\n\n\n isSelectedCache: boolean;\n isSelectedEvaluated: boolean = false;\n /**\n * Indicates if this join is selected.\n */\n get isSelected(): boolean {\n if (!this.isSelectedEvaluated) {\n let getValue = () => {\n for (const select of this.queryExpressionMap.selects) {\n if (select.selection === this.alias.name)\n return true;\n\n if (this.metadata && !!this.metadata.columns.find(column => select.selection === this.alias.name + \".\" + column.propertyPath))\n return true;\n }\n\n return false;\n };\n this.isSelectedCache = getValue();\n this.isSelectedEvaluated = true;\n }\n return this.isSelectedCache;\n\n }\n\n /**\n * Name of the table which we should join.\n */\n get tablePath(): string {\n return this.metadata ? this.metadata.tablePath : this.entityOrProperty as string;\n }\n\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get parentAlias(): string|undefined {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n\n return this.entityOrProperty.substr(0, this.entityOrProperty.indexOf(\".\"));\n }\n\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get relationPropertyPath(): string|undefined {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n\n return this.entityOrProperty.substr(this.entityOrProperty.indexOf(\".\") + 1);\n }\n\n relationCache: RelationMetadata|undefined;\n relationEvaluated: boolean = false;\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n * Relation can be undefined if entityOrProperty is regular entity or custom table.\n */\n get relation(): RelationMetadata | undefined {\n if (!this.relationEvaluated) {\n let getValue = () => {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n\n const relationOwnerSelection = this.queryExpressionMap.findAliasByName(this.parentAlias!);\n let relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(this.relationPropertyPath!);\n\n if (relation) {\n return relation;\n }\n\n if (relationOwnerSelection.metadata.parentEntityMetadata) {\n relation = relationOwnerSelection.metadata.parentEntityMetadata.findRelationWithPropertyPath(this.relationPropertyPath!);\n if (relation) {\n return relation;\n }\n }\n\n throw new Error(`Relation with property path ${this.relationPropertyPath} in entity was not found.`);\n };\n this.relationCache = getValue.bind(this)();\n this.relationEvaluated = true;\n }\n return this.relationCache;\n }\n\n /**\n * Metadata of the joined entity.\n * If table without entity was joined, then it will return undefined.\n */\n get metadata(): EntityMetadata|undefined {\n\n // entityOrProperty is relation, e.g. \"post.category\"\n if (this.relation)\n return this.relation.inverseEntityMetadata;\n\n // entityOrProperty is Entity class\n if (this.connection.hasMetadata(this.entityOrProperty))\n return this.connection.getMetadata(this.entityOrProperty);\n\n return undefined;\n\n /*if (typeof this.entityOrProperty === \"string\") { // entityOrProperty is a custom table\n\n // first try to find entity with such name, this is needed when entity does not have a target class,\n // and its target is a string name (scenario when plain old javascript is used or entity schema is loaded from files)\n const metadata = this.connection.entityMetadatas.find(metadata => metadata.name === this.entityOrProperty);\n if (metadata)\n return metadata;\n\n // check if we have entity with such table name, and use its metadata if found\n return this.connection.entityMetadatas.find(metadata => metadata.tableName === this.entityOrProperty);\n }*/\n }\n\n /**\n * Generates alias of junction table, whose ids we get.\n */\n get junctionAlias(): string {\n if (!this.relation)\n throw new Error(`Cannot get junction table for join without relation.`);\n\n return this.relation.isOwning ? this.parentAlias + \"_\" + this.alias.name : this.alias.name + \"_\" + this.parentAlias;\n }\n\n get mapToPropertyParentAlias(): string|undefined {\n if (!this.mapToProperty)\n return undefined;\n\n return this.mapToProperty!.split(\".\")[0];\n }\n\n get mapToPropertyPropertyName(): string|undefined {\n if (!this.mapToProperty)\n return undefined;\n\n return this.mapToProperty!.split(\".\")[1];\n }\n\n}\n"],"sourceRoot":".."}
@@ -45,7 +45,7 @@ export declare abstract class QueryBuilder<Entity> {
45
45
  /**
46
46
  * Gets the main alias string used in this query builder.
47
47
  */
48
- get alias(): string;
48
+ readonly alias: string;
49
49
  /**
50
50
  * Creates SELECT query.
51
51
  * Replaces all previous selections if they exist.
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueryBuilder = void 0;
4
3
  var tslib_1 = require("tslib");
5
4
  var QueryExpressionMap_1 = require("./QueryExpressionMap");
6
5
  var Brackets_1 = require("./Brackets");
@@ -57,7 +56,7 @@ var QueryBuilder = /** @class */ (function () {
57
56
  throw new Error("Main alias is not set"); // todo: better exception
58
57
  return this.expressionMap.mainAlias.name;
59
58
  },
60
- enumerable: false,
59
+ enumerable: true,
61
60
  configurable: true
62
61
  });
63
62
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/QueryBuilder.ts"],"names":[],"mappings":"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","file":"QueryBuilder.js","sourcesContent":["import {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {Connection} from \"../connection/Connection\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\nimport {SelectQueryBuilder} from \"./SelectQueryBuilder\";\nimport {UpdateQueryBuilder} from \"./UpdateQueryBuilder\";\nimport {DeleteQueryBuilder} from \"./DeleteQueryBuilder\";\nimport {SoftDeleteQueryBuilder} from \"./SoftDeleteQueryBuilder\";\nimport {InsertQueryBuilder} from \"./InsertQueryBuilder\";\nimport {RelationQueryBuilder} from \"./RelationQueryBuilder\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {Alias} from \"./Alias\";\nimport {Brackets} from \"./Brackets\";\nimport {QueryDeepPartialEntity} from \"./QueryPartialEntity\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {SqljsDriver} from \"../driver/sqljs/SqljsDriver\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {EntitySchema} from \"../\";\nimport {FindOperator} from \"../find-options/FindOperator\";\nimport {In} from \"../find-options/operator/In\";\nimport {EntityColumnNotFound} from \"../error/EntityColumnNotFound\";\n\n// todo: completely cover query builder with tests\n// todo: entityOrProperty can be target name. implement proper behaviour if it is.\n// todo: check in persistment if id exist on object and throw exception (can be in partial selection?)\n// todo: fix problem with long aliases eg getMaxIdentifierLength\n// todo: fix replacing in .select(\"COUNT(post.id) AS cnt\") statement\n// todo: implement joinAlways in relations and relationId\n// todo: finish partial selection\n// todo: sugar methods like: .addCount and .selectCount, selectCountAndMap, selectSum, selectSumAndMap, ...\n// todo: implement @Select decorator\n// todo: add select and map functions\n\n// todo: implement relation/entity loading and setting them into properties within a separate query\n// .loadAndMap(\"post.categories\", \"post.categories\", qb => ...)\n// .loadAndMap(\"post.categories\", Category, qb => ...)\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport abstract class QueryBuilder<Entity> {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection on which QueryBuilder was created.\n */\n readonly connection: Connection;\n\n /**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\n readonly expressionMap: QueryExpressionMap;\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Query runner used to execute query builder query.\n */\n protected queryRunner?: QueryRunner;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n constructor(queryBuilder: QueryBuilder<any>);\n\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n constructor(connection: Connection, queryRunner?: QueryRunner);\n\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n constructor(connectionOrQueryBuilder: Connection|QueryBuilder<any>, queryRunner?: QueryRunner) {\n if (connectionOrQueryBuilder instanceof QueryBuilder) {\n this.connection = connectionOrQueryBuilder.connection;\n this.queryRunner = connectionOrQueryBuilder.queryRunner;\n this.expressionMap = connectionOrQueryBuilder.expressionMap.clone();\n\n } else {\n this.connection = connectionOrQueryBuilder;\n this.queryRunner = queryRunner;\n this.expressionMap = new QueryExpressionMap(this.connection);\n }\n }\n\n // -------------------------------------------------------------------------\n // Abstract Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated sql query without parameters being replaced.\n */\n abstract getQuery(): string;\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Gets the main alias string used in this query builder.\n */\n get alias(): string {\n if (!this.expressionMap.mainAlias)\n throw new Error(`Main alias is not set`); // todo: better exception\n\n return this.expressionMap.mainAlias.name;\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates SELECT query.\n * Replaces all previous selections if they exist.\n */\n select(): SelectQueryBuilder<Entity>;\n\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n select(selection: string, selectionAliasName?: string): SelectQueryBuilder<Entity>;\n\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n select(selection: string[]): SelectQueryBuilder<Entity>;\n\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n select(selection?: string|string[], selectionAliasName?: string): SelectQueryBuilder<Entity> {\n this.expressionMap.queryType = \"select\";\n if (Array.isArray(selection)) {\n this.expressionMap.selects = selection.map(selection => ({ selection: selection }));\n } else if (selection) {\n this.expressionMap.selects = [{ selection: selection, aliasName: selectionAliasName }];\n }\n\n // loading it dynamically because of circular issue\n const SelectQueryBuilderCls = require(\"./SelectQueryBuilder\").SelectQueryBuilder;\n if (this instanceof SelectQueryBuilderCls)\n return this as any;\n\n return new SelectQueryBuilderCls(this);\n }\n\n /**\n * Creates INSERT query.\n */\n insert(): InsertQueryBuilder<Entity> {\n this.expressionMap.queryType = \"insert\";\n\n // loading it dynamically because of circular issue\n const InsertQueryBuilderCls = require(\"./InsertQueryBuilder\").InsertQueryBuilder;\n if (this instanceof InsertQueryBuilderCls)\n return this as any;\n\n return new InsertQueryBuilderCls(this);\n }\n\n /**\n * Creates UPDATE query and applies given update values.\n */\n update(): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query and applies given update values.\n */\n update(updateSet: QueryDeepPartialEntity<Entity>): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query for the given entity and applies given update values.\n */\n update<Entity>(entity: EntityTarget<Entity>, updateSet?: QueryDeepPartialEntity<Entity>): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query for the given table name and applies given update values.\n */\n update(tableName: string, updateSet?: QueryDeepPartialEntity<Entity>): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query and applies given update values.\n */\n update(entityOrTableNameUpdateSet?: EntityTarget<any>|ObjectLiteral, maybeUpdateSet?: ObjectLiteral): UpdateQueryBuilder<any> {\n const updateSet = maybeUpdateSet ? maybeUpdateSet : entityOrTableNameUpdateSet as ObjectLiteral|undefined;\n entityOrTableNameUpdateSet = entityOrTableNameUpdateSet instanceof EntitySchema ? entityOrTableNameUpdateSet.options.name : entityOrTableNameUpdateSet;\n\n if (entityOrTableNameUpdateSet instanceof Function || typeof entityOrTableNameUpdateSet === \"string\") {\n const mainAlias = this.createFromAlias(entityOrTableNameUpdateSet);\n this.expressionMap.setMainAlias(mainAlias);\n }\n\n this.expressionMap.queryType = \"update\";\n this.expressionMap.valuesSet = updateSet;\n\n // loading it dynamically because of circular issue\n const UpdateQueryBuilderCls = require(\"./UpdateQueryBuilder\").UpdateQueryBuilder;\n if (this instanceof UpdateQueryBuilderCls)\n return this as any;\n\n return new UpdateQueryBuilderCls(this);\n }\n\n /**\n * Creates DELETE query.\n */\n delete(): DeleteQueryBuilder<Entity> {\n this.expressionMap.queryType = \"delete\";\n\n // loading it dynamically because of circular issue\n const DeleteQueryBuilderCls = require(\"./DeleteQueryBuilder\").DeleteQueryBuilder;\n if (this instanceof DeleteQueryBuilderCls)\n return this as any;\n\n return new DeleteQueryBuilderCls(this);\n }\n\n softDelete(): SoftDeleteQueryBuilder<any> {\n this.expressionMap.queryType = \"soft-delete\";\n\n // loading it dynamically because of circular issue\n const SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this as any;\n\n return new SoftDeleteQueryBuilderCls(this);\n }\n\n restore(): SoftDeleteQueryBuilder<any> {\n this.expressionMap.queryType = \"restore\";\n\n // loading it dynamically because of circular issue\n const SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this as any;\n\n return new SoftDeleteQueryBuilderCls(this);\n }\n\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n relation(propertyPath: string): RelationQueryBuilder<Entity>;\n\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n relation<T>(entityTarget: EntityTarget<T>, propertyPath: string): RelationQueryBuilder<T>;\n\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n relation(entityTargetOrPropertyPath: Function|string, maybePropertyPath?: string): RelationQueryBuilder<Entity> {\n const entityTarget = arguments.length === 2 ? entityTargetOrPropertyPath : undefined;\n const propertyPath = arguments.length === 2 ? maybePropertyPath as string : entityTargetOrPropertyPath as string;\n\n this.expressionMap.queryType = \"relation\";\n this.expressionMap.relationPropertyPath = propertyPath;\n\n if (entityTarget) {\n const mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n }\n\n // loading it dynamically because of circular issue\n const RelationQueryBuilderCls = require(\"./RelationQueryBuilder\").RelationQueryBuilder;\n if (this instanceof RelationQueryBuilderCls)\n return this as any;\n\n return new RelationQueryBuilderCls(this);\n }\n\n\n /**\n * Checks if given relation exists in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n hasRelation<T>(target: EntityTarget<T>, relation: string): boolean;\n\n /**\n * Checks if given relations exist in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n hasRelation<T>(target: EntityTarget<T>, relation: string[]): boolean;\n\n /**\n * Checks if given relation or relations exist in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n hasRelation<T>(target: EntityTarget<T>, relation: string|string[]): boolean {\n const entityMetadata = this.connection.getMetadata(target);\n const relations = Array.isArray(relation) ? relation : [relation];\n return relations.every(relation => {\n return !!entityMetadata.findRelationWithPropertyPath(relation);\n });\n }\n\n /**\n * Sets parameter name and its value.\n */\n setParameter(key: string, value: any): this {\n this.expressionMap.parameters[key] = value;\n return this;\n }\n\n /**\n * Adds all parameters from the given object.\n */\n setParameters(parameters: ObjectLiteral): this {\n\n // remove function parameters\n Object.keys(parameters).forEach(key => {\n if (parameters[key] instanceof Function) {\n throw new Error(`Function parameter isn't supported in the parameters. Please check \"${key}\" parameter.`);\n }\n });\n\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setParameters(parameters);\n\n Object.keys(parameters).forEach(key => this.setParameter(key, parameters[key]));\n return this;\n }\n\n /**\n * Adds native parameters from the given object.\n */\n setNativeParameters(parameters: ObjectLiteral): this {\n\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setNativeParameters(parameters);\n\n Object.keys(parameters).forEach(key => {\n this.expressionMap.nativeParameters[key] = parameters[key];\n });\n return this;\n }\n\n /**\n * Gets all parameters.\n */\n getParameters(): ObjectLiteral {\n const parameters: ObjectLiteral = Object.assign({}, this.expressionMap.parameters);\n\n // add discriminator column parameter if it exist\n if (this.expressionMap.mainAlias && this.expressionMap.mainAlias.hasMetadata) {\n const metadata = this.expressionMap.mainAlias!.metadata;\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n const values = metadata.childEntityMetadatas\n .filter(childMetadata => childMetadata.discriminatorColumn)\n .map(childMetadata => childMetadata.discriminatorValue);\n values.push(metadata.discriminatorValue);\n parameters[\"discriminatorColumnValues\"] = values;\n }\n }\n\n return parameters;\n }\n\n /**\n * Prints sql to stdout using console.log.\n */\n printSql(): this { // TODO rename to logSql()\n const [query, parameters] = this.getQueryAndParameters();\n this.connection.logger.logQuery(query, parameters);\n return this;\n }\n\n /**\n * Gets generated sql that will be executed.\n * Parameters in the query are escaped for the currently used driver.\n */\n getSql(): string {\n return this.getQueryAndParameters()[0];\n }\n\n /**\n * Gets query to be executed with all parameters used in it.\n */\n getQueryAndParameters(): [string, any[]] {\n // this execution order is important because getQuery method generates this.expressionMap.nativeParameters values\n const query = this.getQuery();\n const parameters = this.getParameters();\n return this.connection.driver.escapeQueryWithParameters(query, parameters, this.expressionMap.nativeParameters);\n }\n\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n async execute(): Promise<any> {\n const [sql, parameters] = this.getQueryAndParameters();\n const queryRunner = this.obtainQueryRunner();\n try {\n return await queryRunner.query(sql, parameters); // await is needed here because we are using finally\n\n } finally {\n if (queryRunner !== this.queryRunner) { // means we created our own query runner\n await queryRunner.release();\n }\n if (this.connection.driver instanceof SqljsDriver) {\n await this.connection.driver.autoSave();\n }\n }\n }\n\n /**\n * Creates a completely new query builder.\n * Uses same query runner as current QueryBuilder.\n */\n createQueryBuilder(): this {\n return new (this.constructor as any)(this.connection, this.queryRunner);\n }\n\n /**\n * Clones query builder as it is.\n * Note: it uses new query runner, if you want query builder that uses exactly same query runner,\n * you can create query builder using its constructor, for example new SelectQueryBuilder(queryBuilder)\n * where queryBuilder is cloned QueryBuilder.\n */\n clone(): this {\n return new (this.constructor as any)(this);\n }\n\n /**\n * Disables escaping.\n */\n disableEscaping(): this {\n this.expressionMap.disableEscaping = false;\n return this;\n }\n\n /**\n * Escapes table name, column name or alias name using current database's escaping character.\n */\n escape(name: string): string {\n if (!this.expressionMap.disableEscaping)\n return name;\n return this.connection.driver.escape(name);\n }\n\n /**\n * Sets or overrides query builder's QueryRunner.\n */\n setQueryRunner(queryRunner: QueryRunner): this {\n this.queryRunner = queryRunner;\n return this;\n }\n\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n * Enabled by default.\n */\n callListeners(enabled: boolean): this {\n this.expressionMap.callListeners = enabled;\n return this;\n }\n\n /**\n * If set to true the query will be wrapped into a transaction.\n */\n useTransaction(enabled: boolean): this {\n this.expressionMap.useTransaction = enabled;\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets escaped table name with schema name if SqlServer driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n protected getTableName(tablePath: string): string {\n return tablePath.split(\".\")\n .map(i => {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return this.escape(i);\n }).join(\".\");\n }\n\n /**\n * Gets name of the table where insert should be performed.\n */\n protected getMainTableName(): string {\n if (!this.expressionMap.mainAlias)\n throw new Error(`Entity where values should be inserted is not specified. Call \"qb.into(entity)\" method to specify it.`);\n\n if (this.expressionMap.mainAlias.hasMetadata)\n return this.expressionMap.mainAlias.metadata.tablePath;\n\n return this.expressionMap.mainAlias.tablePath!;\n }\n\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n protected createFromAlias(entityTarget: EntityTarget<any>|((qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>), aliasName?: string): Alias {\n\n // if table has a metadata then find it to properly escape its properties\n // const metadata = this.connection.entityMetadatas.find(metadata => metadata.tableName === tableName);\n if (this.connection.hasMetadata(entityTarget)) {\n const metadata = this.connection.getMetadata(entityTarget);\n\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n metadata: this.connection.getMetadata(entityTarget),\n tablePath: metadata.tablePath\n });\n\n } else {\n if (typeof entityTarget === \"string\") {\n const isSubquery = entityTarget.substr(0, 1) === \"(\" && entityTarget.substr(-1) === \")\";\n\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n tablePath: !isSubquery ? entityTarget as string : undefined,\n subQuery: isSubquery ? entityTarget : undefined,\n });\n }\n\n const subQueryBuilder: SelectQueryBuilder<any> = (entityTarget as any)(((this as any) as SelectQueryBuilder<any>).subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n const subquery = subQueryBuilder.getQuery();\n\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n subQuery: subquery\n });\n }\n }\n\n /**\n * Replaces all entity's propertyName to name in the given statement.\n */\n protected replacePropertyNames(statement: string) {\n this.expressionMap.aliases.forEach(alias => {\n if (!alias.hasMetadata) return;\n const replaceAliasNamePrefix = this.expressionMap.aliasNamePrefixingEnabled ? alias.name + \"\\\\.\" : \"\";\n const replacementAliasNamePrefix = this.expressionMap.aliasNamePrefixingEnabled ? this.escape(alias.name) + \".\" : \"\";\n alias.metadata.columns.forEach(column => {\n const expression = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + column.propertyPath + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(column.databaseName) + \"$2\");\n const expression2 = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + column.propertyName + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression2, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(column.databaseName) + \"$2\");\n });\n alias.metadata.relations.forEach(relation => {\n [...relation.joinColumns, ...relation.inverseJoinColumns].forEach(joinColumn => {\n const expression = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + relation.propertyPath + \"\\\\.\" + joinColumn.referencedColumn!.propertyPath + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(joinColumn.databaseName) + \"$2\"); // todo: fix relation.joinColumns[0], what if multiple columns\n });\n if (relation.joinColumns.length > 0) {\n const expression = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + relation.propertyPath + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(relation.joinColumns[0].databaseName) + \"$2\"); // todo: fix relation.joinColumns[0], what if multiple columns\n }\n });\n });\n return statement;\n }\n\n /**\n * Creates \"WHERE\" expression.\n */\n protected createWhereExpression() {\n const conditionsArray = [];\n\n const whereExpression = this.createWhereExpressionString();\n whereExpression.trim() && conditionsArray.push(this.createWhereExpressionString());\n\n if (this.expressionMap.mainAlias!.hasMetadata) {\n const metadata = this.expressionMap.mainAlias!.metadata;\n // Adds the global condition of \"non-deleted\" for the entity with delete date columns in select query.\n if (this.expressionMap.queryType === \"select\" && !this.expressionMap.withDeleted && metadata.deleteDateColumn) {\n const column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias!.name + \".\" + metadata.deleteDateColumn.propertyName\n : metadata.deleteDateColumn.propertyName;\n\n const condition = `${this.replacePropertyNames(column)} IS NULL`;\n conditionsArray.push(condition);\n }\n\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n const column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias!.name + \".\" + metadata.discriminatorColumn.databaseName\n : metadata.discriminatorColumn.databaseName;\n\n const condition = `${this.replacePropertyNames(column)} IN (:...discriminatorColumnValues)`;\n conditionsArray.push(condition);\n }\n }\n\n if (this.expressionMap.extraAppendedAndWhereCondition) {\n const condition = this.replacePropertyNames(this.expressionMap.extraAppendedAndWhereCondition);\n conditionsArray.push(condition);\n }\n\n if (!conditionsArray.length) {\n return \" \";\n } else if (conditionsArray.length === 1) {\n return ` WHERE ${conditionsArray[0]}`;\n } else {\n return ` WHERE ( ${conditionsArray.join(\" ) AND ( \")} )`;\n }\n }\n\n /**\n * Creates \"RETURNING\" / \"OUTPUT\" expression.\n */\n protected createReturningExpression(): string {\n const columns = this.getReturningColumns();\n const driver = this.connection.driver;\n\n // also add columns we must auto-return to perform entity updation\n // if user gave his own returning\n if (typeof this.expressionMap.returning !== \"string\" &&\n this.expressionMap.extraReturningColumns.length > 0 &&\n driver.isReturningSqlSupported()) {\n columns.push(...this.expressionMap.extraReturningColumns.filter(column => {\n return columns.indexOf(column) === -1;\n }));\n }\n\n if (columns.length) {\n let columnsExpression = columns.map(column => {\n const name = this.escape(column.databaseName);\n if (driver instanceof SqlServerDriver) {\n if (this.expressionMap.queryType === \"insert\" || this.expressionMap.queryType === \"update\" || this.expressionMap.queryType === \"soft-delete\" || this.expressionMap.queryType === \"restore\") {\n return \"INSERTED.\" + name;\n } else {\n return this.escape(this.getMainTableName()) + \".\" + name;\n }\n } else {\n return name;\n }\n }).join(\", \");\n\n if (driver instanceof OracleDriver) {\n columnsExpression += \" INTO \" + columns.map(column => {\n const parameterName = \"output_\" + column.databaseName;\n this.expressionMap.nativeParameters[parameterName] = { type: driver.columnTypeToNativeParameter(column.type), dir: driver.oracle.BIND_OUT };\n return this.connection.driver.createParameter(parameterName, Object.keys(this.expressionMap.nativeParameters).length);\n }).join(\", \");\n }\n\n if (driver instanceof SqlServerDriver) {\n if (this.expressionMap.queryType === \"insert\" || this.expressionMap.queryType === \"update\") {\n columnsExpression += \" INTO @OutputTable\";\n }\n }\n\n return columnsExpression;\n\n } else if (typeof this.expressionMap.returning === \"string\") {\n return this.expressionMap.returning;\n }\n\n return \"\";\n }\n\n /**\n * If returning / output cause is set to array of column names,\n * then this method will return all column metadatas of those column names.\n */\n protected getReturningColumns(): ColumnMetadata[] {\n const columns: ColumnMetadata[] = [];\n if (Array.isArray(this.expressionMap.returning)) {\n (this.expressionMap.returning as string[]).forEach(columnName => {\n if (this.expressionMap.mainAlias!.hasMetadata) {\n columns.push(...this.expressionMap.mainAlias!.metadata.findColumnsWithPropertyPath(columnName));\n }\n });\n }\n return columns;\n }\n\n /**\n * Concatenates all added where expressions into one string.\n */\n protected createWhereExpressionString(): string {\n return this.expressionMap.wheres.map((where, index) => {\n switch (where.type) {\n case \"and\":\n return (index > 0 ? \"AND \" : \"\") + this.replacePropertyNames(where.condition);\n case \"or\":\n return (index > 0 ? \"OR \" : \"\") + this.replacePropertyNames(where.condition);\n default:\n return this.replacePropertyNames(where.condition);\n }\n }).join(\" \");\n }\n\n /**\n * Creates \"WHERE\" expression and variables for the given \"ids\".\n */\n protected createWhereIdsExpression(ids: any|any[]): string {\n const metadata = this.expressionMap.mainAlias!.metadata;\n const normalized = (Array.isArray(ids) ? ids : [ids]).map(id => metadata.ensureEntityIdMap(id));\n\n // using in(...ids) for single primary key entities\n if (!metadata.hasMultiplePrimaryKeys\n && metadata.embeddeds.length === 0\n ) {\n const primaryColumn = metadata.primaryColumns[0];\n\n // getEntityValue will try to transform `In`, it is a bug\n // todo: remove this transformer check after #2390 is fixed\n if (!primaryColumn.transformer) {\n return this.computeWhereParameter({\n [primaryColumn.propertyName]: In(\n normalized.map(id => primaryColumn.getEntityValue(id, false))\n )\n });\n }\n }\n\n // create shortcuts for better readability\n const alias = this.expressionMap.aliasNamePrefixingEnabled ? this.escape(this.expressionMap.mainAlias!.name) + \".\" : \"\";\n let parameterIndex = Object.keys(this.expressionMap.nativeParameters).length;\n const whereStrings = normalized.map((id, index) => {\n const whereSubStrings: string[] = [];\n metadata.primaryColumns.forEach((primaryColumn, secondIndex) => {\n const parameterName = \"id_\" + index + \"_\" + secondIndex;\n // whereSubStrings.push(alias + this.escape(primaryColumn.databaseName) + \"=:id_\" + index + \"_\" + secondIndex);\n whereSubStrings.push(alias + this.escape(primaryColumn.databaseName) + \" = \" + this.connection.driver.createParameter(parameterName, parameterIndex));\n this.expressionMap.nativeParameters[parameterName] = primaryColumn.getEntityValue(id, true);\n parameterIndex++;\n });\n return whereSubStrings.join(\" AND \");\n });\n\n return whereStrings.length > 1\n ? \"(\" + whereStrings.map(whereString => \"(\" + whereString + \")\").join(\" OR \") + \")\"\n : whereStrings[0];\n }\n\n /**\n * Computes given where argument - transforms to a where string all forms it can take.\n */\n protected computeWhereParameter(where: string|((qb: this) => string)|Brackets|ObjectLiteral|ObjectLiteral[]) {\n if (typeof where === \"string\")\n return where;\n\n if (where instanceof Brackets) {\n const whereQueryBuilder = this.createQueryBuilder();\n where.whereFactory(whereQueryBuilder as any);\n const whereString = whereQueryBuilder.createWhereExpressionString();\n this.setParameters(whereQueryBuilder.getParameters());\n return whereString ? \"(\" + whereString + \")\" : \"\";\n\n } else if (where instanceof Function) {\n return where(this);\n\n } else if (where instanceof Object) {\n const wheres: ObjectLiteral[] = Array.isArray(where) ? where : [where];\n let andConditions: string[];\n let parameterIndex = Object.keys(this.expressionMap.nativeParameters).length;\n\n if (this.expressionMap.mainAlias!.hasMetadata) {\n andConditions = wheres.map((where, whereIndex) => {\n const propertyPaths = EntityMetadata.createPropertyPath(this.expressionMap.mainAlias!.metadata, where);\n\n return propertyPaths.map((propertyPath, propertyIndex) => {\n const columns = this.expressionMap.mainAlias!.metadata.findColumnsWithPropertyPath(propertyPath);\n\n if (!columns.length) {\n throw new EntityColumnNotFound(propertyPath);\n }\n\n return columns.map((column, columnIndex) => {\n\n const aliasPath = this.expressionMap.aliasNamePrefixingEnabled ? `${this.alias}.${propertyPath}` : column.propertyPath;\n let parameterValue = column.getEntityValue(where, true);\n const parameterName = \"where_\" + whereIndex + \"_\" + propertyIndex + \"_\" + columnIndex;\n const parameterBaseCount = Object.keys(this.expressionMap.nativeParameters).filter(x => x.startsWith(parameterName)).length;\n\n if (parameterValue === null) {\n return `${aliasPath} IS NULL`;\n\n } else if (parameterValue instanceof FindOperator) {\n let parameters: any[] = [];\n if (parameterValue.useParameter) {\n const realParameterValues: any[] = parameterValue.multipleParameters ? parameterValue.value : [parameterValue.value];\n realParameterValues.forEach((realParameterValue, realParameterValueIndex) => {\n this.expressionMap.nativeParameters[parameterName + (parameterBaseCount + realParameterValueIndex)] = realParameterValue;\n parameterIndex++;\n parameters.push(this.connection.driver.createParameter(parameterName + (parameterBaseCount + realParameterValueIndex), parameterIndex - 1));\n });\n }\n\n return this.computeFindOperatorExpression(parameterValue, aliasPath, parameters);\n } else {\n this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex++;\n const parameter = this.connection.driver.createParameter(parameterName, parameterIndex - 1);\n return `${aliasPath} = ${parameter}`;\n }\n\n }).filter(expression => !!expression).join(\" AND \");\n }).filter(expression => !!expression).join(\" AND \");\n });\n\n } else {\n andConditions = wheres.map((where, whereIndex) => {\n return Object.keys(where).map((key, parameterIndex) => {\n const parameterValue = where[key];\n const aliasPath = this.expressionMap.aliasNamePrefixingEnabled ? `${this.alias}.${key}` : key;\n if (parameterValue === null) {\n return `${aliasPath} IS NULL`;\n\n } else {\n const parameterName = \"where_\" + whereIndex + \"_\" + parameterIndex;\n this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex++;\n return `${aliasPath} = ${this.connection.driver.createParameter(parameterName, parameterIndex - 1)}`;\n }\n }).join(\" AND \");\n });\n }\n\n if (andConditions.length > 1)\n return andConditions.map(where => \"(\" + where + \")\").join(\" OR \");\n\n return andConditions.join(\"\");\n }\n\n return \"\";\n }\n\n /**\n * Gets SQL needs to be inserted into final query.\n */\n protected computeFindOperatorExpression(operator: FindOperator<any>, aliasPath: string, parameters: any[]): string {\n switch (operator.type) {\n case \"not\":\n if (operator.child) {\n return `NOT(${this.computeFindOperatorExpression(operator.child, aliasPath, parameters)})`;\n } else {\n return `${aliasPath} != ${parameters[0]}`;\n }\n case \"lessThan\":\n return `${aliasPath} < ${parameters[0]}`;\n case \"lessThanOrEqual\":\n return `${aliasPath} <= ${parameters[0]}`;\n case \"moreThan\":\n return `${aliasPath} > ${parameters[0]}`;\n case \"moreThanOrEqual\":\n return `${aliasPath} >= ${parameters[0]}`;\n case \"equal\":\n return `${aliasPath} = ${parameters[0]}`;\n case \"like\":\n return `${aliasPath} LIKE ${parameters[0]}`;\n case \"between\":\n return `${aliasPath} BETWEEN ${parameters[0]} AND ${parameters[1]}`;\n case \"in\":\n if ((this.connection.driver instanceof OracleDriver || this.connection.driver instanceof MysqlDriver) && parameters.length === 0) {\n return `${aliasPath} IN (null)`;\n }\n return `${aliasPath} IN (${parameters.join(\", \")})`;\n case \"any\":\n return `${aliasPath} = ANY(${parameters[0]})`;\n case \"isNull\":\n return `${aliasPath} IS NULL`;\n case \"raw\":\n if (typeof operator.value === \"function\") {\n return operator.value(aliasPath);\n } else {\n return `${aliasPath} = ${operator.value}`;\n }\n }\n\n throw new TypeError(`Unsupported FindOperator ${FindOperator.constructor.name}`);\n }\n\n /**\n * Creates a query builder used to execute sql queries inside this query builder.\n */\n protected obtainQueryRunner() {\n return this.queryRunner || this.connection.createQueryRunner();\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/QueryBuilder.ts"],"names":[],"mappings":"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","file":"QueryBuilder.js","sourcesContent":["import {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {Connection} from \"../connection/Connection\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\nimport {SelectQueryBuilder} from \"./SelectQueryBuilder\";\nimport {UpdateQueryBuilder} from \"./UpdateQueryBuilder\";\nimport {DeleteQueryBuilder} from \"./DeleteQueryBuilder\";\nimport {SoftDeleteQueryBuilder} from \"./SoftDeleteQueryBuilder\";\nimport {InsertQueryBuilder} from \"./InsertQueryBuilder\";\nimport {RelationQueryBuilder} from \"./RelationQueryBuilder\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {Alias} from \"./Alias\";\nimport {Brackets} from \"./Brackets\";\nimport {QueryDeepPartialEntity} from \"./QueryPartialEntity\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {SqljsDriver} from \"../driver/sqljs/SqljsDriver\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {EntitySchema} from \"../\";\nimport {FindOperator} from \"../find-options/FindOperator\";\nimport {In} from \"../find-options/operator/In\";\nimport {EntityColumnNotFound} from \"../error/EntityColumnNotFound\";\n\n// todo: completely cover query builder with tests\n// todo: entityOrProperty can be target name. implement proper behaviour if it is.\n// todo: check in persistment if id exist on object and throw exception (can be in partial selection?)\n// todo: fix problem with long aliases eg getMaxIdentifierLength\n// todo: fix replacing in .select(\"COUNT(post.id) AS cnt\") statement\n// todo: implement joinAlways in relations and relationId\n// todo: finish partial selection\n// todo: sugar methods like: .addCount and .selectCount, selectCountAndMap, selectSum, selectSumAndMap, ...\n// todo: implement @Select decorator\n// todo: add select and map functions\n\n// todo: implement relation/entity loading and setting them into properties within a separate query\n// .loadAndMap(\"post.categories\", \"post.categories\", qb => ...)\n// .loadAndMap(\"post.categories\", Category, qb => ...)\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport abstract class QueryBuilder<Entity> {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection on which QueryBuilder was created.\n */\n readonly connection: Connection;\n\n /**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\n readonly expressionMap: QueryExpressionMap;\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Query runner used to execute query builder query.\n */\n protected queryRunner?: QueryRunner;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n constructor(queryBuilder: QueryBuilder<any>);\n\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n constructor(connection: Connection, queryRunner?: QueryRunner);\n\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n constructor(connectionOrQueryBuilder: Connection|QueryBuilder<any>, queryRunner?: QueryRunner) {\n if (connectionOrQueryBuilder instanceof QueryBuilder) {\n this.connection = connectionOrQueryBuilder.connection;\n this.queryRunner = connectionOrQueryBuilder.queryRunner;\n this.expressionMap = connectionOrQueryBuilder.expressionMap.clone();\n\n } else {\n this.connection = connectionOrQueryBuilder;\n this.queryRunner = queryRunner;\n this.expressionMap = new QueryExpressionMap(this.connection);\n }\n }\n\n // -------------------------------------------------------------------------\n // Abstract Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated sql query without parameters being replaced.\n */\n abstract getQuery(): string;\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Gets the main alias string used in this query builder.\n */\n get alias(): string {\n if (!this.expressionMap.mainAlias)\n throw new Error(`Main alias is not set`); // todo: better exception\n\n return this.expressionMap.mainAlias.name;\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates SELECT query.\n * Replaces all previous selections if they exist.\n */\n select(): SelectQueryBuilder<Entity>;\n\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n select(selection: string, selectionAliasName?: string): SelectQueryBuilder<Entity>;\n\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n select(selection: string[]): SelectQueryBuilder<Entity>;\n\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n select(selection?: string|string[], selectionAliasName?: string): SelectQueryBuilder<Entity> {\n this.expressionMap.queryType = \"select\";\n if (Array.isArray(selection)) {\n this.expressionMap.selects = selection.map(selection => ({ selection: selection }));\n } else if (selection) {\n this.expressionMap.selects = [{ selection: selection, aliasName: selectionAliasName }];\n }\n\n // loading it dynamically because of circular issue\n const SelectQueryBuilderCls = require(\"./SelectQueryBuilder\").SelectQueryBuilder;\n if (this instanceof SelectQueryBuilderCls)\n return this as any;\n\n return new SelectQueryBuilderCls(this);\n }\n\n /**\n * Creates INSERT query.\n */\n insert(): InsertQueryBuilder<Entity> {\n this.expressionMap.queryType = \"insert\";\n\n // loading it dynamically because of circular issue\n const InsertQueryBuilderCls = require(\"./InsertQueryBuilder\").InsertQueryBuilder;\n if (this instanceof InsertQueryBuilderCls)\n return this as any;\n\n return new InsertQueryBuilderCls(this);\n }\n\n /**\n * Creates UPDATE query and applies given update values.\n */\n update(): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query and applies given update values.\n */\n update(updateSet: QueryDeepPartialEntity<Entity>): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query for the given entity and applies given update values.\n */\n update<Entity>(entity: EntityTarget<Entity>, updateSet?: QueryDeepPartialEntity<Entity>): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query for the given table name and applies given update values.\n */\n update(tableName: string, updateSet?: QueryDeepPartialEntity<Entity>): UpdateQueryBuilder<Entity>;\n\n /**\n * Creates UPDATE query and applies given update values.\n */\n update(entityOrTableNameUpdateSet?: EntityTarget<any>|ObjectLiteral, maybeUpdateSet?: ObjectLiteral): UpdateQueryBuilder<any> {\n const updateSet = maybeUpdateSet ? maybeUpdateSet : entityOrTableNameUpdateSet as ObjectLiteral|undefined;\n entityOrTableNameUpdateSet = entityOrTableNameUpdateSet instanceof EntitySchema ? entityOrTableNameUpdateSet.options.name : entityOrTableNameUpdateSet;\n\n if (entityOrTableNameUpdateSet instanceof Function || typeof entityOrTableNameUpdateSet === \"string\") {\n const mainAlias = this.createFromAlias(entityOrTableNameUpdateSet);\n this.expressionMap.setMainAlias(mainAlias);\n }\n\n this.expressionMap.queryType = \"update\";\n this.expressionMap.valuesSet = updateSet;\n\n // loading it dynamically because of circular issue\n const UpdateQueryBuilderCls = require(\"./UpdateQueryBuilder\").UpdateQueryBuilder;\n if (this instanceof UpdateQueryBuilderCls)\n return this as any;\n\n return new UpdateQueryBuilderCls(this);\n }\n\n /**\n * Creates DELETE query.\n */\n delete(): DeleteQueryBuilder<Entity> {\n this.expressionMap.queryType = \"delete\";\n\n // loading it dynamically because of circular issue\n const DeleteQueryBuilderCls = require(\"./DeleteQueryBuilder\").DeleteQueryBuilder;\n if (this instanceof DeleteQueryBuilderCls)\n return this as any;\n\n return new DeleteQueryBuilderCls(this);\n }\n\n softDelete(): SoftDeleteQueryBuilder<any> {\n this.expressionMap.queryType = \"soft-delete\";\n\n // loading it dynamically because of circular issue\n const SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this as any;\n\n return new SoftDeleteQueryBuilderCls(this);\n }\n\n restore(): SoftDeleteQueryBuilder<any> {\n this.expressionMap.queryType = \"restore\";\n\n // loading it dynamically because of circular issue\n const SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this as any;\n\n return new SoftDeleteQueryBuilderCls(this);\n }\n\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n relation(propertyPath: string): RelationQueryBuilder<Entity>;\n\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n relation<T>(entityTarget: EntityTarget<T>, propertyPath: string): RelationQueryBuilder<T>;\n\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n relation(entityTargetOrPropertyPath: Function|string, maybePropertyPath?: string): RelationQueryBuilder<Entity> {\n const entityTarget = arguments.length === 2 ? entityTargetOrPropertyPath : undefined;\n const propertyPath = arguments.length === 2 ? maybePropertyPath as string : entityTargetOrPropertyPath as string;\n\n this.expressionMap.queryType = \"relation\";\n this.expressionMap.relationPropertyPath = propertyPath;\n\n if (entityTarget) {\n const mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n }\n\n // loading it dynamically because of circular issue\n const RelationQueryBuilderCls = require(\"./RelationQueryBuilder\").RelationQueryBuilder;\n if (this instanceof RelationQueryBuilderCls)\n return this as any;\n\n return new RelationQueryBuilderCls(this);\n }\n\n\n /**\n * Checks if given relation exists in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n hasRelation<T>(target: EntityTarget<T>, relation: string): boolean;\n\n /**\n * Checks if given relations exist in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n hasRelation<T>(target: EntityTarget<T>, relation: string[]): boolean;\n\n /**\n * Checks if given relation or relations exist in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n hasRelation<T>(target: EntityTarget<T>, relation: string|string[]): boolean {\n const entityMetadata = this.connection.getMetadata(target);\n const relations = Array.isArray(relation) ? relation : [relation];\n return relations.every(relation => {\n return !!entityMetadata.findRelationWithPropertyPath(relation);\n });\n }\n\n /**\n * Sets parameter name and its value.\n */\n setParameter(key: string, value: any): this {\n this.expressionMap.parameters[key] = value;\n return this;\n }\n\n /**\n * Adds all parameters from the given object.\n */\n setParameters(parameters: ObjectLiteral): this {\n\n // remove function parameters\n Object.keys(parameters).forEach(key => {\n if (parameters[key] instanceof Function) {\n throw new Error(`Function parameter isn't supported in the parameters. Please check \"${key}\" parameter.`);\n }\n });\n\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setParameters(parameters);\n\n Object.keys(parameters).forEach(key => this.setParameter(key, parameters[key]));\n return this;\n }\n\n /**\n * Adds native parameters from the given object.\n */\n setNativeParameters(parameters: ObjectLiteral): this {\n\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setNativeParameters(parameters);\n\n Object.keys(parameters).forEach(key => {\n this.expressionMap.nativeParameters[key] = parameters[key];\n });\n return this;\n }\n\n /**\n * Gets all parameters.\n */\n getParameters(): ObjectLiteral {\n const parameters: ObjectLiteral = Object.assign({}, this.expressionMap.parameters);\n\n // add discriminator column parameter if it exist\n if (this.expressionMap.mainAlias && this.expressionMap.mainAlias.hasMetadata) {\n const metadata = this.expressionMap.mainAlias!.metadata;\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n const values = metadata.childEntityMetadatas\n .filter(childMetadata => childMetadata.discriminatorColumn)\n .map(childMetadata => childMetadata.discriminatorValue);\n values.push(metadata.discriminatorValue);\n parameters[\"discriminatorColumnValues\"] = values;\n }\n }\n\n return parameters;\n }\n\n /**\n * Prints sql to stdout using console.log.\n */\n printSql(): this { // TODO rename to logSql()\n const [query, parameters] = this.getQueryAndParameters();\n this.connection.logger.logQuery(query, parameters);\n return this;\n }\n\n /**\n * Gets generated sql that will be executed.\n * Parameters in the query are escaped for the currently used driver.\n */\n getSql(): string {\n return this.getQueryAndParameters()[0];\n }\n\n /**\n * Gets query to be executed with all parameters used in it.\n */\n getQueryAndParameters(): [string, any[]] {\n // this execution order is important because getQuery method generates this.expressionMap.nativeParameters values\n const query = this.getQuery();\n const parameters = this.getParameters();\n return this.connection.driver.escapeQueryWithParameters(query, parameters, this.expressionMap.nativeParameters);\n }\n\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n async execute(): Promise<any> {\n const [sql, parameters] = this.getQueryAndParameters();\n const queryRunner = this.obtainQueryRunner();\n try {\n return await queryRunner.query(sql, parameters); // await is needed here because we are using finally\n\n } finally {\n if (queryRunner !== this.queryRunner) { // means we created our own query runner\n await queryRunner.release();\n }\n if (this.connection.driver instanceof SqljsDriver) {\n await this.connection.driver.autoSave();\n }\n }\n }\n\n /**\n * Creates a completely new query builder.\n * Uses same query runner as current QueryBuilder.\n */\n createQueryBuilder(): this {\n return new (this.constructor as any)(this.connection, this.queryRunner);\n }\n\n /**\n * Clones query builder as it is.\n * Note: it uses new query runner, if you want query builder that uses exactly same query runner,\n * you can create query builder using its constructor, for example new SelectQueryBuilder(queryBuilder)\n * where queryBuilder is cloned QueryBuilder.\n */\n clone(): this {\n return new (this.constructor as any)(this);\n }\n\n /**\n * Disables escaping.\n */\n disableEscaping(): this {\n this.expressionMap.disableEscaping = false;\n return this;\n }\n\n /**\n * Escapes table name, column name or alias name using current database's escaping character.\n */\n escape(name: string): string {\n if (!this.expressionMap.disableEscaping)\n return name;\n return this.connection.driver.escape(name);\n }\n\n /**\n * Sets or overrides query builder's QueryRunner.\n */\n setQueryRunner(queryRunner: QueryRunner): this {\n this.queryRunner = queryRunner;\n return this;\n }\n\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n * Enabled by default.\n */\n callListeners(enabled: boolean): this {\n this.expressionMap.callListeners = enabled;\n return this;\n }\n\n /**\n * If set to true the query will be wrapped into a transaction.\n */\n useTransaction(enabled: boolean): this {\n this.expressionMap.useTransaction = enabled;\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets escaped table name with schema name if SqlServer driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n protected getTableName(tablePath: string): string {\n return tablePath.split(\".\")\n .map(i => {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return this.escape(i);\n }).join(\".\");\n }\n\n /**\n * Gets name of the table where insert should be performed.\n */\n protected getMainTableName(): string {\n if (!this.expressionMap.mainAlias)\n throw new Error(`Entity where values should be inserted is not specified. Call \"qb.into(entity)\" method to specify it.`);\n\n if (this.expressionMap.mainAlias.hasMetadata)\n return this.expressionMap.mainAlias.metadata.tablePath;\n\n return this.expressionMap.mainAlias.tablePath!;\n }\n\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n protected createFromAlias(entityTarget: EntityTarget<any>|((qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>), aliasName?: string): Alias {\n\n // if table has a metadata then find it to properly escape its properties\n // const metadata = this.connection.entityMetadatas.find(metadata => metadata.tableName === tableName);\n if (this.connection.hasMetadata(entityTarget)) {\n const metadata = this.connection.getMetadata(entityTarget);\n\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n metadata: this.connection.getMetadata(entityTarget),\n tablePath: metadata.tablePath\n });\n\n } else {\n if (typeof entityTarget === \"string\") {\n const isSubquery = entityTarget.substr(0, 1) === \"(\" && entityTarget.substr(-1) === \")\";\n\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n tablePath: !isSubquery ? entityTarget as string : undefined,\n subQuery: isSubquery ? entityTarget : undefined,\n });\n }\n\n const subQueryBuilder: SelectQueryBuilder<any> = (entityTarget as any)(((this as any) as SelectQueryBuilder<any>).subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n const subquery = subQueryBuilder.getQuery();\n\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n subQuery: subquery\n });\n }\n }\n\n /**\n * Replaces all entity's propertyName to name in the given statement.\n */\n protected replacePropertyNames(statement: string) {\n this.expressionMap.aliases.forEach(alias => {\n if (!alias.hasMetadata) return;\n const replaceAliasNamePrefix = this.expressionMap.aliasNamePrefixingEnabled ? alias.name + \"\\\\.\" : \"\";\n const replacementAliasNamePrefix = this.expressionMap.aliasNamePrefixingEnabled ? this.escape(alias.name) + \".\" : \"\";\n alias.metadata.columns.forEach(column => {\n const expression = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + column.propertyPath + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(column.databaseName) + \"$2\");\n const expression2 = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + column.propertyName + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression2, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(column.databaseName) + \"$2\");\n });\n alias.metadata.relations.forEach(relation => {\n [...relation.joinColumns, ...relation.inverseJoinColumns].forEach(joinColumn => {\n const expression = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + relation.propertyPath + \"\\\\.\" + joinColumn.referencedColumn!.propertyPath + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(joinColumn.databaseName) + \"$2\"); // todo: fix relation.joinColumns[0], what if multiple columns\n });\n if (relation.joinColumns.length > 0) {\n const expression = \"([ =\\(]|^.{0})\" + replaceAliasNamePrefix + relation.propertyPath + \"([ =\\)\\,]|.{0}$)\";\n statement = statement.replace(new RegExp(expression, \"gm\"), \"$1\" + replacementAliasNamePrefix + this.escape(relation.joinColumns[0].databaseName) + \"$2\"); // todo: fix relation.joinColumns[0], what if multiple columns\n }\n });\n });\n return statement;\n }\n\n /**\n * Creates \"WHERE\" expression.\n */\n protected createWhereExpression() {\n const conditionsArray = [];\n\n const whereExpression = this.createWhereExpressionString();\n whereExpression.trim() && conditionsArray.push(this.createWhereExpressionString());\n\n if (this.expressionMap.mainAlias!.hasMetadata) {\n const metadata = this.expressionMap.mainAlias!.metadata;\n // Adds the global condition of \"non-deleted\" for the entity with delete date columns in select query.\n if (this.expressionMap.queryType === \"select\" && !this.expressionMap.withDeleted && metadata.deleteDateColumn) {\n const column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias!.name + \".\" + metadata.deleteDateColumn.propertyName\n : metadata.deleteDateColumn.propertyName;\n\n const condition = `${this.replacePropertyNames(column)} IS NULL`;\n conditionsArray.push(condition);\n }\n\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n const column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias!.name + \".\" + metadata.discriminatorColumn.databaseName\n : metadata.discriminatorColumn.databaseName;\n\n const condition = `${this.replacePropertyNames(column)} IN (:...discriminatorColumnValues)`;\n conditionsArray.push(condition);\n }\n }\n\n if (this.expressionMap.extraAppendedAndWhereCondition) {\n const condition = this.replacePropertyNames(this.expressionMap.extraAppendedAndWhereCondition);\n conditionsArray.push(condition);\n }\n\n if (!conditionsArray.length) {\n return \" \";\n } else if (conditionsArray.length === 1) {\n return ` WHERE ${conditionsArray[0]}`;\n } else {\n return ` WHERE ( ${conditionsArray.join(\" ) AND ( \")} )`;\n }\n }\n\n /**\n * Creates \"RETURNING\" / \"OUTPUT\" expression.\n */\n protected createReturningExpression(): string {\n const columns = this.getReturningColumns();\n const driver = this.connection.driver;\n\n // also add columns we must auto-return to perform entity updation\n // if user gave his own returning\n if (typeof this.expressionMap.returning !== \"string\" &&\n this.expressionMap.extraReturningColumns.length > 0 &&\n driver.isReturningSqlSupported()) {\n columns.push(...this.expressionMap.extraReturningColumns.filter(column => {\n return columns.indexOf(column) === -1;\n }));\n }\n\n if (columns.length) {\n let columnsExpression = columns.map(column => {\n const name = this.escape(column.databaseName);\n if (driver instanceof SqlServerDriver) {\n if (this.expressionMap.queryType === \"insert\" || this.expressionMap.queryType === \"update\" || this.expressionMap.queryType === \"soft-delete\" || this.expressionMap.queryType === \"restore\") {\n return \"INSERTED.\" + name;\n } else {\n return this.escape(this.getMainTableName()) + \".\" + name;\n }\n } else {\n return name;\n }\n }).join(\", \");\n\n if (driver instanceof OracleDriver) {\n columnsExpression += \" INTO \" + columns.map(column => {\n const parameterName = \"output_\" + column.databaseName;\n this.expressionMap.nativeParameters[parameterName] = { type: driver.columnTypeToNativeParameter(column.type), dir: driver.oracle.BIND_OUT };\n return this.connection.driver.createParameter(parameterName, Object.keys(this.expressionMap.nativeParameters).length);\n }).join(\", \");\n }\n\n if (driver instanceof SqlServerDriver) {\n if (this.expressionMap.queryType === \"insert\" || this.expressionMap.queryType === \"update\") {\n columnsExpression += \" INTO @OutputTable\";\n }\n }\n\n return columnsExpression;\n\n } else if (typeof this.expressionMap.returning === \"string\") {\n return this.expressionMap.returning;\n }\n\n return \"\";\n }\n\n /**\n * If returning / output cause is set to array of column names,\n * then this method will return all column metadatas of those column names.\n */\n protected getReturningColumns(): ColumnMetadata[] {\n const columns: ColumnMetadata[] = [];\n if (Array.isArray(this.expressionMap.returning)) {\n (this.expressionMap.returning as string[]).forEach(columnName => {\n if (this.expressionMap.mainAlias!.hasMetadata) {\n columns.push(...this.expressionMap.mainAlias!.metadata.findColumnsWithPropertyPath(columnName));\n }\n });\n }\n return columns;\n }\n\n /**\n * Concatenates all added where expressions into one string.\n */\n protected createWhereExpressionString(): string {\n return this.expressionMap.wheres.map((where, index) => {\n switch (where.type) {\n case \"and\":\n return (index > 0 ? \"AND \" : \"\") + this.replacePropertyNames(where.condition);\n case \"or\":\n return (index > 0 ? \"OR \" : \"\") + this.replacePropertyNames(where.condition);\n default:\n return this.replacePropertyNames(where.condition);\n }\n }).join(\" \");\n }\n\n /**\n * Creates \"WHERE\" expression and variables for the given \"ids\".\n */\n protected createWhereIdsExpression(ids: any|any[]): string {\n const metadata = this.expressionMap.mainAlias!.metadata;\n const normalized = (Array.isArray(ids) ? ids : [ids]).map(id => metadata.ensureEntityIdMap(id));\n\n // using in(...ids) for single primary key entities\n if (!metadata.hasMultiplePrimaryKeys\n && metadata.embeddeds.length === 0\n ) {\n const primaryColumn = metadata.primaryColumns[0];\n\n // getEntityValue will try to transform `In`, it is a bug\n // todo: remove this transformer check after #2390 is fixed\n if (!primaryColumn.transformer) {\n return this.computeWhereParameter({\n [primaryColumn.propertyName]: In(\n normalized.map(id => primaryColumn.getEntityValue(id, false))\n )\n });\n }\n }\n\n // create shortcuts for better readability\n const alias = this.expressionMap.aliasNamePrefixingEnabled ? this.escape(this.expressionMap.mainAlias!.name) + \".\" : \"\";\n let parameterIndex = Object.keys(this.expressionMap.nativeParameters).length;\n const whereStrings = normalized.map((id, index) => {\n const whereSubStrings: string[] = [];\n metadata.primaryColumns.forEach((primaryColumn, secondIndex) => {\n const parameterName = \"id_\" + index + \"_\" + secondIndex;\n // whereSubStrings.push(alias + this.escape(primaryColumn.databaseName) + \"=:id_\" + index + \"_\" + secondIndex);\n whereSubStrings.push(alias + this.escape(primaryColumn.databaseName) + \" = \" + this.connection.driver.createParameter(parameterName, parameterIndex));\n this.expressionMap.nativeParameters[parameterName] = primaryColumn.getEntityValue(id, true);\n parameterIndex++;\n });\n return whereSubStrings.join(\" AND \");\n });\n\n return whereStrings.length > 1\n ? \"(\" + whereStrings.map(whereString => \"(\" + whereString + \")\").join(\" OR \") + \")\"\n : whereStrings[0];\n }\n\n /**\n * Computes given where argument - transforms to a where string all forms it can take.\n */\n protected computeWhereParameter(where: string|((qb: this) => string)|Brackets|ObjectLiteral|ObjectLiteral[]) {\n if (typeof where === \"string\")\n return where;\n\n if (where instanceof Brackets) {\n const whereQueryBuilder = this.createQueryBuilder();\n where.whereFactory(whereQueryBuilder as any);\n const whereString = whereQueryBuilder.createWhereExpressionString();\n this.setParameters(whereQueryBuilder.getParameters());\n return whereString ? \"(\" + whereString + \")\" : \"\";\n\n } else if (where instanceof Function) {\n return where(this);\n\n } else if (where instanceof Object) {\n const wheres: ObjectLiteral[] = Array.isArray(where) ? where : [where];\n let andConditions: string[];\n let parameterIndex = Object.keys(this.expressionMap.nativeParameters).length;\n\n if (this.expressionMap.mainAlias!.hasMetadata) {\n andConditions = wheres.map((where, whereIndex) => {\n const propertyPaths = EntityMetadata.createPropertyPath(this.expressionMap.mainAlias!.metadata, where);\n\n return propertyPaths.map((propertyPath, propertyIndex) => {\n const columns = this.expressionMap.mainAlias!.metadata.findColumnsWithPropertyPath(propertyPath);\n\n if (!columns.length) {\n throw new EntityColumnNotFound(propertyPath);\n }\n\n return columns.map((column, columnIndex) => {\n\n const aliasPath = this.expressionMap.aliasNamePrefixingEnabled ? `${this.alias}.${propertyPath}` : column.propertyPath;\n let parameterValue = column.getEntityValue(where, true);\n const parameterName = \"where_\" + whereIndex + \"_\" + propertyIndex + \"_\" + columnIndex;\n const parameterBaseCount = Object.keys(this.expressionMap.nativeParameters).filter(x => x.startsWith(parameterName)).length;\n\n if (parameterValue === null) {\n return `${aliasPath} IS NULL`;\n\n } else if (parameterValue instanceof FindOperator) {\n let parameters: any[] = [];\n if (parameterValue.useParameter) {\n const realParameterValues: any[] = parameterValue.multipleParameters ? parameterValue.value : [parameterValue.value];\n realParameterValues.forEach((realParameterValue, realParameterValueIndex) => {\n this.expressionMap.nativeParameters[parameterName + (parameterBaseCount + realParameterValueIndex)] = realParameterValue;\n parameterIndex++;\n parameters.push(this.connection.driver.createParameter(parameterName + (parameterBaseCount + realParameterValueIndex), parameterIndex - 1));\n });\n }\n\n return this.computeFindOperatorExpression(parameterValue, aliasPath, parameters);\n } else {\n this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex++;\n const parameter = this.connection.driver.createParameter(parameterName, parameterIndex - 1);\n return `${aliasPath} = ${parameter}`;\n }\n\n }).filter(expression => !!expression).join(\" AND \");\n }).filter(expression => !!expression).join(\" AND \");\n });\n\n } else {\n andConditions = wheres.map((where, whereIndex) => {\n return Object.keys(where).map((key, parameterIndex) => {\n const parameterValue = where[key];\n const aliasPath = this.expressionMap.aliasNamePrefixingEnabled ? `${this.alias}.${key}` : key;\n if (parameterValue === null) {\n return `${aliasPath} IS NULL`;\n\n } else {\n const parameterName = \"where_\" + whereIndex + \"_\" + parameterIndex;\n this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex++;\n return `${aliasPath} = ${this.connection.driver.createParameter(parameterName, parameterIndex - 1)}`;\n }\n }).join(\" AND \");\n });\n }\n\n if (andConditions.length > 1)\n return andConditions.map(where => \"(\" + where + \")\").join(\" OR \");\n\n return andConditions.join(\"\");\n }\n\n return \"\";\n }\n\n /**\n * Gets SQL needs to be inserted into final query.\n */\n protected computeFindOperatorExpression(operator: FindOperator<any>, aliasPath: string, parameters: any[]): string {\n switch (operator.type) {\n case \"not\":\n if (operator.child) {\n return `NOT(${this.computeFindOperatorExpression(operator.child, aliasPath, parameters)})`;\n } else {\n return `${aliasPath} != ${parameters[0]}`;\n }\n case \"lessThan\":\n return `${aliasPath} < ${parameters[0]}`;\n case \"lessThanOrEqual\":\n return `${aliasPath} <= ${parameters[0]}`;\n case \"moreThan\":\n return `${aliasPath} > ${parameters[0]}`;\n case \"moreThanOrEqual\":\n return `${aliasPath} >= ${parameters[0]}`;\n case \"equal\":\n return `${aliasPath} = ${parameters[0]}`;\n case \"like\":\n return `${aliasPath} LIKE ${parameters[0]}`;\n case \"between\":\n return `${aliasPath} BETWEEN ${parameters[0]} AND ${parameters[1]}`;\n case \"in\":\n if ((this.connection.driver instanceof OracleDriver || this.connection.driver instanceof MysqlDriver) && parameters.length === 0) {\n return `${aliasPath} IN (null)`;\n }\n return `${aliasPath} IN (${parameters.join(\", \")})`;\n case \"any\":\n return `${aliasPath} = ANY(${parameters[0]})`;\n case \"isNull\":\n return `${aliasPath} IS NULL`;\n case \"raw\":\n if (typeof operator.value === \"function\") {\n return operator.value(aliasPath);\n } else {\n return `${aliasPath} = ${operator.value}`;\n }\n }\n\n throw new TypeError(`Unsupported FindOperator ${FindOperator.constructor.name}`);\n }\n\n /**\n * Creates a query builder used to execute sql queries inside this query builder.\n */\n protected obtainQueryRunner() {\n return this.queryRunner || this.connection.createQueryRunner();\n }\n\n}\n"],"sourceRoot":".."}
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueryBuilderUtils = void 0;
4
3
  var tslib_1 = require("tslib");
5
4
  /**
6
5
  * Helper utility functions for QueryBuilder.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/QueryBuilderUtils.ts"],"names":[],"mappings":";;;;AAAA;;GAEG;AACH;IAAA;IA4BA,CAAC;IA1BG;;;OAGG;IACI,iCAAe,GAAtB,UAAuB,GAAQ;QAE3B,gEAAgE;QAChE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC;QAEjB,wCAAwC;QAClC,IAAA,KAAA,eAA4B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAA,EAAzC,SAAS,QAAA,EAAE,YAAY,QAAkB,CAAC,CAAC,0CAA0C;QAC5F,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY;YAC3B,OAAO,KAAK,CAAC;QAEjB,6DAA6D;QAC7D,8CAA8C;QAC9C,+EAA+E;QAC/E,oBAAoB;QACpB,qCAAqC;QACrC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC;QAEjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEL,wBAAC;AAAD,CA5BA,AA4BC,IAAA;AA5BY,8CAAiB","file":"QueryBuilderUtils.js","sourcesContent":["/**\n * Helper utility functions for QueryBuilder.\n */\nexport class QueryBuilderUtils {\n\n /**\n * Checks if given value is a string representation of alias property,\n * e.g. \"post.category\" or \"post.id\".\n */\n static isAliasProperty(str: any): str is string {\n\n // alias property must be a string and must have a dot separator\n if (typeof str !== \"string\" || str.indexOf(\".\") === -1)\n return false;\n\n // extra alias and its property relation\n const [aliasName, propertyName] = str.split(\".\"); // todo: what about relations in embedded?\n if (!aliasName || !propertyName)\n return false;\n\n // alias and property must be represented in a special format\n // const aliasNameRegexp = /^[a-zA-Z0-9_-]+$/;\n // if (!aliasNameRegexp.test(aliasName) || !aliasNameRegexp.test(propertyName))\n // return false;\n // make sure string is not a subquery\n if (str.indexOf(\"(\") !== -1 || str.indexOf(\")\") !== -1)\n return false;\n\n return true;\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/QueryBuilderUtils.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH;IAAA;IA4BA,CAAC;IA1BG;;;OAGG;IACI,iCAAe,GAAtB,UAAuB,GAAQ;QAE3B,gEAAgE;QAChE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC;QAEjB,wCAAwC;QAClC,IAAA,sCAA0C,EAAzC,iBAAS,EAAE,oBAA8B,CAAC,CAAC,0CAA0C;QAC5F,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY;YAC3B,OAAO,KAAK,CAAC;QAEjB,6DAA6D;QAC7D,8CAA8C;QAC9C,+EAA+E;QAC/E,oBAAoB;QACpB,qCAAqC;QACrC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC;QAEjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEL,wBAAC;AAAD,CA5BA,AA4BC,IAAA;AA5BY,8CAAiB","file":"QueryBuilderUtils.js","sourcesContent":["/**\n * Helper utility functions for QueryBuilder.\n */\nexport class QueryBuilderUtils {\n\n /**\n * Checks if given value is a string representation of alias property,\n * e.g. \"post.category\" or \"post.id\".\n */\n static isAliasProperty(str: any): str is string {\n\n // alias property must be a string and must have a dot separator\n if (typeof str !== \"string\" || str.indexOf(\".\") === -1)\n return false;\n\n // extra alias and its property relation\n const [aliasName, propertyName] = str.split(\".\"); // todo: what about relations in embedded?\n if (!aliasName || !propertyName)\n return false;\n\n // alias and property must be represented in a special format\n // const aliasNameRegexp = /^[a-zA-Z0-9_-]+$/;\n // if (!aliasNameRegexp.test(aliasName) || !aliasNameRegexp.test(propertyName))\n // return false;\n // make sure string is not a subquery\n if (str.indexOf(\"(\") !== -1 || str.indexOf(\")\") !== -1)\n return false;\n\n return true;\n }\n\n}\n"],"sourceRoot":".."}
@@ -233,7 +233,7 @@ export declare class QueryExpressionMap {
233
233
  * Get all ORDER BY queries - if order by is specified by user then it uses them,
234
234
  * otherwise it uses default entity order by if it was set.
235
235
  */
236
- get allOrderBys(): OrderByCondition;
236
+ readonly allOrderBys: OrderByCondition;
237
237
  /**
238
238
  * Creates a main alias and adds it to the current expression map.
239
239
  */
@@ -260,7 +260,7 @@ export declare class QueryExpressionMap {
260
260
  *
261
261
  * todo: add proper exceptions
262
262
  */
263
- get relationMetadata(): RelationMetadata;
263
+ readonly relationMetadata: RelationMetadata;
264
264
  /**
265
265
  * Copies all properties of the current QueryExpressionMap into a new one.
266
266
  * Useful when QueryBuilder needs to create a copy of itself.
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueryExpressionMap = void 0;
4
3
  var tslib_1 = require("tslib");
5
4
  var Alias_1 = require("./Alias");
6
5
  var JoinAttribute_1 = require("./JoinAttribute");
@@ -173,7 +172,7 @@ var QueryExpressionMap = /** @class */ (function () {
173
172
  }
174
173
  return this.orderBys;
175
174
  },
176
- enumerable: false,
175
+ enumerable: true,
177
176
  configurable: true
178
177
  });
179
178
  // -------------------------------------------------------------------------
@@ -245,7 +244,7 @@ var QueryExpressionMap = /** @class */ (function () {
245
244
  throw new Error("Relation " + this.relationPropertyPath + " was not found in entity " + this.mainAlias.name); // todo: better message
246
245
  return relationMetadata;
247
246
  },
248
- enumerable: false,
247
+ enumerable: true,
249
248
  configurable: true
250
249
  });
251
250
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/QueryExpressionMap.ts"],"names":[],"mappings":"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","file":"QueryExpressionMap.js","sourcesContent":["import {Alias} from \"./Alias\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {OrderByCondition} from \"../find-options/OrderByCondition\";\nimport {JoinAttribute} from \"./JoinAttribute\";\nimport {RelationIdAttribute} from \"./relation-id/RelationIdAttribute\";\nimport {RelationCountAttribute} from \"./relation-count/RelationCountAttribute\";\nimport {Connection} from \"../connection/Connection\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {SelectQuery} from \"./SelectQuery\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {SelectQueryBuilderOption} from \"./SelectQueryBuilderOption\";\n\n/**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\nexport class QueryExpressionMap {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates if QueryBuilder used to select entities and not a raw results.\n */\n queryEntity: boolean = false;\n\n /**\n * Main alias is a main selection object selected by QueryBuilder.\n */\n mainAlias?: Alias;\n\n /**\n * All aliases (including main alias) used in the query.\n */\n aliases: Alias[] = [];\n\n /**\n * Represents query type. QueryBuilder is able to build SELECT, UPDATE and DELETE queries.\n */\n queryType: \"select\"|\"update\"|\"delete\"|\"insert\"|\"relation\"|\"soft-delete\"|\"restore\" = \"select\";\n\n /**\n * Data needs to be SELECT-ed.\n */\n selects: SelectQuery[] = [];\n\n /**\n * Whether SELECT is DISTINCT.\n */\n selectDistinct: boolean = false;\n\n /**\n * SELECT DISTINCT ON query (postgres).\n */\n selectDistinctOn: string[] = [];\n\n /**\n * FROM-s to be selected.\n */\n // froms: { target: string, alias: string }[] = [];\n\n /**\n * If update query was used, it needs \"update set\" - properties which will be updated by this query.\n * If insert query was used, it needs \"insert set\" - values that needs to be inserted.\n */\n valuesSet?: ObjectLiteral|ObjectLiteral[];\n\n /**\n * Optional returning (or output) clause for insert, update or delete queries.\n */\n returning: string|string[];\n\n /**\n * Extra returning columns to be added to the returning statement if driver supports it.\n */\n extraReturningColumns: ColumnMetadata[] = [];\n\n /**\n * Optional on conflict statement used in insertion query in postgres.\n */\n onConflict: string = \"\";\n\n /**\n * Optional on ignore statement used in insertion query in databases.\n */\n onIgnore: string|boolean = false;\n\n /**\n * Optional on update statement used in insertion query in databases.\n */\n onUpdate: { columns?: string, conflict?: string, overwrite?: string };\n\n /**\n * JOIN queries.\n */\n joinAttributes: JoinAttribute[] = [];\n\n /**\n * RelationId queries.\n */\n relationIdAttributes: RelationIdAttribute[] = [];\n\n /**\n * Relation count queries.\n */\n relationCountAttributes: RelationCountAttribute[] = [];\n\n /**\n * WHERE queries.\n */\n wheres: { type: \"simple\"|\"and\"|\"or\", condition: string }[] = [];\n\n /**\n * HAVING queries.\n */\n havings: { type: \"simple\"|\"and\"|\"or\", condition: string }[] = [];\n\n /**\n * ORDER BY queries.\n */\n orderBys: OrderByCondition = {};\n\n /**\n * GROUP BY queries.\n */\n groupBys: string[] = [];\n\n /**\n * LIMIT query.\n */\n limit?: number;\n\n /**\n * OFFSET query.\n */\n offset?: number;\n\n /**\n * Number of rows to skip of result using pagination.\n */\n skip?: number;\n\n /**\n * Number of rows to take using pagination.\n */\n take?: number;\n\n /**\n * Locking mode.\n */\n lockMode?: \"optimistic\"|\"pessimistic_read\"|\"pessimistic_write\"|\"dirty_read\"|\"pessimistic_partial_write\"|\"pessimistic_write_or_fail\"|\"for_no_key_update\";\n\n /**\n * Current version of the entity, used for locking.\n */\n lockVersion?: number|Date;\n\n /**\n * Indicates if soft-deleted rows should be included in entity result.\n * By default the soft-deleted rows are not included.\n */\n withDeleted: boolean = false;\n\n /**\n * Parameters used to be escaped in final query.\n */\n parameters: ObjectLiteral = {};\n\n /**\n * Indicates if alias, table names and column names will be ecaped by driver, or not.\n *\n * todo: rename to isQuotingDisabled, also think if it should be named \"escaping\"\n */\n disableEscaping: boolean = true;\n\n /**\n * Indicates if virtual columns should be included in entity result.\n *\n * todo: what to do with it? is it properly used? what about persistence?\n */\n enableRelationIdValues: boolean = false;\n\n /**\n * Extra where condition appended to the end of original where conditions with AND keyword.\n * Original condition will be wrapped into brackets.\n */\n extraAppendedAndWhereCondition: string = \"\";\n\n /**\n * Indicates if query builder creates a subquery.\n */\n subQuery: boolean = false;\n\n /**\n * If QueryBuilder was created in a subquery mode then its parent QueryBuilder (who created subquery) will be stored here.\n */\n parentQueryBuilder: QueryBuilder<any>;\n\n /**\n * Indicates if property names are prefixed with alias names during property replacement.\n * By default this is enabled, however we need this because aliases are not supported in UPDATE and DELETE queries,\n * but user can use them in WHERE expressions.\n */\n aliasNamePrefixingEnabled: boolean = true;\n\n /**\n * Indicates if query result cache is enabled or not.\n */\n cache: boolean = false;\n\n /**\n * Time in milliseconds in which cache will expire.\n * If not set then global caching time will be used.\n */\n cacheDuration: number;\n\n /**\n * Cache id.\n * Used to identifier your cache queries.\n */\n cacheId: string;\n\n /**\n * Options that define QueryBuilder behaviour.\n */\n options: SelectQueryBuilderOption[] = [];\n\n /**\n * Property path of relation to work with.\n * Used in relational query builder.\n */\n relationPropertyPath: string;\n\n /**\n * Entity (target) which relations will be updated.\n */\n of: any|any[];\n\n /**\n * List of columns where data should be inserted.\n * Used in INSERT query.\n */\n insertColumns: string[] = [];\n\n /**\n * Used if user wants to update or delete a specific entities.\n */\n whereEntities: ObjectLiteral[] = [];\n\n /**\n * Indicates if entity must be updated after insertion / updation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n */\n updateEntity: boolean = true;\n\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n */\n callListeners: boolean = true;\n\n /**\n * Indicates if query must be wrapped into transaction.\n */\n useTransaction: boolean = false;\n\n /**\n * Extra parameters.\n * Used in InsertQueryBuilder to avoid default parameters mechanizm and execute high performance insertions.\n */\n nativeParameters: ObjectLiteral = {};\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection) {\n }\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Get all ORDER BY queries - if order by is specified by user then it uses them,\n * otherwise it uses default entity order by if it was set.\n */\n get allOrderBys() {\n if (!Object.keys(this.orderBys).length && this.mainAlias!.hasMetadata && this.options.indexOf(\"disable-global-order\") === -1) {\n const entityOrderBy = this.mainAlias!.metadata.orderBy || {};\n return Object.keys(entityOrderBy).reduce((orderBy, key) => {\n orderBy[this.mainAlias!.name + \".\" + key] = entityOrderBy[key];\n return orderBy;\n }, {} as OrderByCondition);\n }\n\n return this.orderBys;\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a main alias and adds it to the current expression map.\n */\n setMainAlias(alias: Alias): Alias {\n\n // if main alias is already set then remove it from the array\n // if (this.mainAlias)\n // this.aliases.splice(this.aliases.indexOf(this.mainAlias));\n\n // set new main alias\n this.mainAlias = alias;\n\n return alias;\n }\n\n /**\n * Creates a new alias and adds it to the current expression map.\n */\n createAlias(options: { type: \"from\"|\"select\"|\"join\"|\"other\", name?: string, target?: Function|string, tablePath?: string, subQuery?: string, metadata?: EntityMetadata }): Alias {\n\n let aliasName = options.name;\n if (!aliasName && options.tablePath)\n aliasName = options.tablePath;\n if (!aliasName && options.target instanceof Function)\n aliasName = options.target.name;\n if (!aliasName && typeof options.target === \"string\")\n aliasName = options.target;\n\n const alias = new Alias();\n alias.type = options.type;\n if (aliasName)\n alias.name = aliasName;\n if (options.metadata)\n alias.metadata = options.metadata;\n if (options.target && !alias.hasMetadata)\n alias.metadata = this.connection.getMetadata(options.target);\n if (options.tablePath)\n alias.tablePath = options.tablePath;\n if (options.subQuery)\n alias.subQuery = options.subQuery;\n\n this.aliases.push(alias);\n return alias;\n }\n\n /**\n * Finds alias with the given name.\n * If alias was not found it throw an exception.\n */\n findAliasByName(aliasName: string): Alias {\n const alias = this.aliases.find(alias => alias.name === aliasName);\n if (!alias)\n throw new Error(`\"${aliasName}\" alias was not found. Maybe you forgot to join it?`);\n\n return alias;\n }\n\n findColumnByAliasExpression(aliasExpression: string): ColumnMetadata|undefined {\n const [aliasName, propertyPath] = aliasExpression.split(\".\");\n const alias = this.findAliasByName(aliasName);\n return alias.metadata.findColumnWithPropertyName(propertyPath);\n }\n\n /**\n * Gets relation metadata of the relation this query builder works with.\n *\n * todo: add proper exceptions\n */\n get relationMetadata(): RelationMetadata {\n if (!this.mainAlias)\n throw new Error(`Entity to work with is not specified!`); // todo: better message\n\n const relationMetadata = this.mainAlias.metadata.findRelationWithPropertyPath(this.relationPropertyPath);\n if (!relationMetadata)\n throw new Error(`Relation ${this.relationPropertyPath} was not found in entity ${this.mainAlias.name}`); // todo: better message\n\n return relationMetadata;\n }\n\n /**\n * Copies all properties of the current QueryExpressionMap into a new one.\n * Useful when QueryBuilder needs to create a copy of itself.\n */\n clone(): QueryExpressionMap {\n const map = new QueryExpressionMap(this.connection);\n map.queryType = this.queryType;\n map.selects = this.selects.map(select => select);\n map.selectDistinct = this.selectDistinct;\n map.selectDistinctOn = this.selectDistinctOn;\n this.aliases.forEach(alias => map.aliases.push(new Alias(alias)));\n map.mainAlias = this.mainAlias;\n map.valuesSet = this.valuesSet;\n map.returning = this.returning;\n map.onConflict = this.onConflict;\n map.onIgnore = this.onIgnore;\n map.onUpdate = this.onUpdate;\n map.joinAttributes = this.joinAttributes.map(join => new JoinAttribute(this.connection, this, join));\n map.relationIdAttributes = this.relationIdAttributes.map(relationId => new RelationIdAttribute(this, relationId));\n map.relationCountAttributes = this.relationCountAttributes.map(relationCount => new RelationCountAttribute(this, relationCount));\n map.wheres = this.wheres.map(where => ({ ...where }));\n map.havings = this.havings.map(having => ({ ...having }));\n map.orderBys = Object.assign({}, this.orderBys);\n map.groupBys = this.groupBys.map(groupBy => groupBy);\n map.limit = this.limit;\n map.offset = this.offset;\n map.skip = this.skip;\n map.take = this.take;\n map.lockMode = this.lockMode;\n map.lockVersion = this.lockVersion;\n map.withDeleted = this.withDeleted;\n map.parameters = Object.assign({}, this.parameters);\n map.disableEscaping = this.disableEscaping;\n map.enableRelationIdValues = this.enableRelationIdValues;\n map.extraAppendedAndWhereCondition = this.extraAppendedAndWhereCondition;\n map.subQuery = this.subQuery;\n map.aliasNamePrefixingEnabled = this.aliasNamePrefixingEnabled;\n map.cache = this.cache;\n map.cacheId = this.cacheId;\n map.cacheDuration = this.cacheDuration;\n map.relationPropertyPath = this.relationPropertyPath;\n map.of = this.of;\n map.insertColumns = this.insertColumns;\n map.whereEntities = this.whereEntities;\n map.updateEntity = this.updateEntity;\n map.callListeners = this.callListeners;\n map.useTransaction = this.useTransaction;\n map.nativeParameters = Object.assign({}, this.nativeParameters);\n return map;\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/QueryExpressionMap.ts"],"names":[],"mappings":"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","file":"QueryExpressionMap.js","sourcesContent":["import {Alias} from \"./Alias\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {OrderByCondition} from \"../find-options/OrderByCondition\";\nimport {JoinAttribute} from \"./JoinAttribute\";\nimport {RelationIdAttribute} from \"./relation-id/RelationIdAttribute\";\nimport {RelationCountAttribute} from \"./relation-count/RelationCountAttribute\";\nimport {Connection} from \"../connection/Connection\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {SelectQuery} from \"./SelectQuery\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {SelectQueryBuilderOption} from \"./SelectQueryBuilderOption\";\n\n/**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\nexport class QueryExpressionMap {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates if QueryBuilder used to select entities and not a raw results.\n */\n queryEntity: boolean = false;\n\n /**\n * Main alias is a main selection object selected by QueryBuilder.\n */\n mainAlias?: Alias;\n\n /**\n * All aliases (including main alias) used in the query.\n */\n aliases: Alias[] = [];\n\n /**\n * Represents query type. QueryBuilder is able to build SELECT, UPDATE and DELETE queries.\n */\n queryType: \"select\"|\"update\"|\"delete\"|\"insert\"|\"relation\"|\"soft-delete\"|\"restore\" = \"select\";\n\n /**\n * Data needs to be SELECT-ed.\n */\n selects: SelectQuery[] = [];\n\n /**\n * Whether SELECT is DISTINCT.\n */\n selectDistinct: boolean = false;\n\n /**\n * SELECT DISTINCT ON query (postgres).\n */\n selectDistinctOn: string[] = [];\n\n /**\n * FROM-s to be selected.\n */\n // froms: { target: string, alias: string }[] = [];\n\n /**\n * If update query was used, it needs \"update set\" - properties which will be updated by this query.\n * If insert query was used, it needs \"insert set\" - values that needs to be inserted.\n */\n valuesSet?: ObjectLiteral|ObjectLiteral[];\n\n /**\n * Optional returning (or output) clause for insert, update or delete queries.\n */\n returning: string|string[];\n\n /**\n * Extra returning columns to be added to the returning statement if driver supports it.\n */\n extraReturningColumns: ColumnMetadata[] = [];\n\n /**\n * Optional on conflict statement used in insertion query in postgres.\n */\n onConflict: string = \"\";\n\n /**\n * Optional on ignore statement used in insertion query in databases.\n */\n onIgnore: string|boolean = false;\n\n /**\n * Optional on update statement used in insertion query in databases.\n */\n onUpdate: { columns?: string, conflict?: string, overwrite?: string };\n\n /**\n * JOIN queries.\n */\n joinAttributes: JoinAttribute[] = [];\n\n /**\n * RelationId queries.\n */\n relationIdAttributes: RelationIdAttribute[] = [];\n\n /**\n * Relation count queries.\n */\n relationCountAttributes: RelationCountAttribute[] = [];\n\n /**\n * WHERE queries.\n */\n wheres: { type: \"simple\"|\"and\"|\"or\", condition: string }[] = [];\n\n /**\n * HAVING queries.\n */\n havings: { type: \"simple\"|\"and\"|\"or\", condition: string }[] = [];\n\n /**\n * ORDER BY queries.\n */\n orderBys: OrderByCondition = {};\n\n /**\n * GROUP BY queries.\n */\n groupBys: string[] = [];\n\n /**\n * LIMIT query.\n */\n limit?: number;\n\n /**\n * OFFSET query.\n */\n offset?: number;\n\n /**\n * Number of rows to skip of result using pagination.\n */\n skip?: number;\n\n /**\n * Number of rows to take using pagination.\n */\n take?: number;\n\n /**\n * Locking mode.\n */\n lockMode?: \"optimistic\"|\"pessimistic_read\"|\"pessimistic_write\"|\"dirty_read\"|\"pessimistic_partial_write\"|\"pessimistic_write_or_fail\"|\"for_no_key_update\";\n\n /**\n * Current version of the entity, used for locking.\n */\n lockVersion?: number|Date;\n\n /**\n * Indicates if soft-deleted rows should be included in entity result.\n * By default the soft-deleted rows are not included.\n */\n withDeleted: boolean = false;\n\n /**\n * Parameters used to be escaped in final query.\n */\n parameters: ObjectLiteral = {};\n\n /**\n * Indicates if alias, table names and column names will be ecaped by driver, or not.\n *\n * todo: rename to isQuotingDisabled, also think if it should be named \"escaping\"\n */\n disableEscaping: boolean = true;\n\n /**\n * Indicates if virtual columns should be included in entity result.\n *\n * todo: what to do with it? is it properly used? what about persistence?\n */\n enableRelationIdValues: boolean = false;\n\n /**\n * Extra where condition appended to the end of original where conditions with AND keyword.\n * Original condition will be wrapped into brackets.\n */\n extraAppendedAndWhereCondition: string = \"\";\n\n /**\n * Indicates if query builder creates a subquery.\n */\n subQuery: boolean = false;\n\n /**\n * If QueryBuilder was created in a subquery mode then its parent QueryBuilder (who created subquery) will be stored here.\n */\n parentQueryBuilder: QueryBuilder<any>;\n\n /**\n * Indicates if property names are prefixed with alias names during property replacement.\n * By default this is enabled, however we need this because aliases are not supported in UPDATE and DELETE queries,\n * but user can use them in WHERE expressions.\n */\n aliasNamePrefixingEnabled: boolean = true;\n\n /**\n * Indicates if query result cache is enabled or not.\n */\n cache: boolean = false;\n\n /**\n * Time in milliseconds in which cache will expire.\n * If not set then global caching time will be used.\n */\n cacheDuration: number;\n\n /**\n * Cache id.\n * Used to identifier your cache queries.\n */\n cacheId: string;\n\n /**\n * Options that define QueryBuilder behaviour.\n */\n options: SelectQueryBuilderOption[] = [];\n\n /**\n * Property path of relation to work with.\n * Used in relational query builder.\n */\n relationPropertyPath: string;\n\n /**\n * Entity (target) which relations will be updated.\n */\n of: any|any[];\n\n /**\n * List of columns where data should be inserted.\n * Used in INSERT query.\n */\n insertColumns: string[] = [];\n\n /**\n * Used if user wants to update or delete a specific entities.\n */\n whereEntities: ObjectLiteral[] = [];\n\n /**\n * Indicates if entity must be updated after insertion / updation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n */\n updateEntity: boolean = true;\n\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n */\n callListeners: boolean = true;\n\n /**\n * Indicates if query must be wrapped into transaction.\n */\n useTransaction: boolean = false;\n\n /**\n * Extra parameters.\n * Used in InsertQueryBuilder to avoid default parameters mechanizm and execute high performance insertions.\n */\n nativeParameters: ObjectLiteral = {};\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection) {\n }\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Get all ORDER BY queries - if order by is specified by user then it uses them,\n * otherwise it uses default entity order by if it was set.\n */\n get allOrderBys() {\n if (!Object.keys(this.orderBys).length && this.mainAlias!.hasMetadata && this.options.indexOf(\"disable-global-order\") === -1) {\n const entityOrderBy = this.mainAlias!.metadata.orderBy || {};\n return Object.keys(entityOrderBy).reduce((orderBy, key) => {\n orderBy[this.mainAlias!.name + \".\" + key] = entityOrderBy[key];\n return orderBy;\n }, {} as OrderByCondition);\n }\n\n return this.orderBys;\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a main alias and adds it to the current expression map.\n */\n setMainAlias(alias: Alias): Alias {\n\n // if main alias is already set then remove it from the array\n // if (this.mainAlias)\n // this.aliases.splice(this.aliases.indexOf(this.mainAlias));\n\n // set new main alias\n this.mainAlias = alias;\n\n return alias;\n }\n\n /**\n * Creates a new alias and adds it to the current expression map.\n */\n createAlias(options: { type: \"from\"|\"select\"|\"join\"|\"other\", name?: string, target?: Function|string, tablePath?: string, subQuery?: string, metadata?: EntityMetadata }): Alias {\n\n let aliasName = options.name;\n if (!aliasName && options.tablePath)\n aliasName = options.tablePath;\n if (!aliasName && options.target instanceof Function)\n aliasName = options.target.name;\n if (!aliasName && typeof options.target === \"string\")\n aliasName = options.target;\n\n const alias = new Alias();\n alias.type = options.type;\n if (aliasName)\n alias.name = aliasName;\n if (options.metadata)\n alias.metadata = options.metadata;\n if (options.target && !alias.hasMetadata)\n alias.metadata = this.connection.getMetadata(options.target);\n if (options.tablePath)\n alias.tablePath = options.tablePath;\n if (options.subQuery)\n alias.subQuery = options.subQuery;\n\n this.aliases.push(alias);\n return alias;\n }\n\n /**\n * Finds alias with the given name.\n * If alias was not found it throw an exception.\n */\n findAliasByName(aliasName: string): Alias {\n const alias = this.aliases.find(alias => alias.name === aliasName);\n if (!alias)\n throw new Error(`\"${aliasName}\" alias was not found. Maybe you forgot to join it?`);\n\n return alias;\n }\n\n findColumnByAliasExpression(aliasExpression: string): ColumnMetadata|undefined {\n const [aliasName, propertyPath] = aliasExpression.split(\".\");\n const alias = this.findAliasByName(aliasName);\n return alias.metadata.findColumnWithPropertyName(propertyPath);\n }\n\n /**\n * Gets relation metadata of the relation this query builder works with.\n *\n * todo: add proper exceptions\n */\n get relationMetadata(): RelationMetadata {\n if (!this.mainAlias)\n throw new Error(`Entity to work with is not specified!`); // todo: better message\n\n const relationMetadata = this.mainAlias.metadata.findRelationWithPropertyPath(this.relationPropertyPath);\n if (!relationMetadata)\n throw new Error(`Relation ${this.relationPropertyPath} was not found in entity ${this.mainAlias.name}`); // todo: better message\n\n return relationMetadata;\n }\n\n /**\n * Copies all properties of the current QueryExpressionMap into a new one.\n * Useful when QueryBuilder needs to create a copy of itself.\n */\n clone(): QueryExpressionMap {\n const map = new QueryExpressionMap(this.connection);\n map.queryType = this.queryType;\n map.selects = this.selects.map(select => select);\n map.selectDistinct = this.selectDistinct;\n map.selectDistinctOn = this.selectDistinctOn;\n this.aliases.forEach(alias => map.aliases.push(new Alias(alias)));\n map.mainAlias = this.mainAlias;\n map.valuesSet = this.valuesSet;\n map.returning = this.returning;\n map.onConflict = this.onConflict;\n map.onIgnore = this.onIgnore;\n map.onUpdate = this.onUpdate;\n map.joinAttributes = this.joinAttributes.map(join => new JoinAttribute(this.connection, this, join));\n map.relationIdAttributes = this.relationIdAttributes.map(relationId => new RelationIdAttribute(this, relationId));\n map.relationCountAttributes = this.relationCountAttributes.map(relationCount => new RelationCountAttribute(this, relationCount));\n map.wheres = this.wheres.map(where => ({ ...where }));\n map.havings = this.havings.map(having => ({ ...having }));\n map.orderBys = Object.assign({}, this.orderBys);\n map.groupBys = this.groupBys.map(groupBy => groupBy);\n map.limit = this.limit;\n map.offset = this.offset;\n map.skip = this.skip;\n map.take = this.take;\n map.lockMode = this.lockMode;\n map.lockVersion = this.lockVersion;\n map.withDeleted = this.withDeleted;\n map.parameters = Object.assign({}, this.parameters);\n map.disableEscaping = this.disableEscaping;\n map.enableRelationIdValues = this.enableRelationIdValues;\n map.extraAppendedAndWhereCondition = this.extraAppendedAndWhereCondition;\n map.subQuery = this.subQuery;\n map.aliasNamePrefixingEnabled = this.aliasNamePrefixingEnabled;\n map.cache = this.cache;\n map.cacheId = this.cacheId;\n map.cacheDuration = this.cacheDuration;\n map.relationPropertyPath = this.relationPropertyPath;\n map.of = this.of;\n map.insertColumns = this.insertColumns;\n map.whereEntities = this.whereEntities;\n map.updateEntity = this.updateEntity;\n map.callListeners = this.callListeners;\n map.useTransaction = this.useTransaction;\n map.nativeParameters = Object.assign({}, this.nativeParameters);\n return map;\n }\n\n}\n"],"sourceRoot":".."}
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RelationIdLoader = void 0;
4
3
  var tslib_1 = require("tslib");
5
4
  var RelationMetadata_1 = require("../metadata/RelationMetadata");
6
5
  /**