typeorm 0.2.41 → 0.2.42-dev.02400da

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 (338) hide show
  1. package/README.md +38 -0
  2. package/browser/cache/RedisQueryResultCache.js +40 -35
  3. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  4. package/browser/common/RelationType.d.ts +14 -0
  5. package/browser/common/RelationType.js +3 -0
  6. package/browser/common/RelationType.js.map +1 -0
  7. package/browser/connection/BaseConnectionOptions.d.ts +5 -0
  8. package/browser/connection/BaseConnectionOptions.js.map +1 -1
  9. package/browser/connection/Connection.d.ts +7 -3
  10. package/browser/connection/Connection.js +47 -31
  11. package/browser/connection/Connection.js.map +1 -1
  12. package/browser/connection/ConnectionMetadataBuilder.d.ts +3 -3
  13. package/browser/connection/ConnectionMetadataBuilder.js +54 -22
  14. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  15. package/browser/connection/ConnectionOptionsReader.js +33 -28
  16. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  17. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
  18. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  19. package/browser/decorator/Unique.d.ts +5 -4
  20. package/browser/decorator/Unique.js +7 -3
  21. package/browser/decorator/Unique.js.map +1 -1
  22. package/browser/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
  23. package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  24. package/browser/decorator/options/ColumnOptions.d.ts +4 -0
  25. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  26. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
  27. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +3 -0
  28. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
  29. package/browser/decorator/options/RelationOptions.d.ts +1 -1
  30. package/browser/decorator/options/RelationOptions.js.map +1 -1
  31. package/browser/decorator/options/UniqueOptions.d.ts +10 -0
  32. package/browser/decorator/options/UniqueOptions.js +3 -0
  33. package/browser/decorator/options/UniqueOptions.js.map +1 -0
  34. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +1 -1
  35. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  36. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +7 -5
  37. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  38. package/browser/driver/cockroachdb/CockroachQueryRunner.js +1 -1
  39. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  40. package/browser/driver/mongodb/MongoConnectionOptions.d.ts +1 -1
  41. package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  42. package/browser/driver/mysql/MysqlQueryRunner.js +1 -1
  43. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  44. package/browser/driver/oracle/OracleQueryRunner.js +1 -1
  45. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  46. package/browser/driver/postgres/PostgresQueryRunner.js +52 -19
  47. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  48. package/browser/driver/sap/SapQueryRunner.js +1 -1
  49. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  50. package/browser/driver/sqlite/SqliteDriver.js +11 -10
  51. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  52. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +1 -1
  53. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  54. package/browser/driver/sqlserver/SqlServerQueryRunner.js +1 -1
  55. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  56. package/browser/entity-manager/EntityManager.d.ts +2 -2
  57. package/browser/entity-manager/EntityManager.js +2 -12
  58. package/browser/entity-manager/EntityManager.js.map +1 -1
  59. package/browser/entity-manager/MongoEntityManager.js +2 -1
  60. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  61. package/browser/entity-schema/EntitySchemaOptions.d.ts +6 -0
  62. package/browser/entity-schema/EntitySchemaOptions.js.map +1 -1
  63. package/browser/entity-schema/EntitySchemaRelationOptions.d.ts +7 -1
  64. package/browser/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  65. package/browser/entity-schema/EntitySchemaTransformer.js +4 -1
  66. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  67. package/browser/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  68. package/browser/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  69. package/browser/find-options/FindOneOptions.d.ts +6 -0
  70. package/browser/find-options/FindOneOptions.js.map +1 -1
  71. package/browser/find-options/FindOptionsUtils.js +4 -0
  72. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  73. package/browser/find-options/operator/Like.d.ts +1 -1
  74. package/browser/find-options/operator/Like.js +1 -1
  75. package/browser/find-options/operator/Like.js.map +1 -1
  76. package/browser/find-options/operator/Not.d.ts +1 -1
  77. package/browser/find-options/operator/Not.js +1 -1
  78. package/browser/find-options/operator/Not.js.map +1 -1
  79. package/browser/globals.js +34 -7
  80. package/browser/globals.js.map +1 -1
  81. package/browser/index.d.ts +2 -0
  82. package/browser/index.js +2 -0
  83. package/browser/index.js.map +1 -1
  84. package/browser/metadata/ColumnMetadata.d.ts +4 -0
  85. package/browser/metadata/ColumnMetadata.js +2 -0
  86. package/browser/metadata/ColumnMetadata.js.map +1 -1
  87. package/browser/metadata/RelationMetadata.d.ts +1 -1
  88. package/browser/metadata/RelationMetadata.js.map +1 -1
  89. package/browser/metadata/UniqueMetadata.d.ts +5 -0
  90. package/browser/metadata/UniqueMetadata.js +1 -0
  91. package/browser/metadata/UniqueMetadata.js.map +1 -1
  92. package/browser/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  93. package/browser/metadata-args/UniqueMetadataArgs.js.map +1 -1
  94. package/browser/metadata-builder/EntityMetadataValidator.js +1 -0
  95. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  96. package/browser/migration/MigrationExecutor.js +1 -1
  97. package/browser/migration/MigrationExecutor.js.map +1 -1
  98. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  99. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  100. package/browser/query-builder/DeleteQueryBuilder.d.ts +4 -2
  101. package/browser/query-builder/DeleteQueryBuilder.js +4 -2
  102. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  103. package/browser/query-builder/InsertQueryBuilder.d.ts +1 -1
  104. package/browser/query-builder/InsertQueryBuilder.js +1 -1
  105. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  106. package/browser/query-builder/NotBrackets.d.ts +7 -0
  107. package/browser/query-builder/NotBrackets.js +16 -0
  108. package/browser/query-builder/NotBrackets.js.map +1 -0
  109. package/browser/query-builder/QueryBuilder.d.ts +3 -2
  110. package/browser/query-builder/QueryBuilder.js +2 -1
  111. package/browser/query-builder/QueryBuilder.js.map +1 -1
  112. package/browser/query-builder/RelationLoader.js +11 -6
  113. package/browser/query-builder/RelationLoader.js.map +1 -1
  114. package/browser/query-builder/RelationQueryBuilder.d.ts +1 -1
  115. package/browser/query-builder/RelationQueryBuilder.js +1 -1
  116. package/browser/query-builder/RelationQueryBuilder.js.map +1 -1
  117. package/browser/query-builder/SelectQueryBuilder.d.ts +10 -1
  118. package/browser/query-builder/SelectQueryBuilder.js +28 -21
  119. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  120. package/browser/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
  121. package/browser/query-builder/SoftDeleteQueryBuilder.js +1 -1
  122. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  123. package/browser/query-builder/UpdateQueryBuilder.d.ts +4 -2
  124. package/browser/query-builder/UpdateQueryBuilder.js +11 -6
  125. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  126. package/browser/query-builder/WhereExpressionBuilder.d.ts +3 -1
  127. package/browser/query-builder/WhereExpressionBuilder.js.map +1 -1
  128. package/browser/query-runner/BaseQueryRunner.d.ts +2 -2
  129. package/browser/query-runner/BaseQueryRunner.js +3 -3
  130. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  131. package/browser/repository/AbstractRepository.d.ts +2 -2
  132. package/browser/repository/AbstractRepository.js +2 -2
  133. package/browser/repository/AbstractRepository.js.map +1 -1
  134. package/browser/repository/BaseEntity.d.ts +1 -1
  135. package/browser/repository/BaseEntity.js +1 -1
  136. package/browser/repository/BaseEntity.js.map +1 -1
  137. package/browser/repository/Repository.d.ts +1 -1
  138. package/browser/repository/Repository.js +1 -1
  139. package/browser/repository/Repository.js.map +1 -1
  140. package/browser/repository/TreeRepository.js +1 -1
  141. package/browser/repository/TreeRepository.js.map +1 -1
  142. package/browser/schema-builder/RdbmsSchemaBuilder.js +1 -1
  143. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  144. package/browser/schema-builder/options/TableColumnOptions.d.ts +4 -0
  145. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  146. package/browser/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  147. package/browser/schema-builder/options/TableUniqueOptions.js.map +1 -1
  148. package/browser/schema-builder/table/TableColumn.d.ts +4 -0
  149. package/browser/schema-builder/table/TableColumn.js +2 -0
  150. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  151. package/browser/schema-builder/table/TableUnique.d.ts +5 -0
  152. package/browser/schema-builder/table/TableUnique.js +5 -2
  153. package/browser/schema-builder/table/TableUnique.js.map +1 -1
  154. package/browser/schema-builder/util/TableUtils.js +1 -0
  155. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  156. package/browser/util/DirectoryExportedClassesLoader.d.ts +1 -1
  157. package/browser/util/DirectoryExportedClassesLoader.js +55 -31
  158. package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
  159. package/browser/util/ImportUtils.d.ts +1 -0
  160. package/browser/util/ImportUtils.js +90 -0
  161. package/browser/util/ImportUtils.js.map +1 -0
  162. package/cache/RedisQueryResultCache.js +39 -34
  163. package/cache/RedisQueryResultCache.js.map +1 -1
  164. package/commands/CommandUtils.d.ts +4 -0
  165. package/commands/CommandUtils.js +10 -0
  166. package/commands/CommandUtils.js.map +1 -1
  167. package/commands/InitCommand.d.ts +9 -7
  168. package/commands/InitCommand.js +72 -43
  169. package/commands/InitCommand.js.map +1 -1
  170. package/commands/MigrationCreateCommand.d.ts +2 -0
  171. package/commands/MigrationCreateCommand.js +7 -1
  172. package/commands/MigrationCreateCommand.js.map +1 -1
  173. package/commands/MigrationGenerateCommand.d.ts +2 -0
  174. package/commands/MigrationGenerateCommand.js +7 -1
  175. package/commands/MigrationGenerateCommand.js.map +1 -1
  176. package/commands/QueryCommand.d.ts +1 -1
  177. package/commands/QueryCommand.js +1 -1
  178. package/commands/QueryCommand.js.map +1 -1
  179. package/common/RelationType.d.ts +14 -0
  180. package/common/RelationType.js +4 -0
  181. package/common/RelationType.js.map +1 -0
  182. package/connection/BaseConnectionOptions.d.ts +5 -0
  183. package/connection/BaseConnectionOptions.js.map +1 -1
  184. package/connection/Connection.d.ts +7 -3
  185. package/connection/Connection.js +47 -31
  186. package/connection/Connection.js.map +1 -1
  187. package/connection/ConnectionMetadataBuilder.d.ts +3 -3
  188. package/connection/ConnectionMetadataBuilder.js +53 -21
  189. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  190. package/connection/ConnectionOptionsReader.js +32 -27
  191. package/connection/ConnectionOptionsReader.js.map +1 -1
  192. package/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
  193. package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  194. package/decorator/Unique.d.ts +5 -4
  195. package/decorator/Unique.js +7 -3
  196. package/decorator/Unique.js.map +1 -1
  197. package/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
  198. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  199. package/decorator/options/ColumnOptions.d.ts +4 -0
  200. package/decorator/options/ColumnOptions.js.map +1 -1
  201. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
  202. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +4 -0
  203. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
  204. package/decorator/options/RelationOptions.d.ts +1 -1
  205. package/decorator/options/RelationOptions.js.map +1 -1
  206. package/decorator/options/UniqueOptions.d.ts +10 -0
  207. package/decorator/options/UniqueOptions.js +4 -0
  208. package/decorator/options/UniqueOptions.js.map +1 -0
  209. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +1 -1
  210. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  211. package/driver/better-sqlite3/BetterSqlite3Driver.js +7 -5
  212. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  213. package/driver/cockroachdb/CockroachQueryRunner.js +1 -1
  214. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  215. package/driver/mongodb/MongoConnectionOptions.d.ts +1 -1
  216. package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  217. package/driver/mysql/MysqlQueryRunner.js +1 -1
  218. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  219. package/driver/oracle/OracleQueryRunner.js +1 -1
  220. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  221. package/driver/postgres/PostgresQueryRunner.js +52 -19
  222. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  223. package/driver/sap/SapQueryRunner.js +1 -1
  224. package/driver/sap/SapQueryRunner.js.map +1 -1
  225. package/driver/sqlite/SqliteDriver.js +11 -10
  226. package/driver/sqlite/SqliteDriver.js.map +1 -1
  227. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +1 -1
  228. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  229. package/driver/sqlserver/SqlServerQueryRunner.js +1 -1
  230. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  231. package/entity-manager/EntityManager.d.ts +2 -2
  232. package/entity-manager/EntityManager.js +2 -12
  233. package/entity-manager/EntityManager.js.map +1 -1
  234. package/entity-manager/MongoEntityManager.js +2 -1
  235. package/entity-manager/MongoEntityManager.js.map +1 -1
  236. package/entity-schema/EntitySchemaOptions.d.ts +6 -0
  237. package/entity-schema/EntitySchemaOptions.js.map +1 -1
  238. package/entity-schema/EntitySchemaRelationOptions.d.ts +7 -1
  239. package/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  240. package/entity-schema/EntitySchemaTransformer.js +4 -1
  241. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  242. package/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  243. package/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  244. package/find-options/FindOneOptions.d.ts +6 -0
  245. package/find-options/FindOneOptions.js.map +1 -1
  246. package/find-options/FindOptionsUtils.js +4 -0
  247. package/find-options/FindOptionsUtils.js.map +1 -1
  248. package/find-options/operator/Like.d.ts +1 -1
  249. package/find-options/operator/Like.js +1 -1
  250. package/find-options/operator/Like.js.map +1 -1
  251. package/find-options/operator/Not.d.ts +1 -1
  252. package/find-options/operator/Not.js +1 -1
  253. package/find-options/operator/Not.js.map +1 -1
  254. package/globals.js +33 -6
  255. package/globals.js.map +1 -1
  256. package/index.d.ts +2 -0
  257. package/index.js +4 -1
  258. package/index.js.map +1 -1
  259. package/index.mjs +352 -0
  260. package/metadata/ColumnMetadata.d.ts +4 -0
  261. package/metadata/ColumnMetadata.js +2 -0
  262. package/metadata/ColumnMetadata.js.map +1 -1
  263. package/metadata/RelationMetadata.d.ts +1 -1
  264. package/metadata/RelationMetadata.js.map +1 -1
  265. package/metadata/UniqueMetadata.d.ts +5 -0
  266. package/metadata/UniqueMetadata.js +1 -0
  267. package/metadata/UniqueMetadata.js.map +1 -1
  268. package/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  269. package/metadata-args/UniqueMetadataArgs.js.map +1 -1
  270. package/metadata-builder/EntityMetadataValidator.js +1 -0
  271. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  272. package/migration/MigrationExecutor.js +1 -1
  273. package/migration/MigrationExecutor.js.map +1 -1
  274. package/package.json +1 -239
  275. package/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  276. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  277. package/query-builder/DeleteQueryBuilder.d.ts +4 -2
  278. package/query-builder/DeleteQueryBuilder.js +4 -2
  279. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  280. package/query-builder/InsertQueryBuilder.d.ts +1 -1
  281. package/query-builder/InsertQueryBuilder.js +1 -1
  282. package/query-builder/InsertQueryBuilder.js.map +1 -1
  283. package/query-builder/NotBrackets.d.ts +7 -0
  284. package/query-builder/NotBrackets.js +19 -0
  285. package/query-builder/NotBrackets.js.map +1 -0
  286. package/query-builder/QueryBuilder.d.ts +3 -2
  287. package/query-builder/QueryBuilder.js +2 -1
  288. package/query-builder/QueryBuilder.js.map +1 -1
  289. package/query-builder/RelationLoader.js +11 -6
  290. package/query-builder/RelationLoader.js.map +1 -1
  291. package/query-builder/RelationQueryBuilder.d.ts +1 -1
  292. package/query-builder/RelationQueryBuilder.js +1 -1
  293. package/query-builder/RelationQueryBuilder.js.map +1 -1
  294. package/query-builder/SelectQueryBuilder.d.ts +10 -1
  295. package/query-builder/SelectQueryBuilder.js +28 -21
  296. package/query-builder/SelectQueryBuilder.js.map +1 -1
  297. package/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
  298. package/query-builder/SoftDeleteQueryBuilder.js +1 -1
  299. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  300. package/query-builder/UpdateQueryBuilder.d.ts +4 -2
  301. package/query-builder/UpdateQueryBuilder.js +11 -6
  302. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  303. package/query-builder/WhereExpressionBuilder.d.ts +3 -1
  304. package/query-builder/WhereExpressionBuilder.js.map +1 -1
  305. package/query-runner/BaseQueryRunner.d.ts +2 -2
  306. package/query-runner/BaseQueryRunner.js +3 -3
  307. package/query-runner/BaseQueryRunner.js.map +1 -1
  308. package/repository/AbstractRepository.d.ts +2 -2
  309. package/repository/AbstractRepository.js +2 -2
  310. package/repository/AbstractRepository.js.map +1 -1
  311. package/repository/BaseEntity.d.ts +1 -1
  312. package/repository/BaseEntity.js +1 -1
  313. package/repository/BaseEntity.js.map +1 -1
  314. package/repository/Repository.d.ts +1 -1
  315. package/repository/Repository.js +1 -1
  316. package/repository/Repository.js.map +1 -1
  317. package/repository/TreeRepository.js +1 -1
  318. package/repository/TreeRepository.js.map +1 -1
  319. package/schema-builder/RdbmsSchemaBuilder.js +1 -1
  320. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  321. package/schema-builder/options/TableColumnOptions.d.ts +4 -0
  322. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  323. package/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  324. package/schema-builder/options/TableUniqueOptions.js.map +1 -1
  325. package/schema-builder/table/TableColumn.d.ts +4 -0
  326. package/schema-builder/table/TableColumn.js +2 -0
  327. package/schema-builder/table/TableColumn.js.map +1 -1
  328. package/schema-builder/table/TableUnique.d.ts +5 -0
  329. package/schema-builder/table/TableUnique.js +5 -2
  330. package/schema-builder/table/TableUnique.js.map +1 -1
  331. package/schema-builder/util/TableUtils.js +1 -0
  332. package/schema-builder/util/TableUtils.js.map +1 -1
  333. package/util/DirectoryExportedClassesLoader.d.ts +1 -1
  334. package/util/DirectoryExportedClassesLoader.js +54 -31
  335. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  336. package/util/ImportUtils.d.ts +1 -0
  337. package/util/ImportUtils.js +94 -0
  338. package/util/ImportUtils.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/metadata-builder/EntityMetadataValidator.ts"],"names":[],"mappings":"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","file":"EntityMetadataValidator.js","sourcesContent":["import {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {MissingPrimaryColumnError} from \"../error/MissingPrimaryColumnError\";\nimport {CircularRelationsError} from \"../error/CircularRelationsError\";\nimport {DepGraph} from \"../util/DepGraph\";\nimport {Driver} from \"../driver/Driver\";\nimport {DataTypeNotSupportedError} from \"../error/DataTypeNotSupportedError\";\nimport {ColumnType} from \"../driver/types/ColumnTypes\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {NoConnectionOptionError} from \"../error/NoConnectionOptionError\";\nimport {InitializedRelationError} from \"../error/InitializedRelationError\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { TypeORMError } from \"../error\";\n\n/// todo: add check if there are multiple tables with the same name\n/// todo: add checks when generated column / table names are too long for the specific driver\n// todo: type in function validation, inverse side function validation\n// todo: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: check if multiple tree parent metadatas in validator\n// todo: tree decorators can be used only on closure table (validation)\n// todo: throw error if parent tree metadata was not specified in a closure table\n\n// todo: MetadataArgsStorage: type in function validation, inverse side function validation\n// todo: MetadataArgsStorage: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: MetadataArgsStorage: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: MetadataArgsStorage: check for duplicate targets too since this check has been removed too\n// todo: check if relation decorator contains primary: true and nullable: true\n// todo: check column length, precision. scale\n// todo: MySQL index can be unique or spatial or fulltext\n\n/**\n * Validates built entity metadatas.\n */\nexport class EntityMetadataValidator {\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Validates all given entity metadatas.\n */\n validateMany(entityMetadatas: EntityMetadata[], driver: Driver) {\n entityMetadatas.forEach(entityMetadata => this.validate(entityMetadata, entityMetadatas, driver));\n this.validateDependencies(entityMetadatas);\n this.validateEagerRelations(entityMetadatas);\n }\n\n /**\n * Validates given entity metadata.\n */\n validate(entityMetadata: EntityMetadata, allEntityMetadatas: EntityMetadata[], driver: Driver) {\n\n // check if table metadata has an id\n if (!entityMetadata.primaryColumns.length && !entityMetadata.isJunction)\n throw new MissingPrimaryColumnError(entityMetadata);\n\n // validate if table is using inheritance it has a discriminator\n // also validate if discriminator values are not empty and not repeated\n if (entityMetadata.inheritancePattern === \"STI\" || entityMetadata.tableType === \"entity-child\") {\n if (!entityMetadata.discriminatorColumn)\n throw new TypeORMError(`Entity ${entityMetadata.name} using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?`);\n\n if (typeof entityMetadata.discriminatorValue === \"undefined\")\n throw new TypeORMError(`Entity ${entityMetadata.name} has an undefined discriminator value. Discriminator value should be defined.`);\n\n const sameDiscriminatorValueEntityMetadata = allEntityMetadatas.find(metadata => {\n return metadata !== entityMetadata\n && (metadata.inheritancePattern === \"STI\" || metadata.tableType === \"entity-child\")\n && metadata.discriminatorValue === entityMetadata.discriminatorValue\n && metadata.inheritanceTree.some(parent => entityMetadata.inheritanceTree.indexOf(parent) !== -1);\n });\n if (sameDiscriminatorValueEntityMetadata)\n throw new TypeORMError(`Entities ${entityMetadata.name} and ${sameDiscriminatorValueEntityMetadata.name} have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.`);\n }\n\n entityMetadata.relationCounts.forEach(relationCount => {\n if (relationCount.relation.isManyToOne || relationCount.relation.isOneToOne)\n throw new TypeORMError(`Relation count can not be implemented on ManyToOne or OneToOne relations.`);\n });\n\n if (!(driver instanceof MongoDriver)) {\n entityMetadata.columns.forEach(column => {\n const normalizedColumn = driver.normalizeType(column) as ColumnType;\n if (driver.supportedDataTypes.indexOf(normalizedColumn) === -1)\n throw new DataTypeNotSupportedError(column, normalizedColumn, driver.options.type);\n if (column.length && driver.withLengthColumnTypes.indexOf(normalizedColumn) === -1)\n throw new TypeORMError(`Column ${column.propertyName} of Entity ${entityMetadata.name} does not support length property.`);\n if (column.type === \"enum\" && !column.enum && !column.enumName)\n throw new TypeORMError(`Column \"${column.propertyName}\" of Entity \"${entityMetadata.name}\" is defined as enum, but missing \"enum\" or \"enumName\" properties.`);\n });\n }\n\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n const generatedColumns = entityMetadata.columns.filter(column => column.isGenerated && column.generationStrategy !== \"uuid\");\n if (generatedColumns.length > 1)\n throw new TypeORMError(`Error in ${entityMetadata.name} entity. There can be only one auto-increment column in MySql table.`);\n }\n\n // for mysql we are able to not define a default selected database, instead all entities can have their database\n // defined in their decorators. To make everything work either all entities must have database define and we\n // can live without database set in the connection options, either database in the connection options must be set\n if (driver instanceof MysqlDriver) {\n const metadatasWithDatabase = allEntityMetadatas.filter(metadata => metadata.database);\n if (metadatasWithDatabase.length === 0 && !driver.database)\n throw new NoConnectionOptionError(\"database\");\n }\n\n if (driver instanceof SqlServerDriver) {\n const charsetColumns = entityMetadata.columns.filter(column => column.charset);\n if (charsetColumns.length > 1)\n throw new TypeORMError(`Character set specifying is not supported in Sql Server`);\n }\n\n // check if relations are all without initialized properties\n const entityInstance = entityMetadata.create();\n entityMetadata.relations.forEach(relation => {\n if (relation.isManyToMany || relation.isOneToMany) {\n\n // we skip relations for which persistence is disabled since initialization in them cannot harm somehow\n if (relation.persistenceEnabled === false)\n return;\n\n // get entity relation value and check if its an array\n const relationInitializedValue = relation.getEntityValue(entityInstance);\n if (Array.isArray(relationInitializedValue))\n throw new InitializedRelationError(relation);\n }\n });\n\n // validate relations\n entityMetadata.relations.forEach(relation => {\n\n // check join tables:\n // using JoinTable is possible only on one side of the many-to-many relation\n // todo(dima): fix\n // if (relation.joinTable) {\n // if (!relation.isManyToMany)\n // throw new UsingJoinTableIsNotAllowedError(entityMetadata, relation);\n\n // // if there is inverse side of the relation, then check if it does not have join table too\n // if (relation.hasInverseSide && relation.inverseRelation.joinTable)\n // throw new UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation);\n // }\n\n // check join columns:\n // using JoinColumn is possible only on one side of the relation and on one-to-one, many-to-one relation types\n // first check if relation is one-to-one or many-to-one\n // todo(dima): fix\n /*if (relation.joinColumn) {\n\n // join column can be applied only on one-to-one and many-to-one relations\n if (!relation.isOneToOne && !relation.isManyToOne)\n throw new UsingJoinColumnIsNotAllowedError(entityMetadata, relation);\n\n // if there is inverse side of the relation, then check if it does not have join table too\n if (relation.hasInverseSide && relation.inverseRelation.joinColumn && relation.isOneToOne)\n throw new UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation);\n\n // check if join column really has referenced column\n if (relation.joinColumn && !relation.joinColumn.referencedColumn)\n throw new TypeORMError(`Join column does not have referenced column set`);\n\n }\n\n // if its a one-to-one relation and JoinColumn is missing on both sides of the relation\n // or its one-side relation without JoinColumn we should give an error\n if (!relation.joinColumn && relation.isOneToOne && (!relation.hasInverseSide || !relation.inverseRelation.joinColumn))\n throw new MissingJoinColumnError(entityMetadata, relation);*/\n\n // if its a many-to-many relation and JoinTable is missing on both sides of the relation\n // or its one-side relation without JoinTable we should give an error\n // todo(dima): fix it\n // if (!relation.joinTable && relation.isManyToMany && (!relation.hasInverseSide || !relation.inverseRelation.joinTable))\n // throw new MissingJoinTableError(entityMetadata, relation);\n\n\n // todo: validate if its one-to-one and side which does not have join column MUST have inverse side\n // todo: validate if its many-to-many and side which does not have join table MUST have inverse side\n // todo: if there is a relation, and inverse side is specified only on one side, shall we give error\n // todo: with message like: \"Inverse side is specified only on one side of the relationship. Specify on other side too to prevent confusion\".\n // todo: add validation if there two entities with the same target, and show error message with description of the problem (maybe file was renamed/moved but left in output directory)\n // todo: check if there are multiple columns on the same column applied.\n // todo: check column type if is missing in relational databases (throw new TypeORMError(`Column type of ${type} cannot be determined.`);)\n // todo: include driver-specific checks. for example in mongodb empty prefixes are not allowed\n // todo: if multiple columns with same name - throw exception, including cases when columns are in embeds with same prefixes or without prefix at all\n // todo: if multiple primary key used, at least one of them must be unique or @Index decorator must be set on entity\n // todo: check if entity with duplicate names, some decorators exist\n\n\n });\n\n // make sure cascade remove is not set for both sides of relationships (can be set in OneToOne decorators)\n entityMetadata.relations.forEach(relation => {\n const isCircularCascadeRemove = relation.isCascadeRemove && relation.inverseRelation && relation.inverseRelation!.isCascadeRemove;\n if (isCircularCascadeRemove)\n throw new TypeORMError(`Relation ${entityMetadata.name}#${relation.propertyName} and ${relation.inverseRelation!.entityMetadata.name}#${relation.inverseRelation!.propertyName} both has cascade remove set. ` +\n `This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.`);\n }); // todo: maybe better just deny removal from one to one relation without join column?\n\n entityMetadata.eagerRelations.forEach(relation => {\n\n });\n }\n\n /**\n * Validates dependencies of the entity metadatas.\n */\n protected validateDependencies(entityMetadatas: EntityMetadata[]) {\n\n const graph = new DepGraph();\n entityMetadatas.forEach(entityMetadata => {\n graph.addNode(entityMetadata.name);\n });\n entityMetadatas.forEach(entityMetadata => {\n entityMetadata.relationsWithJoinColumns\n .filter(relation => !relation.isNullable)\n .forEach(relation => {\n graph.addDependency(entityMetadata.name, relation.inverseEntityMetadata.name);\n });\n });\n try {\n graph.overallOrder();\n\n } catch (err) {\n throw new CircularRelationsError(err.toString().replace(\"Error: Dependency Cycle Found: \", \"\"));\n }\n }\n\n /**\n * Validates eager relations to prevent circular dependency in them.\n */\n protected validateEagerRelations(entityMetadatas: EntityMetadata[]) {\n entityMetadatas.forEach(entityMetadata => {\n entityMetadata.eagerRelations.forEach(relation => {\n if (relation.inverseRelation && relation.inverseRelation.isEager)\n throw new TypeORMError(`Circular eager relations are disallowed. ` +\n `${entityMetadata.targetName}#${relation.propertyPath} contains \"eager: true\", and its inverse side ` +\n `${relation.inverseEntityMetadata.targetName}#${relation.inverseRelation.propertyPath} contains \"eager: true\" as well.` +\n ` Remove \"eager: true\" from one side of the relation.`);\n });\n });\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/metadata-builder/EntityMetadataValidator.ts"],"names":[],"mappings":"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","file":"EntityMetadataValidator.js","sourcesContent":["import {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {MissingPrimaryColumnError} from \"../error/MissingPrimaryColumnError\";\nimport {CircularRelationsError} from \"../error/CircularRelationsError\";\nimport {DepGraph} from \"../util/DepGraph\";\nimport {Driver} from \"../driver/Driver\";\nimport {DataTypeNotSupportedError} from \"../error/DataTypeNotSupportedError\";\nimport {ColumnType} from \"../driver/types/ColumnTypes\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {NoConnectionOptionError} from \"../error/NoConnectionOptionError\";\nimport {InitializedRelationError} from \"../error/InitializedRelationError\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { TypeORMError } from \"../error\";\n\n/// todo: add check if there are multiple tables with the same name\n/// todo: add checks when generated column / table names are too long for the specific driver\n// todo: type in function validation, inverse side function validation\n// todo: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: check if multiple tree parent metadatas in validator\n// todo: tree decorators can be used only on closure table (validation)\n// todo: throw error if parent tree metadata was not specified in a closure table\n\n// todo: MetadataArgsStorage: type in function validation, inverse side function validation\n// todo: MetadataArgsStorage: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: MetadataArgsStorage: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: MetadataArgsStorage: check for duplicate targets too since this check has been removed too\n// todo: check if relation decorator contains primary: true and nullable: true\n// todo: check column length, precision. scale\n// todo: MySQL index can be unique or spatial or fulltext\n\n/**\n * Validates built entity metadatas.\n */\nexport class EntityMetadataValidator {\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Validates all given entity metadatas.\n */\n validateMany(entityMetadatas: EntityMetadata[], driver: Driver) {\n entityMetadatas.forEach(entityMetadata => this.validate(entityMetadata, entityMetadatas, driver));\n this.validateDependencies(entityMetadatas);\n this.validateEagerRelations(entityMetadatas);\n }\n\n /**\n * Validates given entity metadata.\n */\n validate(entityMetadata: EntityMetadata, allEntityMetadatas: EntityMetadata[], driver: Driver) {\n\n // check if table metadata has an id\n if (!entityMetadata.primaryColumns.length && !entityMetadata.isJunction)\n throw new MissingPrimaryColumnError(entityMetadata);\n\n // validate if table is using inheritance it has a discriminator\n // also validate if discriminator values are not empty and not repeated\n if (entityMetadata.inheritancePattern === \"STI\" || entityMetadata.tableType === \"entity-child\") {\n if (!entityMetadata.discriminatorColumn)\n throw new TypeORMError(`Entity ${entityMetadata.name} using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?`);\n\n if (typeof entityMetadata.discriminatorValue === \"undefined\")\n throw new TypeORMError(`Entity ${entityMetadata.name} has an undefined discriminator value. Discriminator value should be defined.`);\n\n const sameDiscriminatorValueEntityMetadata = allEntityMetadatas.find(metadata => {\n return metadata !== entityMetadata\n && (metadata.inheritancePattern === \"STI\" || metadata.tableType === \"entity-child\")\n && metadata.tableName === entityMetadata.tableName\n && metadata.discriminatorValue === entityMetadata.discriminatorValue\n && metadata.inheritanceTree.some(parent => entityMetadata.inheritanceTree.indexOf(parent) !== -1);\n });\n if (sameDiscriminatorValueEntityMetadata)\n throw new TypeORMError(`Entities ${entityMetadata.name} and ${sameDiscriminatorValueEntityMetadata.name} have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.`);\n }\n\n entityMetadata.relationCounts.forEach(relationCount => {\n if (relationCount.relation.isManyToOne || relationCount.relation.isOneToOne)\n throw new TypeORMError(`Relation count can not be implemented on ManyToOne or OneToOne relations.`);\n });\n\n if (!(driver instanceof MongoDriver)) {\n entityMetadata.columns.forEach(column => {\n const normalizedColumn = driver.normalizeType(column) as ColumnType;\n if (driver.supportedDataTypes.indexOf(normalizedColumn) === -1)\n throw new DataTypeNotSupportedError(column, normalizedColumn, driver.options.type);\n if (column.length && driver.withLengthColumnTypes.indexOf(normalizedColumn) === -1)\n throw new TypeORMError(`Column ${column.propertyName} of Entity ${entityMetadata.name} does not support length property.`);\n if (column.type === \"enum\" && !column.enum && !column.enumName)\n throw new TypeORMError(`Column \"${column.propertyName}\" of Entity \"${entityMetadata.name}\" is defined as enum, but missing \"enum\" or \"enumName\" properties.`);\n });\n }\n\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n const generatedColumns = entityMetadata.columns.filter(column => column.isGenerated && column.generationStrategy !== \"uuid\");\n if (generatedColumns.length > 1)\n throw new TypeORMError(`Error in ${entityMetadata.name} entity. There can be only one auto-increment column in MySql table.`);\n }\n\n // for mysql we are able to not define a default selected database, instead all entities can have their database\n // defined in their decorators. To make everything work either all entities must have database define and we\n // can live without database set in the connection options, either database in the connection options must be set\n if (driver instanceof MysqlDriver) {\n const metadatasWithDatabase = allEntityMetadatas.filter(metadata => metadata.database);\n if (metadatasWithDatabase.length === 0 && !driver.database)\n throw new NoConnectionOptionError(\"database\");\n }\n\n if (driver instanceof SqlServerDriver) {\n const charsetColumns = entityMetadata.columns.filter(column => column.charset);\n if (charsetColumns.length > 1)\n throw new TypeORMError(`Character set specifying is not supported in Sql Server`);\n }\n\n // check if relations are all without initialized properties\n const entityInstance = entityMetadata.create();\n entityMetadata.relations.forEach(relation => {\n if (relation.isManyToMany || relation.isOneToMany) {\n\n // we skip relations for which persistence is disabled since initialization in them cannot harm somehow\n if (relation.persistenceEnabled === false)\n return;\n\n // get entity relation value and check if its an array\n const relationInitializedValue = relation.getEntityValue(entityInstance);\n if (Array.isArray(relationInitializedValue))\n throw new InitializedRelationError(relation);\n }\n });\n\n // validate relations\n entityMetadata.relations.forEach(relation => {\n\n // check join tables:\n // using JoinTable is possible only on one side of the many-to-many relation\n // todo(dima): fix\n // if (relation.joinTable) {\n // if (!relation.isManyToMany)\n // throw new UsingJoinTableIsNotAllowedError(entityMetadata, relation);\n\n // // if there is inverse side of the relation, then check if it does not have join table too\n // if (relation.hasInverseSide && relation.inverseRelation.joinTable)\n // throw new UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation);\n // }\n\n // check join columns:\n // using JoinColumn is possible only on one side of the relation and on one-to-one, many-to-one relation types\n // first check if relation is one-to-one or many-to-one\n // todo(dima): fix\n /*if (relation.joinColumn) {\n\n // join column can be applied only on one-to-one and many-to-one relations\n if (!relation.isOneToOne && !relation.isManyToOne)\n throw new UsingJoinColumnIsNotAllowedError(entityMetadata, relation);\n\n // if there is inverse side of the relation, then check if it does not have join table too\n if (relation.hasInverseSide && relation.inverseRelation.joinColumn && relation.isOneToOne)\n throw new UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation);\n\n // check if join column really has referenced column\n if (relation.joinColumn && !relation.joinColumn.referencedColumn)\n throw new TypeORMError(`Join column does not have referenced column set`);\n\n }\n\n // if its a one-to-one relation and JoinColumn is missing on both sides of the relation\n // or its one-side relation without JoinColumn we should give an error\n if (!relation.joinColumn && relation.isOneToOne && (!relation.hasInverseSide || !relation.inverseRelation.joinColumn))\n throw new MissingJoinColumnError(entityMetadata, relation);*/\n\n // if its a many-to-many relation and JoinTable is missing on both sides of the relation\n // or its one-side relation without JoinTable we should give an error\n // todo(dima): fix it\n // if (!relation.joinTable && relation.isManyToMany && (!relation.hasInverseSide || !relation.inverseRelation.joinTable))\n // throw new MissingJoinTableError(entityMetadata, relation);\n\n\n // todo: validate if its one-to-one and side which does not have join column MUST have inverse side\n // todo: validate if its many-to-many and side which does not have join table MUST have inverse side\n // todo: if there is a relation, and inverse side is specified only on one side, shall we give error\n // todo: with message like: \"Inverse side is specified only on one side of the relationship. Specify on other side too to prevent confusion\".\n // todo: add validation if there two entities with the same target, and show error message with description of the problem (maybe file was renamed/moved but left in output directory)\n // todo: check if there are multiple columns on the same column applied.\n // todo: check column type if is missing in relational databases (throw new TypeORMError(`Column type of ${type} cannot be determined.`);)\n // todo: include driver-specific checks. for example in mongodb empty prefixes are not allowed\n // todo: if multiple columns with same name - throw exception, including cases when columns are in embeds with same prefixes or without prefix at all\n // todo: if multiple primary key used, at least one of them must be unique or @Index decorator must be set on entity\n // todo: check if entity with duplicate names, some decorators exist\n\n\n });\n\n // make sure cascade remove is not set for both sides of relationships (can be set in OneToOne decorators)\n entityMetadata.relations.forEach(relation => {\n const isCircularCascadeRemove = relation.isCascadeRemove && relation.inverseRelation && relation.inverseRelation!.isCascadeRemove;\n if (isCircularCascadeRemove)\n throw new TypeORMError(`Relation ${entityMetadata.name}#${relation.propertyName} and ${relation.inverseRelation!.entityMetadata.name}#${relation.inverseRelation!.propertyName} both has cascade remove set. ` +\n `This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.`);\n }); // todo: maybe better just deny removal from one to one relation without join column?\n\n entityMetadata.eagerRelations.forEach(relation => {\n\n });\n }\n\n /**\n * Validates dependencies of the entity metadatas.\n */\n protected validateDependencies(entityMetadatas: EntityMetadata[]) {\n\n const graph = new DepGraph();\n entityMetadatas.forEach(entityMetadata => {\n graph.addNode(entityMetadata.name);\n });\n entityMetadatas.forEach(entityMetadata => {\n entityMetadata.relationsWithJoinColumns\n .filter(relation => !relation.isNullable)\n .forEach(relation => {\n graph.addDependency(entityMetadata.name, relation.inverseEntityMetadata.name);\n });\n });\n try {\n graph.overallOrder();\n\n } catch (err) {\n throw new CircularRelationsError(err.toString().replace(\"Error: Dependency Cycle Found: \", \"\"));\n }\n }\n\n /**\n * Validates eager relations to prevent circular dependency in them.\n */\n protected validateEagerRelations(entityMetadatas: EntityMetadata[]) {\n entityMetadatas.forEach(entityMetadata => {\n entityMetadata.eagerRelations.forEach(relation => {\n if (relation.inverseRelation && relation.inverseRelation.isEager)\n throw new TypeORMError(`Circular eager relations are disallowed. ` +\n `${entityMetadata.targetName}#${relation.propertyPath} contains \"eager: true\", and its inverse side ` +\n `${relation.inverseEntityMetadata.targetName}#${relation.inverseRelation.propertyPath} contains \"eager: true\" as well.` +\n ` Remove \"eager: true\" from one side of the relation.`);\n });\n });\n }\n\n}\n"],"sourceRoot":".."}
@@ -263,7 +263,7 @@ var MigrationExecutor = /** @class */ (function () {
263
263
  _c.label = 2;
264
264
  case 2: return [4 /*yield*/, migration.instance.up(queryRunner)
265
265
  .catch(function (error) {
266
- _this.connection.logger.logMigration("Migration \"" + migration.name + "\" has been failed, error: " + (error === null || error === void 0 ? void 0 : error.message));
266
+ _this.connection.logger.logMigration("Migration \"" + migration.name + "\" failed, error: " + (error === null || error === void 0 ? void 0 : error.message));
267
267
  throw error;
268
268
  })
269
269
  .then(function () { return __awaiter(_this, void 0, void 0, function () {
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/migration/MigrationExecutor.ts"],"names":[],"mappings":"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","file":"MigrationExecutor.js","sourcesContent":["import {Table} from \"../schema-builder/table/Table\";\nimport {Connection} from \"../connection/Connection\";\nimport {Migration} from \"./Migration\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MssqlParameter} from \"../driver/sqlserver/MssqlParameter\";\nimport {RdbmsSchemaBuilder} from \"../schema-builder/RdbmsSchemaBuilder\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {MongoQueryRunner} from \"../driver/mongodb/MongoQueryRunner\";\nimport {TypeORMError} from \"../error\";\n\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nexport class MigrationExecutor {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n transaction: \"all\" | \"none\" | \"each\" = \"all\";\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private readonly migrationsDatabase?: string;\n private readonly migrationsSchema?: string;\n private readonly migrationsTable: string;\n private readonly migrationsTableName: string;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner?: QueryRunner) {\n\n const { schema } = this.connection.driver.options as any;\n const database = this.connection.driver.database;\n this.migrationsDatabase = database;\n this.migrationsSchema = schema;\n this.migrationsTableName = connection.options.migrationsTableName || \"migrations\";\n this.migrationsTable = this.connection.driver.buildTableName(this.migrationsTableName, schema, database);\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Tries to execute a single migration given.\n */\n public async executeMigration(migration: Migration): Promise<Migration> {\n return this.withQueryRunner(async (queryRunner) => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n await (migration.instance as any).up(queryRunner);\n await this.insertExecutedMigration(queryRunner, migration);\n\n return migration;\n });\n }\n\n /**\n * Returns an array of all migrations.\n */\n public async getAllMigrations(): Promise<Migration[]> {\n return Promise.resolve(this.getMigrations());\n }\n\n /**\n * Returns an array of all executed migrations.\n */\n public async getExecutedMigrations(): Promise<Migration[]> {\n return this.withQueryRunner(async queryRunner => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n return await this.loadExecutedMigrations(queryRunner);\n });\n }\n\n /**\n * Returns an array of all pending migrations.\n */\n public async getPendingMigrations(): Promise<Migration[]> {\n const allMigrations = await this.getAllMigrations();\n const executedMigrations = await this.getExecutedMigrations();\n\n return allMigrations.filter(migration =>\n !executedMigrations.find(\n executedMigration =>\n executedMigration.name === migration.name\n )\n );\n }\n\n /**\n * Inserts an executed migration.\n */\n public insertMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.insertExecutedMigration(q, migration));\n }\n\n /**\n * Deletes an executed migration.\n */\n public deleteMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.deleteExecutedMigration(q, migration));\n }\n\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n async showMigrations(): Promise<boolean> {\n let hasUnappliedMigrations = false;\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n for (const migration of allMigrations) {\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n\n if (executedMigration) {\n this.connection.logger.logSchemaBuild(` [X] ${migration.name}`);\n } else {\n hasUnappliedMigrations = true;\n this.connection.logger.logSchemaBuild(` [ ] ${migration.name}`);\n }\n }\n\n // if query runner was created by us then release it\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n\n return hasUnappliedMigrations;\n }\n\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n async executePendingMigrations(): Promise<Migration[]> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n // create the typeorm_metadata table if necessary\n const schemaBuilder = this.connection.driver.createSchemaBuilder();\n\n if (schemaBuilder instanceof RdbmsSchemaBuilder) {\n await schemaBuilder.createMetadataTableIfNecessary(queryRunner);\n }\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestTimestampMigration(executedMigrations);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // variable to store all migrations we did successefuly\n const successMigrations: Migration[] = [];\n\n // find all migrations that needs to be executed\n const pendingMigrations = allMigrations.filter(migration => {\n // check if we already have executed migration\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n if (executedMigration)\n return false;\n\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new TypeORMError(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n\n // every check is passed means that migration was not run yet and we need to run it\n return true;\n });\n\n // if no migrations are pending then nothing to do here\n if (!pendingMigrations.length) {\n this.connection.logger.logSchemaBuild(`No migrations are pending`);\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n return [];\n }\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${allMigrations.length} migrations were found in the source code.`);\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`${pendingMigrations.length} migrations are new migrations that needs to be executed.`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if (this.transaction === \"all\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // run all pending migrations in a sequence\n try {\n for (const migration of pendingMigrations) {\n if (this.transaction === \"each\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n await migration.instance!.up(queryRunner)\n .catch(error => { // informative log about migration failure\n this.connection.logger.logMigration(`Migration \"${migration.name}\" has been failed, error: ${error?.message}`);\n throw error;\n })\n .then(async () => { // now when migration is executed we need to insert record about it into the database\n await this.insertExecutedMigration(queryRunner, migration);\n // commit transaction if we started it\n if (this.transaction === \"each\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n })\n .then(() => { // informative log about migration success\n successMigrations.push(migration);\n this.connection.logger.logSchemaBuild(`Migration ${migration.name} has been executed successfully.`);\n });\n }\n\n // commit transaction if we started it\n if (this.transaction === \"all\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n return successMigrations;\n\n }\n\n /**\n * Reverts last migration that were run.\n */\n async undoLastMigration(): Promise<void> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestExecutedMigration(executedMigrations);\n\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(`No migrations was found in the database. Nothing to revert!`);\n return;\n }\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // find the instance of the migration we need to remove\n const migrationToRevert = allMigrations.find(migration => migration.name === lastTimeExecutedMigration!.name);\n\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new TypeORMError(`No migration ${lastTimeExecutedMigration.name} was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.`);\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`Now reverting it...`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if ((this.transaction !== \"none\") && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n try {\n await migrationToRevert.instance!.down(queryRunner);\n await this.deleteExecutedMigration(queryRunner, migrationToRevert);\n this.connection.logger.logSchemaBuild(`Migration ${migrationToRevert.name} has been reverted successfully.`);\n\n // commit transaction if we started it\n if (transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n protected async createMigrationsTableIfNotExist(queryRunner: QueryRunner): Promise<void> {\n // If driver is mongo no need to create\n if (this.connection.driver instanceof MongoDriver) {\n return;\n }\n const tableExist = await queryRunner.hasTable(this.migrationsTable); // todo: table name should be configurable\n if (!tableExist) {\n await queryRunner.createTable(new Table(\n {\n database: this.migrationsDatabase,\n schema: this.migrationsSchema,\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationId}),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationTimestamp}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationName}),\n isNullable: false\n },\n ]\n },\n ));\n }\n }\n\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n protected async loadExecutedMigrations(queryRunner: QueryRunner): Promise<Migration[]> {\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n return await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .find<Migration>()\n .sort({\"_id\": -1})\n .toArray();\n } else {\n const migrationsRaw: ObjectLiteral[] = await this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany();\n return migrationsRaw.map(migrationRaw => {\n return new Migration(parseInt(migrationRaw[\"id\"]), parseInt(migrationRaw[\"timestamp\"]), migrationRaw[\"name\"]);\n });\n }\n }\n\n /**\n * Gets all migrations that setup for this connection.\n */\n protected getMigrations(): Migration[] {\n const migrations = this.connection.migrations.map(migration => {\n const migrationClassName = migration.name || (migration.constructor as any).name;\n const migrationTimestamp = parseInt(migrationClassName.substr(-13), 10);\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new TypeORMError(`${migrationClassName} migration name is wrong. Migration class name should have a JavaScript timestamp appended.`);\n }\n\n return new Migration(undefined, migrationTimestamp, migrationClassName, migration);\n });\n\n this.checkForDuplicateMigrations(migrations);\n\n // sort them by timestamp\n return migrations.sort((a, b) => a.timestamp - b.timestamp);\n }\n\n protected checkForDuplicateMigrations(migrations: Migration[]) {\n const migrationNames = migrations.map(migration => migration.name);\n const duplicates = Array.from(new Set(migrationNames.filter((migrationName, index) => migrationNames.indexOf(migrationName) < index)));\n if (duplicates.length > 0) {\n throw Error(`Duplicate migrations: ${duplicates.join(\", \")}`);\n }\n }\n\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n protected getLatestTimestampMigration(migrations: Migration[]): Migration|undefined {\n const sortedMigrations = migrations.map(migration => migration).sort((a, b) => (a.timestamp - b.timestamp) * -1);\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n protected getLatestExecutedMigration(sortedMigrations: Migration[]): Migration|undefined {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Inserts new executed migration's data into migrations table.\n */\n protected async insertExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n const values: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n values[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n values[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n values[\"timestamp\"] = migration.timestamp;\n values[\"name\"] = migration.name;\n }\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).insertOne(values);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.insert()\n .into(this.migrationsTable)\n .values(values)\n .execute();\n }\n }\n\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n protected async deleteExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n\n const conditions: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n conditions[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n conditions[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n conditions[\"timestamp\"] = migration.timestamp;\n conditions[\"name\"] = migration.name;\n }\n\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).deleteOne(conditions);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.delete()\n .from(this.migrationsTable)\n .where(`${qb.escape(\"timestamp\")} = :timestamp`)\n .andWhere(`${qb.escape(\"name\")} = :name`)\n .setParameters(conditions)\n .execute();\n }\n\n }\n\n protected async withQueryRunner<T extends any>(callback: (queryRunner: QueryRunner) => T | Promise<T>) {\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n try {\n return callback(queryRunner);\n } finally {\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n }\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/migration/MigrationExecutor.ts"],"names":[],"mappings":"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","file":"MigrationExecutor.js","sourcesContent":["import {Table} from \"../schema-builder/table/Table\";\nimport {Connection} from \"../connection/Connection\";\nimport {Migration} from \"./Migration\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MssqlParameter} from \"../driver/sqlserver/MssqlParameter\";\nimport {RdbmsSchemaBuilder} from \"../schema-builder/RdbmsSchemaBuilder\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {MongoQueryRunner} from \"../driver/mongodb/MongoQueryRunner\";\nimport {TypeORMError} from \"../error\";\n\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nexport class MigrationExecutor {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n transaction: \"all\" | \"none\" | \"each\" = \"all\";\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private readonly migrationsDatabase?: string;\n private readonly migrationsSchema?: string;\n private readonly migrationsTable: string;\n private readonly migrationsTableName: string;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner?: QueryRunner) {\n\n const { schema } = this.connection.driver.options as any;\n const database = this.connection.driver.database;\n this.migrationsDatabase = database;\n this.migrationsSchema = schema;\n this.migrationsTableName = connection.options.migrationsTableName || \"migrations\";\n this.migrationsTable = this.connection.driver.buildTableName(this.migrationsTableName, schema, database);\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Tries to execute a single migration given.\n */\n public async executeMigration(migration: Migration): Promise<Migration> {\n return this.withQueryRunner(async (queryRunner) => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n await (migration.instance as any).up(queryRunner);\n await this.insertExecutedMigration(queryRunner, migration);\n\n return migration;\n });\n }\n\n /**\n * Returns an array of all migrations.\n */\n public async getAllMigrations(): Promise<Migration[]> {\n return Promise.resolve(this.getMigrations());\n }\n\n /**\n * Returns an array of all executed migrations.\n */\n public async getExecutedMigrations(): Promise<Migration[]> {\n return this.withQueryRunner(async queryRunner => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n return await this.loadExecutedMigrations(queryRunner);\n });\n }\n\n /**\n * Returns an array of all pending migrations.\n */\n public async getPendingMigrations(): Promise<Migration[]> {\n const allMigrations = await this.getAllMigrations();\n const executedMigrations = await this.getExecutedMigrations();\n\n return allMigrations.filter(migration =>\n !executedMigrations.find(\n executedMigration =>\n executedMigration.name === migration.name\n )\n );\n }\n\n /**\n * Inserts an executed migration.\n */\n public insertMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.insertExecutedMigration(q, migration));\n }\n\n /**\n * Deletes an executed migration.\n */\n public deleteMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.deleteExecutedMigration(q, migration));\n }\n\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n async showMigrations(): Promise<boolean> {\n let hasUnappliedMigrations = false;\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n for (const migration of allMigrations) {\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n\n if (executedMigration) {\n this.connection.logger.logSchemaBuild(` [X] ${migration.name}`);\n } else {\n hasUnappliedMigrations = true;\n this.connection.logger.logSchemaBuild(` [ ] ${migration.name}`);\n }\n }\n\n // if query runner was created by us then release it\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n\n return hasUnappliedMigrations;\n }\n\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n async executePendingMigrations(): Promise<Migration[]> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n // create the typeorm_metadata table if necessary\n const schemaBuilder = this.connection.driver.createSchemaBuilder();\n\n if (schemaBuilder instanceof RdbmsSchemaBuilder) {\n await schemaBuilder.createMetadataTableIfNecessary(queryRunner);\n }\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestTimestampMigration(executedMigrations);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // variable to store all migrations we did successefuly\n const successMigrations: Migration[] = [];\n\n // find all migrations that needs to be executed\n const pendingMigrations = allMigrations.filter(migration => {\n // check if we already have executed migration\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n if (executedMigration)\n return false;\n\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new TypeORMError(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n\n // every check is passed means that migration was not run yet and we need to run it\n return true;\n });\n\n // if no migrations are pending then nothing to do here\n if (!pendingMigrations.length) {\n this.connection.logger.logSchemaBuild(`No migrations are pending`);\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n return [];\n }\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${allMigrations.length} migrations were found in the source code.`);\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`${pendingMigrations.length} migrations are new migrations that needs to be executed.`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if (this.transaction === \"all\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // run all pending migrations in a sequence\n try {\n for (const migration of pendingMigrations) {\n if (this.transaction === \"each\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n await migration.instance!.up(queryRunner)\n .catch(error => { // informative log about migration failure\n this.connection.logger.logMigration(`Migration \"${migration.name}\" failed, error: ${error?.message}`);\n throw error;\n })\n .then(async () => { // now when migration is executed we need to insert record about it into the database\n await this.insertExecutedMigration(queryRunner, migration);\n // commit transaction if we started it\n if (this.transaction === \"each\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n })\n .then(() => { // informative log about migration success\n successMigrations.push(migration);\n this.connection.logger.logSchemaBuild(`Migration ${migration.name} has been executed successfully.`);\n });\n }\n\n // commit transaction if we started it\n if (this.transaction === \"all\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n return successMigrations;\n\n }\n\n /**\n * Reverts last migration that were run.\n */\n async undoLastMigration(): Promise<void> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestExecutedMigration(executedMigrations);\n\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(`No migrations was found in the database. Nothing to revert!`);\n return;\n }\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // find the instance of the migration we need to remove\n const migrationToRevert = allMigrations.find(migration => migration.name === lastTimeExecutedMigration!.name);\n\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new TypeORMError(`No migration ${lastTimeExecutedMigration.name} was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.`);\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`Now reverting it...`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if ((this.transaction !== \"none\") && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n try {\n await migrationToRevert.instance!.down(queryRunner);\n await this.deleteExecutedMigration(queryRunner, migrationToRevert);\n this.connection.logger.logSchemaBuild(`Migration ${migrationToRevert.name} has been reverted successfully.`);\n\n // commit transaction if we started it\n if (transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n protected async createMigrationsTableIfNotExist(queryRunner: QueryRunner): Promise<void> {\n // If driver is mongo no need to create\n if (this.connection.driver instanceof MongoDriver) {\n return;\n }\n const tableExist = await queryRunner.hasTable(this.migrationsTable); // todo: table name should be configurable\n if (!tableExist) {\n await queryRunner.createTable(new Table(\n {\n database: this.migrationsDatabase,\n schema: this.migrationsSchema,\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationId}),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationTimestamp}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationName}),\n isNullable: false\n },\n ]\n },\n ));\n }\n }\n\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n protected async loadExecutedMigrations(queryRunner: QueryRunner): Promise<Migration[]> {\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n return await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .find<Migration>()\n .sort({\"_id\": -1})\n .toArray();\n } else {\n const migrationsRaw: ObjectLiteral[] = await this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany();\n return migrationsRaw.map(migrationRaw => {\n return new Migration(parseInt(migrationRaw[\"id\"]), parseInt(migrationRaw[\"timestamp\"]), migrationRaw[\"name\"]);\n });\n }\n }\n\n /**\n * Gets all migrations that setup for this connection.\n */\n protected getMigrations(): Migration[] {\n const migrations = this.connection.migrations.map(migration => {\n const migrationClassName = migration.name || (migration.constructor as any).name;\n const migrationTimestamp = parseInt(migrationClassName.substr(-13), 10);\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new TypeORMError(`${migrationClassName} migration name is wrong. Migration class name should have a JavaScript timestamp appended.`);\n }\n\n return new Migration(undefined, migrationTimestamp, migrationClassName, migration);\n });\n\n this.checkForDuplicateMigrations(migrations);\n\n // sort them by timestamp\n return migrations.sort((a, b) => a.timestamp - b.timestamp);\n }\n\n protected checkForDuplicateMigrations(migrations: Migration[]) {\n const migrationNames = migrations.map(migration => migration.name);\n const duplicates = Array.from(new Set(migrationNames.filter((migrationName, index) => migrationNames.indexOf(migrationName) < index)));\n if (duplicates.length > 0) {\n throw Error(`Duplicate migrations: ${duplicates.join(\", \")}`);\n }\n }\n\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n protected getLatestTimestampMigration(migrations: Migration[]): Migration|undefined {\n const sortedMigrations = migrations.map(migration => migration).sort((a, b) => (a.timestamp - b.timestamp) * -1);\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n protected getLatestExecutedMigration(sortedMigrations: Migration[]): Migration|undefined {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Inserts new executed migration's data into migrations table.\n */\n protected async insertExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n const values: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n values[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n values[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n values[\"timestamp\"] = migration.timestamp;\n values[\"name\"] = migration.name;\n }\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).insertOne(values);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.insert()\n .into(this.migrationsTable)\n .values(values)\n .execute();\n }\n }\n\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n protected async deleteExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n\n const conditions: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n conditions[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n conditions[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n conditions[\"timestamp\"] = migration.timestamp;\n conditions[\"name\"] = migration.name;\n }\n\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).deleteOne(conditions);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.delete()\n .from(this.migrationsTable)\n .where(`${qb.escape(\"timestamp\")} = :timestamp`)\n .andWhere(`${qb.escape(\"name\")} = :name`)\n .setParameters(conditions)\n .execute();\n }\n\n }\n\n protected async withQueryRunner<T extends any>(callback: (queryRunner: QueryRunner) => T | Promise<T>) {\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n try {\n return callback(queryRunner);\n } finally {\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n }\n }\n}\n"],"sourceRoot":".."}
@@ -159,6 +159,9 @@ var OneToManySubjectBuilder = /** @class */ (function () {
159
159
  else if (relation.inverseRelation.orphanedRowAction === "delete") {
160
160
  removedRelatedEntitySubject.mustBeRemoved = true;
161
161
  }
162
+ else if (relation.inverseRelation.orphanedRowAction === "soft-delete") {
163
+ removedRelatedEntitySubject.canBeSoftRemoved = true;
164
+ }
162
165
  _this.subjects.push(removedRelatedEntitySubject);
163
166
  });
164
167
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/persistence/subject-builder/OneToManySubjectBuilder.ts"],"names":[],"mappings":"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","file":"OneToManySubjectBuilder.js","sourcesContent":["import {Subject} from \"../Subject\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {RelationMetadata} from \"../../metadata/RelationMetadata\";\n\n/**\n * Builds operations needs to be executed for one-to-many relations of the given subjects.\n *\n * by example: post contains one-to-many relation with category in the property called \"categories\", e.g.\n * @OneToMany(type => Category, category => category.post) categories: Category[]\n * If user adds categories into the post and saves post we need to bind them.\n * This operation requires updation of category table since its owner of the relation and contains a join column.\n *\n * note: this class shares lot of things with OneToOneInverseSideOperationBuilder, so when you change this class\n * make sure to reflect changes there as well.\n */\nexport class OneToManySubjectBuilder {\n\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n\n constructor(protected subjects: Subject[]) {\n }\n\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n\n /**\n * Builds all required operations.\n */\n build(): void {\n this.subjects.forEach(subject => {\n subject.metadata.oneToManyRelations.forEach(relation => {\n\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n\n this.buildForSubjectRelation(subject, relation);\n });\n });\n }\n\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n */\n protected buildForSubjectRelation(subject: Subject, relation: RelationMetadata) {\n // prepare objects (relation id maps) for the database entity\n // by example: since subject is a post, we are expecting to get all post's categories saved in the database here,\n // particularly their relation ids, e.g. category ids stored in the database\n\n\t\t// in most cases relatedEntityDatabaseValues will contain only the entity key properties.\n\t\t// this is because subject.databaseEntity contains relations with loaded relation ids only.\n\t\t// however if the entity uses the afterLoad hook to calculate any properties, the fetched \"key object\" might include ADDITIONAL properties.\n\t\t// to handle such situations, we pass the data to relation.inverseEntityMetadata.getEntityIdMap to extract the key without any other properties.\n\n let relatedEntityDatabaseRelationIds: ObjectLiteral[] = [];\n if (subject.databaseEntity) { // related entities in the database can exist only if this entity (post) is saved\n const relatedEntityDatabaseRelation: ObjectLiteral[] | undefined = relation.getEntityValue(subject.databaseEntity)\n if (relatedEntityDatabaseRelation) {\n relatedEntityDatabaseRelationIds = relatedEntityDatabaseRelation.map((entity) => relation.inverseEntityMetadata.getEntityIdMap(entity)!);\n }\n }\n\n // get related entities of persisted entity\n // by example: get categories from the passed to persist post entity\n let relatedEntities: ObjectLiteral[] = relation.getEntityValue(subject.entity!);\n if (relatedEntities === null) // we treat relations set to null as removed, so we don't skip it\n relatedEntities = [] as ObjectLiteral[];\n if (relatedEntities === undefined) // if relation is undefined then nothing to update\n return;\n\n // extract only relation ids from the related entities, since we only need them for comparison\n // by example: extract from categories only relation ids (category id, or let's say category title, depend on join column options)\n const relatedPersistedEntityRelationIds: ObjectLiteral[] = [];\n relatedEntities.forEach(relatedEntity => { // by example: relatedEntity is a category here\n let relationIdMap = relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity); // by example: relationIdMap is category.id map here, e.g. { id: ... }\n\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n let relatedEntitySubject = this.subjects.find(subject => {\n return subject.entity === relatedEntity;\n });\n\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relationIdMap = relatedEntitySubject.identifier;\n\n // if relationIdMap is undefined then it means user binds object which is not saved in the database yet\n // by example: if post contains categories which does not have ids yet (because they are new)\n // it means they are always newly inserted and relation update operation always must be created for them\n // it does not make sense to perform difference operation for them for both add and remove actions\n if (!relationIdMap) {\n\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new TypeORMError(`One-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject)\n return;\n\n // okay, so related subject exist and its marked for insertion, then add a new change map\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation!,\n value: subject\n });\n\n return;\n }\n\n // check if this binding really exist in the database\n // by example: find our category if its already bind in the database\n const relationIdInDatabaseSubjectRelation = relatedEntityDatabaseRelationIds.find(relatedDatabaseEntityRelationId => {\n return OrmUtils.compareIds(relationIdMap, relatedDatabaseEntityRelationId);\n });\n\n // if relationIdMap DOES NOT exist in the subject's relation in the database it means its a new relation and we need to \"bind\" them\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n if (!relationIdInDatabaseSubjectRelation) {\n\n // if there is no relatedEntitySubject then it means \"category\" wasn't persisted,\n // but since we are going to update \"category\" table (since its an owning side of relation with join column)\n // we create a new subject here:\n if (!relatedEntitySubject) {\n relatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n canBeUpdated: true,\n identifier: relationIdMap\n });\n this.subjects.push(relatedEntitySubject);\n }\n\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation!,\n value: subject\n });\n }\n\n // if related entity has relation id then we add it to the list of relation ids\n // this list will be used later to compare with database relation ids to find a difference\n // what exist in this array and does not exist in the database are newly inserted relations\n // what does not exist in this array, but exist in the database are removed relations\n // removed relations are set to null from inverse side of relation\n relatedPersistedEntityRelationIds.push(relationIdMap);\n });\n\n // find what related entities were added and what were removed based on difference between what we save and what database has\n EntityMetadata\n .difference(relatedEntityDatabaseRelationIds, relatedPersistedEntityRelationIds)\n .forEach(removedRelatedEntityRelationId => { // by example: removedRelatedEntityRelationId is category that was bind in the database before, but now its unbind\n\n // todo: probably we can improve this in the future by finding entity with column those values,\n // todo: maybe it was already in persistence process. This is possible due to unique requirements of join columns\n // we create a new subject which operations will be executed in subject operation executor\n const removedRelatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n identifier: removedRelatedEntityRelationId,\n });\n\n if (!relation.inverseRelation || relation.inverseRelation.orphanedRowAction === \"nullify\") {\n removedRelatedEntitySubject.canBeUpdated = true;\n removedRelatedEntitySubject.changeMaps = [{\n relation: relation.inverseRelation!,\n value: null\n }];\n } else if (relation.inverseRelation.orphanedRowAction === \"delete\") {\n removedRelatedEntitySubject.mustBeRemoved = true;\n }\n\n this.subjects.push(removedRelatedEntitySubject);\n });\n }\n\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../browser/src/persistence/subject-builder/OneToManySubjectBuilder.ts"],"names":[],"mappings":"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","file":"OneToManySubjectBuilder.js","sourcesContent":["import {Subject} from \"../Subject\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {RelationMetadata} from \"../../metadata/RelationMetadata\";\n\n/**\n * Builds operations needs to be executed for one-to-many relations of the given subjects.\n *\n * by example: post contains one-to-many relation with category in the property called \"categories\", e.g.\n * @OneToMany(type => Category, category => category.post) categories: Category[]\n * If user adds categories into the post and saves post we need to bind them.\n * This operation requires updation of category table since its owner of the relation and contains a join column.\n *\n * note: this class shares lot of things with OneToOneInverseSideOperationBuilder, so when you change this class\n * make sure to reflect changes there as well.\n */\nexport class OneToManySubjectBuilder {\n\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n\n constructor(protected subjects: Subject[]) {\n }\n\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n\n /**\n * Builds all required operations.\n */\n build(): void {\n this.subjects.forEach(subject => {\n subject.metadata.oneToManyRelations.forEach(relation => {\n\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n\n this.buildForSubjectRelation(subject, relation);\n });\n });\n }\n\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n */\n protected buildForSubjectRelation(subject: Subject, relation: RelationMetadata) {\n // prepare objects (relation id maps) for the database entity\n // by example: since subject is a post, we are expecting to get all post's categories saved in the database here,\n // particularly their relation ids, e.g. category ids stored in the database\n\n\t\t// in most cases relatedEntityDatabaseValues will contain only the entity key properties.\n\t\t// this is because subject.databaseEntity contains relations with loaded relation ids only.\n\t\t// however if the entity uses the afterLoad hook to calculate any properties, the fetched \"key object\" might include ADDITIONAL properties.\n\t\t// to handle such situations, we pass the data to relation.inverseEntityMetadata.getEntityIdMap to extract the key without any other properties.\n\n let relatedEntityDatabaseRelationIds: ObjectLiteral[] = [];\n if (subject.databaseEntity) { // related entities in the database can exist only if this entity (post) is saved\n const relatedEntityDatabaseRelation: ObjectLiteral[] | undefined = relation.getEntityValue(subject.databaseEntity)\n if (relatedEntityDatabaseRelation) {\n relatedEntityDatabaseRelationIds = relatedEntityDatabaseRelation.map((entity) => relation.inverseEntityMetadata.getEntityIdMap(entity)!);\n }\n }\n\n // get related entities of persisted entity\n // by example: get categories from the passed to persist post entity\n let relatedEntities: ObjectLiteral[] = relation.getEntityValue(subject.entity!);\n if (relatedEntities === null) // we treat relations set to null as removed, so we don't skip it\n relatedEntities = [] as ObjectLiteral[];\n if (relatedEntities === undefined) // if relation is undefined then nothing to update\n return;\n\n // extract only relation ids from the related entities, since we only need them for comparison\n // by example: extract from categories only relation ids (category id, or let's say category title, depend on join column options)\n const relatedPersistedEntityRelationIds: ObjectLiteral[] = [];\n relatedEntities.forEach(relatedEntity => { // by example: relatedEntity is a category here\n let relationIdMap = relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity); // by example: relationIdMap is category.id map here, e.g. { id: ... }\n\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n let relatedEntitySubject = this.subjects.find(subject => {\n return subject.entity === relatedEntity;\n });\n\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relationIdMap = relatedEntitySubject.identifier;\n\n // if relationIdMap is undefined then it means user binds object which is not saved in the database yet\n // by example: if post contains categories which does not have ids yet (because they are new)\n // it means they are always newly inserted and relation update operation always must be created for them\n // it does not make sense to perform difference operation for them for both add and remove actions\n if (!relationIdMap) {\n\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new TypeORMError(`One-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject)\n return;\n\n // okay, so related subject exist and its marked for insertion, then add a new change map\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation!,\n value: subject\n });\n\n return;\n }\n\n // check if this binding really exist in the database\n // by example: find our category if its already bind in the database\n const relationIdInDatabaseSubjectRelation = relatedEntityDatabaseRelationIds.find(relatedDatabaseEntityRelationId => {\n return OrmUtils.compareIds(relationIdMap, relatedDatabaseEntityRelationId);\n });\n\n // if relationIdMap DOES NOT exist in the subject's relation in the database it means its a new relation and we need to \"bind\" them\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n if (!relationIdInDatabaseSubjectRelation) {\n\n // if there is no relatedEntitySubject then it means \"category\" wasn't persisted,\n // but since we are going to update \"category\" table (since its an owning side of relation with join column)\n // we create a new subject here:\n if (!relatedEntitySubject) {\n relatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n canBeUpdated: true,\n identifier: relationIdMap\n });\n this.subjects.push(relatedEntitySubject);\n }\n\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation!,\n value: subject\n });\n }\n\n // if related entity has relation id then we add it to the list of relation ids\n // this list will be used later to compare with database relation ids to find a difference\n // what exist in this array and does not exist in the database are newly inserted relations\n // what does not exist in this array, but exist in the database are removed relations\n // removed relations are set to null from inverse side of relation\n relatedPersistedEntityRelationIds.push(relationIdMap);\n });\n\n // find what related entities were added and what were removed based on difference between what we save and what database has\n EntityMetadata\n .difference(relatedEntityDatabaseRelationIds, relatedPersistedEntityRelationIds)\n .forEach(removedRelatedEntityRelationId => { // by example: removedRelatedEntityRelationId is category that was bind in the database before, but now its unbind\n\n // todo: probably we can improve this in the future by finding entity with column those values,\n // todo: maybe it was already in persistence process. This is possible due to unique requirements of join columns\n // we create a new subject which operations will be executed in subject operation executor\n const removedRelatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n identifier: removedRelatedEntityRelationId,\n });\n\n if (!relation.inverseRelation || relation.inverseRelation.orphanedRowAction === \"nullify\") {\n removedRelatedEntitySubject.canBeUpdated = true;\n removedRelatedEntitySubject.changeMaps = [{\n relation: relation.inverseRelation!,\n value: null\n }];\n } else if (relation.inverseRelation.orphanedRowAction === \"delete\") {\n removedRelatedEntitySubject.mustBeRemoved = true;\n }\n else if (relation.inverseRelation.orphanedRowAction === \"soft-delete\") {\n removedRelatedEntitySubject.canBeSoftRemoved = true;\n }\n \n this.subjects.push(removedRelatedEntitySubject);\n });\n }\n\n}\n"],"sourceRoot":"../.."}
@@ -12,7 +12,7 @@ import { DeleteResult } from "./result/DeleteResult";
12
12
  export declare class DeleteQueryBuilder<Entity> extends QueryBuilder<Entity> implements WhereExpressionBuilder {
13
13
  constructor(connectionOrQueryBuilder: Connection | QueryBuilder<any>, queryRunner?: QueryRunner);
14
14
  /**
15
- * Gets generated sql query without parameters being replaced.
15
+ * Gets generated SQL query without parameters being replaced.
16
16
  */
17
17
  getQuery(): string;
18
18
  /**
@@ -42,7 +42,9 @@ export declare class DeleteQueryBuilder<Entity> extends QueryBuilder<Entity> imp
42
42
  */
43
43
  orWhere(where: Brackets | string | ((qb: this) => string) | ObjectLiteral | ObjectLiteral[], parameters?: ObjectLiteral): this;
44
44
  /**
45
- * Adds new AND WHERE with conditions for the given ids.
45
+ * Sets WHERE condition in the query builder with a condition for the given ids.
46
+ * If you had previously WHERE expression defined,
47
+ * calling this function will override previously set WHERE conditions.
46
48
  */
47
49
  whereInIds(ids: any | any[]): this;
48
50
  /**
@@ -23,7 +23,7 @@ var DeleteQueryBuilder = /** @class */ (function (_super) {
23
23
  // Public Implemented Methods
24
24
  // -------------------------------------------------------------------------
25
25
  /**
26
- * Gets generated sql query without parameters being replaced.
26
+ * Gets generated SQL query without parameters being replaced.
27
27
  */
28
28
  DeleteQueryBuilder.prototype.getQuery = function () {
29
29
  var sql = this.createComment();
@@ -148,7 +148,9 @@ var DeleteQueryBuilder = /** @class */ (function (_super) {
148
148
  return this;
149
149
  };
150
150
  /**
151
- * Adds new AND WHERE with conditions for the given ids.
151
+ * Sets WHERE condition in the query builder with a condition for the given ids.
152
+ * If you had previously WHERE expression defined,
153
+ * calling this function will override previously set WHERE conditions.
152
154
  */
153
155
  DeleteQueryBuilder.prototype.whereInIds = function (ids) {
154
156
  return this.where(this.getWhereInIdsCondition(ids));
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/query-builder/DeleteQueryBuilder.ts"],"names":[],"mappings":"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","file":"DeleteQueryBuilder.js","sourcesContent":["import {CockroachDriver} from \"../driver/cockroachdb/CockroachDriver\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {Connection} from \"../connection/Connection\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {PostgresDriver} from \"../driver/postgres/PostgresDriver\";\nimport {WhereExpressionBuilder} from \"./WhereExpressionBuilder\";\nimport {Brackets} from \"./Brackets\";\nimport {DeleteResult} from \"./result/DeleteResult\";\nimport {ReturningStatementNotSupportedError} from \"../error/ReturningStatementNotSupportedError\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport class DeleteQueryBuilder<Entity> extends QueryBuilder<Entity> implements WhereExpressionBuilder {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connectionOrQueryBuilder: Connection|QueryBuilder<any>, queryRunner?: QueryRunner) {\n super(connectionOrQueryBuilder as any, queryRunner);\n this.expressionMap.aliasNamePrefixingEnabled = false;\n }\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated sql query without parameters being replaced.\n */\n getQuery(): string {\n let sql = this.createComment();\n sql += this.createDeleteExpression();\n return sql.trim();\n }\n\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n async execute(): Promise<DeleteResult> {\n const [sql, parameters] = this.getQueryAndParameters();\n const queryRunner = this.obtainQueryRunner();\n let transactionStartedByUs: boolean = false;\n\n try {\n\n // start transaction if it was enabled\n if (this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // call before deletion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n await queryRunner.broadcaster.broadcast(\"BeforeRemove\", this.expressionMap.mainAlias!.metadata);\n }\n\n // execute query\n const queryResult = await queryRunner.query(sql, parameters, true);\n const deleteResult = DeleteResult.from(queryResult);\n\n // call after deletion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n await queryRunner.broadcaster.broadcast(\"AfterRemove\", this.expressionMap.mainAlias!.metadata);\n }\n\n // close transaction if we started it\n if (transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n return deleteResult;\n\n } catch (error) {\n\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n throw error;\n\n } finally {\n if (queryRunner !== this.queryRunner) { // means we created our own query runner\n await queryRunner.release();\n }\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\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 from<T>(entityTarget: EntityTarget<T>, aliasName?: string): DeleteQueryBuilder<T> {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n const mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return (this as any) as DeleteQueryBuilder<T>;\n }\n\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n where(where: Brackets|string|((qb: this) => string)|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n const condition = this.getWhereCondition(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n }\n\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n andWhere(where: Brackets|string|((qb: this) => string)|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.getWhereCondition(where) });\n if (parameters) this.setParameters(parameters);\n return this;\n }\n\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n orWhere(where: Brackets|string|((qb: this) => string)|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.getWhereCondition(where) });\n if (parameters) this.setParameters(parameters);\n return this;\n }\n\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n whereInIds(ids: any|any[]): this {\n return this.where(this.getWhereInIdsCondition(ids));\n }\n\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n andWhereInIds(ids: any|any[]): this {\n return this.andWhere(this.getWhereInIdsCondition(ids));\n }\n\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n orWhereInIds(ids: any|any[]): this {\n return this.orWhere(this.getWhereInIdsCondition(ids));\n }\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n output(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n output(output: string): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this {\n return this.returning(output);\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n returning(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n returning(returning: string): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this {\n\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n\n this.expressionMap.returning = returning;\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates DELETE express used to perform query.\n */\n protected createDeleteExpression() {\n const tableName = this.getTableName(this.getMainTableName());\n const whereExpression = this.createWhereExpression();\n const returningExpression = this.createReturningExpression();\n\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof CockroachDriver)) {\n return `DELETE FROM ${tableName}${whereExpression} RETURNING ${returningExpression}`;\n\n } else if (returningExpression !== \"\" && this.connection.driver instanceof SqlServerDriver) {\n return `DELETE FROM ${tableName} OUTPUT ${returningExpression}${whereExpression}`;\n\n } else {\n return `DELETE FROM ${tableName}${whereExpression}`;\n }\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/query-builder/DeleteQueryBuilder.ts"],"names":[],"mappings":"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","file":"DeleteQueryBuilder.js","sourcesContent":["import {CockroachDriver} from \"../driver/cockroachdb/CockroachDriver\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {Connection} from \"../connection/Connection\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {PostgresDriver} from \"../driver/postgres/PostgresDriver\";\nimport {WhereExpressionBuilder} from \"./WhereExpressionBuilder\";\nimport {Brackets} from \"./Brackets\";\nimport {DeleteResult} from \"./result/DeleteResult\";\nimport {ReturningStatementNotSupportedError} from \"../error/ReturningStatementNotSupportedError\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport class DeleteQueryBuilder<Entity> extends QueryBuilder<Entity> implements WhereExpressionBuilder {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connectionOrQueryBuilder: Connection|QueryBuilder<any>, queryRunner?: QueryRunner) {\n super(connectionOrQueryBuilder as any, queryRunner);\n this.expressionMap.aliasNamePrefixingEnabled = false;\n }\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated SQL query without parameters being replaced.\n */\n getQuery(): string {\n let sql = this.createComment();\n sql += this.createDeleteExpression();\n return sql.trim();\n }\n\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n async execute(): Promise<DeleteResult> {\n const [sql, parameters] = this.getQueryAndParameters();\n const queryRunner = this.obtainQueryRunner();\n let transactionStartedByUs: boolean = false;\n\n try {\n\n // start transaction if it was enabled\n if (this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // call before deletion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n await queryRunner.broadcaster.broadcast(\"BeforeRemove\", this.expressionMap.mainAlias!.metadata);\n }\n\n // execute query\n const queryResult = await queryRunner.query(sql, parameters, true);\n const deleteResult = DeleteResult.from(queryResult);\n\n // call after deletion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n await queryRunner.broadcaster.broadcast(\"AfterRemove\", this.expressionMap.mainAlias!.metadata);\n }\n\n // close transaction if we started it\n if (transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n return deleteResult;\n\n } catch (error) {\n\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n throw error;\n\n } finally {\n if (queryRunner !== this.queryRunner) { // means we created our own query runner\n await queryRunner.release();\n }\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\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 from<T>(entityTarget: EntityTarget<T>, aliasName?: string): DeleteQueryBuilder<T> {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n const mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return (this as any) as DeleteQueryBuilder<T>;\n }\n\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n where(where: Brackets|string|((qb: this) => string)|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n const condition = this.getWhereCondition(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n }\n\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n andWhere(where: Brackets|string|((qb: this) => string)|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.getWhereCondition(where) });\n if (parameters) this.setParameters(parameters);\n return this;\n }\n\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n orWhere(where: Brackets|string|((qb: this) => string)|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.getWhereCondition(where) });\n if (parameters) this.setParameters(parameters);\n return this;\n }\n\n /**\n * Sets WHERE condition in the query builder with a condition for the given ids.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n */\n whereInIds(ids: any|any[]): this {\n return this.where(this.getWhereInIdsCondition(ids));\n }\n\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n andWhereInIds(ids: any|any[]): this {\n return this.andWhere(this.getWhereInIdsCondition(ids));\n }\n\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n orWhereInIds(ids: any|any[]): this {\n return this.orWhere(this.getWhereInIdsCondition(ids));\n }\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n output(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n output(output: string): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this {\n return this.returning(output);\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n returning(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n returning(returning: string): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this {\n\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n\n this.expressionMap.returning = returning;\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates DELETE express used to perform query.\n */\n protected createDeleteExpression() {\n const tableName = this.getTableName(this.getMainTableName());\n const whereExpression = this.createWhereExpression();\n const returningExpression = this.createReturningExpression();\n\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof CockroachDriver)) {\n return `DELETE FROM ${tableName}${whereExpression} RETURNING ${returningExpression}`;\n\n } else if (returningExpression !== \"\" && this.connection.driver instanceof SqlServerDriver) {\n return `DELETE FROM ${tableName} OUTPUT ${returningExpression}${whereExpression}`;\n\n } else {\n return `DELETE FROM ${tableName}${whereExpression}`;\n }\n }\n\n}\n"],"sourceRoot":".."}
@@ -9,7 +9,7 @@ import { ColumnMetadata } from "../metadata/ColumnMetadata";
9
9
  */
10
10
  export declare class InsertQueryBuilder<Entity> extends QueryBuilder<Entity> {
11
11
  /**
12
- * Gets generated sql query without parameters being replaced.
12
+ * Gets generated SQL query without parameters being replaced.
13
13
  */
14
14
  getQuery(): string;
15
15
  /**
@@ -28,7 +28,7 @@ var InsertQueryBuilder = /** @class */ (function (_super) {
28
28
  // Public Implemented Methods
29
29
  // -------------------------------------------------------------------------
30
30
  /**
31
- * Gets generated sql query without parameters being replaced.
31
+ * Gets generated SQL query without parameters being replaced.
32
32
  */
33
33
  InsertQueryBuilder.prototype.getQuery = function () {
34
34
  var sql = this.createComment();