typeorm 0.3.6-dev.9d331b1 → 0.3.6-dev.bbdc20f

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 (370) hide show
  1. package/README.md +34 -14
  2. package/browser/cache/DbQueryResultCache.js +9 -1
  3. package/browser/cache/DbQueryResultCache.js.map +1 -1
  4. package/browser/cache/RedisQueryResultCache.js +3 -0
  5. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  6. package/browser/data-source/DataSourceOptions.d.ts +2 -1
  7. package/browser/data-source/DataSourceOptions.js.map +1 -1
  8. package/browser/decorator/Index.js +1 -0
  9. package/browser/decorator/Index.js.map +1 -1
  10. package/browser/decorator/columns/PrimaryColumn.js +4 -1
  11. package/browser/decorator/columns/PrimaryColumn.js.map +1 -1
  12. package/browser/decorator/options/ColumnOptions.d.ts +10 -2
  13. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  14. package/browser/decorator/options/IndexOptions.d.ts +8 -0
  15. package/browser/decorator/options/IndexOptions.js.map +1 -1
  16. package/browser/decorator/options/JoinColumnOptions.d.ts +4 -0
  17. package/browser/decorator/options/JoinColumnOptions.js.map +1 -1
  18. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  19. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  20. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  21. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  22. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  23. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  24. package/browser/decorator/relations/JoinColumn.js +1 -0
  25. package/browser/decorator/relations/JoinColumn.js.map +1 -1
  26. package/browser/driver/DriverFactory.js +4 -0
  27. package/browser/driver/DriverFactory.js.map +1 -1
  28. package/browser/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  29. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  30. package/browser/driver/cockroachdb/CockroachDriver.js +4 -1
  31. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  32. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  33. package/browser/driver/cockroachdb/CockroachQueryRunner.js +233 -33
  34. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  35. package/browser/driver/mongodb/typings.d.ts +5 -5
  36. package/browser/driver/mongodb/typings.js.map +1 -1
  37. package/browser/driver/mysql/MysqlDriver.d.ts +1 -0
  38. package/browser/driver/mysql/MysqlDriver.js +94 -23
  39. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  40. package/browser/driver/mysql/MysqlQueryRunner.js +219 -24
  41. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  42. package/browser/driver/oracle/OracleDriver.js +79 -15
  43. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  44. package/browser/driver/oracle/OracleQueryRunner.d.ts +3 -3
  45. package/browser/driver/oracle/OracleQueryRunner.js +216 -42
  46. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  47. package/browser/driver/postgres/PostgresDriver.js +95 -18
  48. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  49. package/browser/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  50. package/browser/driver/postgres/PostgresQueryRunner.js +159 -59
  51. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  52. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +17 -0
  53. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js +3 -0
  54. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -0
  55. package/browser/driver/spanner/SpannerConnectionOptions.d.ts +120 -0
  56. package/browser/driver/spanner/SpannerConnectionOptions.js +3 -0
  57. package/browser/driver/spanner/SpannerConnectionOptions.js.map +1 -0
  58. package/browser/driver/spanner/SpannerDriver.d.ts +241 -0
  59. package/browser/driver/spanner/SpannerDriver.js +604 -0
  60. package/browser/driver/spanner/SpannerDriver.js.map +1 -0
  61. package/browser/driver/spanner/SpannerQueryRunner.d.ts +350 -0
  62. package/browser/driver/spanner/SpannerQueryRunner.js +1445 -0
  63. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -0
  64. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +65 -16
  65. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  66. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +218 -32
  67. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  68. package/browser/driver/sqlserver/SqlServerDriver.d.ts +3 -1
  69. package/browser/driver/sqlserver/SqlServerDriver.js +99 -26
  70. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  71. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  72. package/browser/driver/sqlserver/SqlServerQueryRunner.js +251 -37
  73. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  74. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.d.ts +1 -1
  75. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
  76. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.d.ts +2 -2
  77. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
  78. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.d.ts +2 -2
  79. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
  80. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.d.ts +2 -2
  81. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
  82. package/browser/driver/types/ColumnTypes.d.ts +1 -1
  83. package/browser/driver/types/ColumnTypes.js.map +1 -1
  84. package/browser/driver/types/DatabaseType.d.ts +1 -1
  85. package/browser/driver/types/DatabaseType.js.map +1 -1
  86. package/browser/entity-manager/EntityManager.js +1 -1
  87. package/browser/entity-manager/EntityManager.js.map +1 -1
  88. package/browser/entity-schema/EntitySchemaColumnOptions.d.ts +6 -2
  89. package/browser/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  90. package/browser/entity-schema/EntitySchemaIndexOptions.d.ts +8 -0
  91. package/browser/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
  92. package/browser/entity-schema/EntitySchemaTransformer.js +3 -0
  93. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  94. package/browser/find-options/FindOneOptions.d.ts +1 -1
  95. package/browser/find-options/FindOneOptions.js.map +1 -1
  96. package/browser/find-options/FindOptionsUtils.d.ts +2 -1
  97. package/browser/find-options/FindOptionsUtils.js +2 -1
  98. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  99. package/browser/logger/AdvancedConsoleLogger.d.ts +1 -1
  100. package/browser/logger/AdvancedConsoleLogger.js +1 -1
  101. package/browser/logger/AdvancedConsoleLogger.js.map +1 -1
  102. package/browser/metadata/ColumnMetadata.d.ts +10 -2
  103. package/browser/metadata/ColumnMetadata.js +8 -0
  104. package/browser/metadata/ColumnMetadata.js.map +1 -1
  105. package/browser/metadata/EntityMetadata.js +1 -1
  106. package/browser/metadata/EntityMetadata.js.map +1 -1
  107. package/browser/metadata/ForeignKeyMetadata.d.ts +7 -0
  108. package/browser/metadata/ForeignKeyMetadata.js +4 -1
  109. package/browser/metadata/ForeignKeyMetadata.js.map +1 -1
  110. package/browser/metadata/IndexMetadata.d.ts +8 -0
  111. package/browser/metadata/IndexMetadata.js +9 -0
  112. package/browser/metadata/IndexMetadata.js.map +1 -1
  113. package/browser/metadata-args/IndexMetadataArgs.d.ts +8 -0
  114. package/browser/metadata-args/IndexMetadataArgs.js.map +1 -1
  115. package/browser/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  116. package/browser/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  117. package/browser/metadata-builder/EntityMetadataBuilder.js +13 -6
  118. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  119. package/browser/metadata-builder/EntityMetadataValidator.js +17 -0
  120. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  121. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +18 -6
  122. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  123. package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  124. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  125. package/browser/migration/MigrationExecutor.js +1 -1
  126. package/browser/migration/MigrationExecutor.js.map +1 -1
  127. package/browser/persistence/SubjectDatabaseEntityLoader.d.ts +1 -1
  128. package/browser/persistence/SubjectDatabaseEntityLoader.js +1 -1
  129. package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  130. package/browser/persistence/SubjectExecutor.js +1 -1
  131. package/browser/persistence/SubjectExecutor.js.map +1 -1
  132. package/browser/persistence/subject-builder/CascadesSubjectBuilder.d.ts +1 -1
  133. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
  134. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  135. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js +1 -1
  136. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  137. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
  138. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  139. package/browser/platform/PlatformTools.js +5 -0
  140. package/browser/platform/PlatformTools.js.map +1 -1
  141. package/browser/query-builder/InsertQueryBuilder.js +15 -3
  142. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  143. package/browser/query-builder/QueryBuilder.d.ts +1 -1
  144. package/browser/query-builder/QueryBuilder.js +15 -15
  145. package/browser/query-builder/QueryBuilder.js.map +1 -1
  146. package/browser/query-builder/QueryExpressionMap.d.ts +2 -2
  147. package/browser/query-builder/QueryExpressionMap.js +1 -1
  148. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  149. package/browser/query-builder/ReturningResultsEntityUpdator.js +2 -2
  150. package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  151. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  152. package/browser/query-builder/SelectQueryBuilder.js +25 -4
  153. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  154. package/browser/query-builder/UpdateQueryBuilder.js +18 -7
  155. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  156. package/browser/query-runner/BaseQueryRunner.d.ts +10 -0
  157. package/browser/query-runner/BaseQueryRunner.js +25 -1
  158. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  159. package/browser/query-runner/QueryRunner.d.ts +2 -2
  160. package/browser/query-runner/QueryRunner.js.map +1 -1
  161. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
  162. package/browser/schema-builder/RdbmsSchemaBuilder.js +26 -6
  163. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  164. package/browser/schema-builder/options/TableColumnOptions.d.ts +10 -2
  165. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  166. package/browser/schema-builder/options/TableForeignKeyOptions.d.ts +1 -1
  167. package/browser/schema-builder/options/TableForeignKeyOptions.js.map +1 -1
  168. package/browser/schema-builder/options/TableIndexOptions.d.ts +8 -0
  169. package/browser/schema-builder/options/TableIndexOptions.js.map +1 -1
  170. package/browser/schema-builder/table/TableColumn.d.ts +6 -2
  171. package/browser/schema-builder/table/TableColumn.js +2 -0
  172. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  173. package/browser/schema-builder/table/TableIndex.d.ts +8 -0
  174. package/browser/schema-builder/table/TableIndex.js +3 -0
  175. package/browser/schema-builder/table/TableIndex.js.map +1 -1
  176. package/browser/schema-builder/util/TableUtils.js +1 -0
  177. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  178. package/browser/util/OrmUtils.d.ts +1 -1
  179. package/browser/util/OrmUtils.js +4 -4
  180. package/browser/util/OrmUtils.js.map +1 -1
  181. package/browser/util/escapeRegExp.d.ts +1 -0
  182. package/browser/util/escapeRegExp.js +6 -0
  183. package/browser/util/escapeRegExp.js.map +1 -0
  184. package/cache/DbQueryResultCache.js +9 -1
  185. package/cache/DbQueryResultCache.js.map +1 -1
  186. package/cache/RedisQueryResultCache.js +3 -0
  187. package/cache/RedisQueryResultCache.js.map +1 -1
  188. package/commands/InitCommand.js +1 -1
  189. package/commands/InitCommand.js.map +1 -1
  190. package/commands/MigrationGenerateCommand.js +3 -2
  191. package/commands/MigrationGenerateCommand.js.map +1 -1
  192. package/data-source/DataSourceOptions.d.ts +2 -1
  193. package/data-source/DataSourceOptions.js.map +1 -1
  194. package/decorator/Index.js +1 -0
  195. package/decorator/Index.js.map +1 -1
  196. package/decorator/columns/PrimaryColumn.js +4 -1
  197. package/decorator/columns/PrimaryColumn.js.map +1 -1
  198. package/decorator/options/ColumnOptions.d.ts +10 -2
  199. package/decorator/options/ColumnOptions.js.map +1 -1
  200. package/decorator/options/IndexOptions.d.ts +8 -0
  201. package/decorator/options/IndexOptions.js.map +1 -1
  202. package/decorator/options/JoinColumnOptions.d.ts +4 -0
  203. package/decorator/options/JoinColumnOptions.js.map +1 -1
  204. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  205. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  206. package/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  207. package/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  208. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  209. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  210. package/decorator/relations/JoinColumn.js +1 -0
  211. package/decorator/relations/JoinColumn.js.map +1 -1
  212. package/driver/DriverFactory.js +4 -0
  213. package/driver/DriverFactory.js.map +1 -1
  214. package/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  215. package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  216. package/driver/cockroachdb/CockroachDriver.js +4 -1
  217. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  218. package/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  219. package/driver/cockroachdb/CockroachQueryRunner.js +233 -33
  220. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  221. package/driver/mongodb/typings.d.ts +5 -5
  222. package/driver/mongodb/typings.js.map +1 -1
  223. package/driver/mysql/MysqlDriver.d.ts +1 -0
  224. package/driver/mysql/MysqlDriver.js +94 -23
  225. package/driver/mysql/MysqlDriver.js.map +1 -1
  226. package/driver/mysql/MysqlQueryRunner.js +219 -24
  227. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  228. package/driver/oracle/OracleDriver.js +79 -15
  229. package/driver/oracle/OracleDriver.js.map +1 -1
  230. package/driver/oracle/OracleQueryRunner.d.ts +3 -3
  231. package/driver/oracle/OracleQueryRunner.js +216 -42
  232. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  233. package/driver/postgres/PostgresDriver.js +95 -18
  234. package/driver/postgres/PostgresDriver.js.map +1 -1
  235. package/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  236. package/driver/postgres/PostgresQueryRunner.js +159 -59
  237. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  238. package/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +17 -0
  239. package/driver/spanner/SpannerConnectionCredentialsOptions.js +4 -0
  240. package/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -0
  241. package/driver/spanner/SpannerConnectionOptions.d.ts +120 -0
  242. package/driver/spanner/SpannerConnectionOptions.js +4 -0
  243. package/driver/spanner/SpannerConnectionOptions.js.map +1 -0
  244. package/driver/spanner/SpannerDriver.d.ts +241 -0
  245. package/driver/spanner/SpannerDriver.js +608 -0
  246. package/driver/spanner/SpannerDriver.js.map +1 -0
  247. package/driver/spanner/SpannerQueryRunner.d.ts +350 -0
  248. package/driver/spanner/SpannerQueryRunner.js +1449 -0
  249. package/driver/spanner/SpannerQueryRunner.js.map +1 -0
  250. package/driver/sqlite-abstract/AbstractSqliteDriver.js +65 -16
  251. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  252. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +218 -32
  253. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  254. package/driver/sqlserver/SqlServerDriver.d.ts +3 -1
  255. package/driver/sqlserver/SqlServerDriver.js +99 -26
  256. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  257. package/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  258. package/driver/sqlserver/SqlServerQueryRunner.js +251 -37
  259. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  260. package/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.d.ts +1 -1
  261. package/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
  262. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.d.ts +2 -2
  263. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
  264. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.d.ts +2 -2
  265. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
  266. package/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.d.ts +2 -2
  267. package/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
  268. package/driver/types/ColumnTypes.d.ts +1 -1
  269. package/driver/types/ColumnTypes.js.map +1 -1
  270. package/driver/types/DatabaseType.d.ts +1 -1
  271. package/driver/types/DatabaseType.js.map +1 -1
  272. package/entity-manager/EntityManager.js +1 -1
  273. package/entity-manager/EntityManager.js.map +1 -1
  274. package/entity-schema/EntitySchemaColumnOptions.d.ts +6 -2
  275. package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  276. package/entity-schema/EntitySchemaIndexOptions.d.ts +8 -0
  277. package/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
  278. package/entity-schema/EntitySchemaTransformer.js +3 -0
  279. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  280. package/find-options/FindOneOptions.d.ts +1 -1
  281. package/find-options/FindOneOptions.js.map +1 -1
  282. package/find-options/FindOptionsUtils.d.ts +2 -1
  283. package/find-options/FindOptionsUtils.js +2 -1
  284. package/find-options/FindOptionsUtils.js.map +1 -1
  285. package/logger/AdvancedConsoleLogger.d.ts +1 -1
  286. package/logger/AdvancedConsoleLogger.js +1 -1
  287. package/logger/AdvancedConsoleLogger.js.map +1 -1
  288. package/metadata/ColumnMetadata.d.ts +10 -2
  289. package/metadata/ColumnMetadata.js +8 -0
  290. package/metadata/ColumnMetadata.js.map +1 -1
  291. package/metadata/EntityMetadata.js +1 -1
  292. package/metadata/EntityMetadata.js.map +1 -1
  293. package/metadata/ForeignKeyMetadata.d.ts +7 -0
  294. package/metadata/ForeignKeyMetadata.js +4 -1
  295. package/metadata/ForeignKeyMetadata.js.map +1 -1
  296. package/metadata/IndexMetadata.d.ts +8 -0
  297. package/metadata/IndexMetadata.js +9 -0
  298. package/metadata/IndexMetadata.js.map +1 -1
  299. package/metadata-args/IndexMetadataArgs.d.ts +8 -0
  300. package/metadata-args/IndexMetadataArgs.js.map +1 -1
  301. package/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  302. package/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  303. package/metadata-builder/EntityMetadataBuilder.js +13 -6
  304. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  305. package/metadata-builder/EntityMetadataValidator.js +17 -0
  306. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  307. package/metadata-builder/JunctionEntityMetadataBuilder.js +18 -6
  308. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  309. package/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  310. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  311. package/migration/MigrationExecutor.js +1 -1
  312. package/migration/MigrationExecutor.js.map +1 -1
  313. package/package.json +1 -1
  314. package/persistence/SubjectDatabaseEntityLoader.d.ts +1 -1
  315. package/persistence/SubjectDatabaseEntityLoader.js +1 -1
  316. package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  317. package/persistence/SubjectExecutor.js +1 -1
  318. package/persistence/SubjectExecutor.js.map +1 -1
  319. package/persistence/subject-builder/CascadesSubjectBuilder.d.ts +1 -1
  320. package/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
  321. package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  322. package/persistence/subject-builder/ManyToManySubjectBuilder.js +1 -1
  323. package/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  324. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
  325. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  326. package/platform/PlatformTools.js +5 -0
  327. package/platform/PlatformTools.js.map +1 -1
  328. package/query-builder/InsertQueryBuilder.js +15 -3
  329. package/query-builder/InsertQueryBuilder.js.map +1 -1
  330. package/query-builder/QueryBuilder.d.ts +1 -1
  331. package/query-builder/QueryBuilder.js +15 -15
  332. package/query-builder/QueryBuilder.js.map +1 -1
  333. package/query-builder/QueryExpressionMap.d.ts +2 -2
  334. package/query-builder/QueryExpressionMap.js +1 -1
  335. package/query-builder/QueryExpressionMap.js.map +1 -1
  336. package/query-builder/ReturningResultsEntityUpdator.js +2 -2
  337. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  338. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  339. package/query-builder/SelectQueryBuilder.js +25 -4
  340. package/query-builder/SelectQueryBuilder.js.map +1 -1
  341. package/query-builder/UpdateQueryBuilder.js +18 -7
  342. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  343. package/query-runner/BaseQueryRunner.d.ts +10 -0
  344. package/query-runner/BaseQueryRunner.js +25 -1
  345. package/query-runner/BaseQueryRunner.js.map +1 -1
  346. package/query-runner/QueryRunner.d.ts +2 -2
  347. package/query-runner/QueryRunner.js.map +1 -1
  348. package/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
  349. package/schema-builder/RdbmsSchemaBuilder.js +26 -6
  350. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  351. package/schema-builder/options/TableColumnOptions.d.ts +10 -2
  352. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  353. package/schema-builder/options/TableForeignKeyOptions.d.ts +1 -1
  354. package/schema-builder/options/TableForeignKeyOptions.js.map +1 -1
  355. package/schema-builder/options/TableIndexOptions.d.ts +8 -0
  356. package/schema-builder/options/TableIndexOptions.js.map +1 -1
  357. package/schema-builder/table/TableColumn.d.ts +6 -2
  358. package/schema-builder/table/TableColumn.js +2 -0
  359. package/schema-builder/table/TableColumn.js.map +1 -1
  360. package/schema-builder/table/TableIndex.d.ts +8 -0
  361. package/schema-builder/table/TableIndex.js +3 -0
  362. package/schema-builder/table/TableIndex.js.map +1 -1
  363. package/schema-builder/util/TableUtils.js +1 -0
  364. package/schema-builder/util/TableUtils.js.map +1 -1
  365. package/util/OrmUtils.d.ts +1 -1
  366. package/util/OrmUtils.js +4 -4
  367. package/util/OrmUtils.js.map +1 -1
  368. package/util/escapeRegExp.d.ts +1 -0
  369. package/util/escapeRegExp.js +10 -0
  370. package/util/escapeRegExp.js.map +1 -0
@@ -454,6 +454,31 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
454
454
  downQueries.push(this.dropIndexSql(table, index));
455
455
  });
456
456
  }
457
+ // if table have column with generated type, we must add the expression to the metadata table
458
+ const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
459
+ for (const column of generatedColumns) {
460
+ const parsedTableName = this.driver.parseTableName(table);
461
+ if (!parsedTableName.schema) {
462
+ parsedTableName.schema = await this.getCurrentSchema();
463
+ }
464
+ const insertQuery = this.insertTypeormMetadataSql({
465
+ database: parsedTableName.database,
466
+ schema: parsedTableName.schema,
467
+ table: parsedTableName.tableName,
468
+ type: MetadataTableType.GENERATED_COLUMN,
469
+ name: column.name,
470
+ value: column.asExpression,
471
+ });
472
+ const deleteQuery = this.deleteTypeormMetadataSql({
473
+ database: parsedTableName.database,
474
+ schema: parsedTableName.schema,
475
+ table: parsedTableName.tableName,
476
+ type: MetadataTableType.GENERATED_COLUMN,
477
+ name: column.name,
478
+ });
479
+ upQueries.push(insertQuery);
480
+ downQueries.push(deleteQuery);
481
+ }
457
482
  await this.executeQueries(upQueries, downQueries);
458
483
  }
459
484
  /**
@@ -486,6 +511,31 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
486
511
  table.foreignKeys.forEach((foreignKey) => upQueries.push(this.dropForeignKeySql(table, foreignKey)));
487
512
  upQueries.push(this.dropTableSql(table));
488
513
  downQueries.push(this.createTableSql(table, createForeignKeys));
514
+ // if table had columns with generated type, we must remove the expression from the metadata table
515
+ const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
516
+ for (const column of generatedColumns) {
517
+ const parsedTableName = this.driver.parseTableName(table);
518
+ if (!parsedTableName.schema) {
519
+ parsedTableName.schema = await this.getCurrentSchema();
520
+ }
521
+ const deleteQuery = this.deleteTypeormMetadataSql({
522
+ database: parsedTableName.database,
523
+ schema: parsedTableName.schema,
524
+ table: parsedTableName.tableName,
525
+ type: MetadataTableType.GENERATED_COLUMN,
526
+ name: column.name,
527
+ });
528
+ const insertQuery = this.insertTypeormMetadataSql({
529
+ database: parsedTableName.database,
530
+ schema: parsedTableName.schema,
531
+ table: parsedTableName.tableName,
532
+ type: MetadataTableType.GENERATED_COLUMN,
533
+ name: column.name,
534
+ value: column.asExpression,
535
+ });
536
+ upQueries.push(deleteQuery);
537
+ downQueries.push(insertQuery);
538
+ }
489
539
  await this.executeQueries(upQueries, downQueries);
490
540
  }
491
541
  /**
@@ -551,7 +601,8 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
551
601
  upQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(oldTable)}", "${newTableName}"`));
552
602
  downQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(newTable)}", "${oldTableName}"`));
553
603
  // rename primary key constraint
554
- if (newTable.primaryColumns.length > 0) {
604
+ if (newTable.primaryColumns.length > 0 &&
605
+ !newTable.primaryColumns[0].primaryKeyConstraintName) {
555
606
  const columnNames = newTable.primaryColumns.map((column) => column.name);
556
607
  const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);
557
608
  const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);
@@ -561,6 +612,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
561
612
  }
562
613
  // rename unique constraints
563
614
  newTable.uniques.forEach((unique) => {
615
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
616
+ // Skip renaming if Unique has user defined constraint name
617
+ if (unique.name !== oldUniqueName)
618
+ return;
564
619
  // build new constraint name
565
620
  const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
566
621
  // build queries
@@ -571,6 +626,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
571
626
  });
572
627
  // rename index constraints
573
628
  newTable.indices.forEach((index) => {
629
+ const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
630
+ // Skip renaming if Index has user defined constraint name
631
+ if (index.name !== oldIndexName)
632
+ return;
574
633
  // build new constraint name
575
634
  const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
576
635
  // build queries
@@ -581,6 +640,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
581
640
  });
582
641
  // rename foreign key constraints
583
642
  newTable.foreignKeys.forEach((foreignKey) => {
643
+ const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
644
+ // Skip renaming if foreign key has user defined constraint name
645
+ if (foreignKey.name !== oldForeignKeyName)
646
+ return;
584
647
  // build new constraint name
585
648
  const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
586
649
  // build queries
@@ -616,7 +679,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
616
679
  const primaryColumns = clonedTable.primaryColumns;
617
680
  // if table already have primary key, me must drop it and recreate again
618
681
  if (primaryColumns.length > 0) {
619
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
682
+ const pkName = primaryColumns[0].primaryKeyConstraintName
683
+ ? primaryColumns[0].primaryKeyConstraintName
684
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
620
685
  const columnNames = primaryColumns
621
686
  .map((column) => `"${column.name}"`)
622
687
  .join(", ");
@@ -624,7 +689,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
624
689
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
625
690
  }
626
691
  primaryColumns.push(column);
627
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
692
+ const pkName = primaryColumns[0].primaryKeyConstraintName
693
+ ? primaryColumns[0].primaryKeyConstraintName
694
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
628
695
  const columnNames = primaryColumns
629
696
  .map((column) => `"${column.name}"`)
630
697
  .join(", ");
@@ -653,6 +720,29 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
653
720
  const defaultName = this.connection.namingStrategy.defaultConstraintName(table, column.name);
654
721
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${defaultName}"`));
655
722
  }
723
+ if (column.generatedType && column.asExpression) {
724
+ const parsedTableName = this.driver.parseTableName(table);
725
+ if (!parsedTableName.schema) {
726
+ parsedTableName.schema = await this.getCurrentSchema();
727
+ }
728
+ const insertQuery = this.insertTypeormMetadataSql({
729
+ database: parsedTableName.database,
730
+ schema: parsedTableName.schema,
731
+ table: parsedTableName.tableName,
732
+ type: MetadataTableType.GENERATED_COLUMN,
733
+ name: column.name,
734
+ value: column.asExpression,
735
+ });
736
+ const deleteQuery = this.deleteTypeormMetadataSql({
737
+ database: parsedTableName.database,
738
+ schema: parsedTableName.schema,
739
+ table: parsedTableName.tableName,
740
+ type: MetadataTableType.GENERATED_COLUMN,
741
+ name: column.name,
742
+ });
743
+ upQueries.push(insertQuery);
744
+ downQueries.push(deleteQuery);
745
+ }
656
746
  await this.executeQueries(upQueries, downQueries);
657
747
  clonedTable.addColumn(column);
658
748
  this.replaceCachedTable(table, clonedTable);
@@ -705,7 +795,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
705
795
  if ((newColumn.isGenerated !== oldColumn.isGenerated &&
706
796
  newColumn.generationStrategy !== "uuid") ||
707
797
  newColumn.type !== oldColumn.type ||
708
- newColumn.length !== oldColumn.length) {
798
+ newColumn.length !== oldColumn.length ||
799
+ newColumn.asExpression !== oldColumn.asExpression ||
800
+ newColumn.generatedType !== oldColumn.generatedType) {
709
801
  // SQL Server does not support changing of IDENTITY column, so we must drop column and recreate it again.
710
802
  // Also, we recreate column if column type changed
711
803
  await this.dropColumn(table, oldColumn);
@@ -737,7 +829,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
737
829
  // rename the column
738
830
  upQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(table)}.${oldColumn.name}", "${newColumn.name}"`));
739
831
  downQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(table)}.${newColumn.name}", "${oldColumn.name}"`));
740
- if (oldColumn.isPrimary === true) {
832
+ // rename column primary key constraint
833
+ if (oldColumn.isPrimary === true &&
834
+ !oldColumn.primaryKeyConstraintName) {
741
835
  const primaryColumns = clonedTable.primaryColumns;
742
836
  // build old primary constraint name
743
837
  const columnNames = primaryColumns.map((column) => column.name);
@@ -753,6 +847,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
753
847
  }
754
848
  // rename index constraints
755
849
  clonedTable.findColumnIndices(oldColumn).forEach((index) => {
850
+ const oldIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);
851
+ // Skip renaming if Index has user defined constraint name
852
+ if (index.name !== oldIndexName)
853
+ return;
756
854
  // build new constraint name
757
855
  index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);
758
856
  index.columnNames.push(newColumn.name);
@@ -767,6 +865,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
767
865
  clonedTable
768
866
  .findColumnForeignKeys(oldColumn)
769
867
  .forEach((foreignKey) => {
868
+ const foreignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
869
+ // Skip renaming if foreign key has user defined constraint name
870
+ if (foreignKey.name !== foreignKeyName)
871
+ return;
770
872
  // build new constraint name
771
873
  foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);
772
874
  foreignKey.columnNames.push(newColumn.name);
@@ -791,6 +893,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
791
893
  });
792
894
  // rename unique constraints
793
895
  clonedTable.findColumnUniques(oldColumn).forEach((unique) => {
896
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);
897
+ // Skip renaming if Unique has user defined constraint name
898
+ if (unique.name !== oldUniqueName)
899
+ return;
794
900
  // build new constraint name
795
901
  unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);
796
902
  unique.columnNames.push(newColumn.name);
@@ -829,7 +935,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
829
935
  const primaryColumns = clonedTable.primaryColumns;
830
936
  // if primary column state changed, we must always drop existed constraint.
831
937
  if (primaryColumns.length > 0) {
832
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
938
+ const pkName = primaryColumns[0].primaryKeyConstraintName
939
+ ? primaryColumns[0].primaryKeyConstraintName
940
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
833
941
  const columnNames = primaryColumns
834
942
  .map((column) => `"${column.name}"`)
835
943
  .join(", ");
@@ -841,7 +949,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
841
949
  // update column in table
842
950
  const column = clonedTable.columns.find((column) => column.name === newColumn.name);
843
951
  column.isPrimary = true;
844
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
952
+ const pkName = primaryColumns[0].primaryKeyConstraintName
953
+ ? primaryColumns[0].primaryKeyConstraintName
954
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
845
955
  const columnNames = primaryColumns
846
956
  .map((column) => `"${column.name}"`)
847
957
  .join(", ");
@@ -856,7 +966,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
856
966
  column.isPrimary = false;
857
967
  // if we have another primary keys, we must recreate constraint.
858
968
  if (primaryColumns.length > 0) {
859
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
969
+ const pkName = primaryColumns[0]
970
+ .primaryKeyConstraintName
971
+ ? primaryColumns[0].primaryKeyConstraintName
972
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
860
973
  const columnNames = primaryColumns
861
974
  .map((column) => `"${column.name}"`)
862
975
  .join(", ");
@@ -929,7 +1042,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
929
1042
  const downQueries = [];
930
1043
  // drop primary key constraint
931
1044
  if (column.isPrimary) {
932
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1045
+ const pkName = column.primaryKeyConstraintName
1046
+ ? column.primaryKeyConstraintName
1047
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
933
1048
  const columnNames = clonedTable.primaryColumns
934
1049
  .map((primaryColumn) => `"${primaryColumn.name}"`)
935
1050
  .join(", ");
@@ -940,7 +1055,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
940
1055
  tableColumn.isPrimary = false;
941
1056
  // if primary key have multiple columns, we must recreate it without dropped column
942
1057
  if (clonedTable.primaryColumns.length > 0) {
943
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1058
+ const pkName = clonedTable.primaryColumns[0]
1059
+ .primaryKeyConstraintName
1060
+ ? clonedTable.primaryColumns[0].primaryKeyConstraintName
1061
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
944
1062
  const columnNames = clonedTable.primaryColumns
945
1063
  .map((primaryColumn) => `"${primaryColumn.name}"`)
946
1064
  .join(", ");
@@ -979,6 +1097,29 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
979
1097
  upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${defaultName}"`));
980
1098
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${defaultName}" DEFAULT ${column.default} FOR "${column.name}"`));
981
1099
  }
1100
+ if (column.generatedType && column.asExpression) {
1101
+ const parsedTableName = this.driver.parseTableName(table);
1102
+ if (!parsedTableName.schema) {
1103
+ parsedTableName.schema = await this.getCurrentSchema();
1104
+ }
1105
+ const deleteQuery = this.deleteTypeormMetadataSql({
1106
+ database: parsedTableName.database,
1107
+ schema: parsedTableName.schema,
1108
+ table: parsedTableName.tableName,
1109
+ type: MetadataTableType.GENERATED_COLUMN,
1110
+ name: column.name,
1111
+ });
1112
+ const insertQuery = this.insertTypeormMetadataSql({
1113
+ database: parsedTableName.database,
1114
+ schema: parsedTableName.schema,
1115
+ table: parsedTableName.tableName,
1116
+ type: MetadataTableType.GENERATED_COLUMN,
1117
+ name: column.name,
1118
+ value: column.asExpression,
1119
+ });
1120
+ upQueries.push(deleteQuery);
1121
+ downQueries.push(insertQuery);
1122
+ }
982
1123
  upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN "${column.name}"`));
983
1124
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(table, column, false, false)}`));
984
1125
  await this.executeQueries(upQueries, downQueries);
@@ -996,12 +1137,12 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
996
1137
  /**
997
1138
  * Creates a new primary key.
998
1139
  */
999
- async createPrimaryKey(tableOrName, columnNames) {
1140
+ async createPrimaryKey(tableOrName, columnNames, constraintName) {
1000
1141
  const table = InstanceChecker.isTable(tableOrName)
1001
1142
  ? tableOrName
1002
1143
  : await this.getCachedTable(tableOrName);
1003
1144
  const clonedTable = table.clone();
1004
- const up = this.createPrimaryKeySql(table, columnNames);
1145
+ const up = this.createPrimaryKeySql(table, columnNames, constraintName);
1005
1146
  // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.
1006
1147
  clonedTable.columns.forEach((column) => {
1007
1148
  if (columnNames.find((columnName) => columnName === column.name))
@@ -1025,7 +1166,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1025
1166
  // if table already have primary columns, we must drop them.
1026
1167
  const primaryColumns = clonedTable.primaryColumns;
1027
1168
  if (primaryColumns.length > 0) {
1028
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
1169
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1170
+ ? primaryColumns[0].primaryKeyConstraintName
1171
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
1029
1172
  const columnNamesString = primaryColumns
1030
1173
  .map((column) => `"${column.name}"`)
1031
1174
  .join(", ");
@@ -1036,7 +1179,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1036
1179
  clonedTable.columns
1037
1180
  .filter((column) => columnNames.indexOf(column.name) !== -1)
1038
1181
  .forEach((column) => (column.isPrimary = true));
1039
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
1182
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1183
+ ? primaryColumns[0].primaryKeyConstraintName
1184
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
1040
1185
  const columnNamesString = columnNames
1041
1186
  .map((columnName) => `"${columnName}"`)
1042
1187
  .join(", ");
@@ -1048,12 +1193,12 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1048
1193
  /**
1049
1194
  * Drops a primary key.
1050
1195
  */
1051
- async dropPrimaryKey(tableOrName) {
1196
+ async dropPrimaryKey(tableOrName, constraintName) {
1052
1197
  const table = InstanceChecker.isTable(tableOrName)
1053
1198
  ? tableOrName
1054
1199
  : await this.getCachedTable(tableOrName);
1055
1200
  const up = this.dropPrimaryKeySql(table);
1056
- const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name));
1201
+ const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name), constraintName);
1057
1202
  await this.executeQueries(up, down);
1058
1203
  table.primaryColumns.forEach((column) => {
1059
1204
  column.isPrimary = false;
@@ -1427,12 +1572,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1427
1572
  const currentDatabase = await this.getCurrentDatabase();
1428
1573
  const dbTables = [];
1429
1574
  if (!tableNames) {
1430
- const databasesSql = `
1431
- SELECT DISTINCT
1432
- "name"
1433
- FROM "master"."dbo"."sysdatabases"
1434
- WHERE "name" NOT IN ('master', 'model', 'msdb')
1435
- `;
1575
+ const databasesSql = `SELECT DISTINCT "name" ` +
1576
+ `FROM "master"."dbo"."sysdatabases" ` +
1577
+ `WHERE "name" NOT IN ('master', 'model', 'msdb')`;
1436
1578
  const dbDatabases = await this.query(databasesSql);
1437
1579
  const tablesSql = dbDatabases
1438
1580
  .map(({ name }) => {
@@ -1497,7 +1639,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1497
1639
  const condition = tables
1498
1640
  .map(({ TABLE_SCHEMA, TABLE_NAME }) => `("TABLE_SCHEMA" = '${TABLE_SCHEMA}' AND "TABLE_NAME" = '${TABLE_NAME}')`)
1499
1641
  .join("OR");
1500
- return `SELECT * FROM "${TABLE_CATALOG}"."INFORMATION_SCHEMA"."COLUMNS" WHERE (${condition})`;
1642
+ return (`SELECT "COLUMNS".*, "cc"."is_persisted", "cc"."definition" ` +
1643
+ `FROM "${TABLE_CATALOG}"."INFORMATION_SCHEMA"."COLUMNS" ` +
1644
+ `LEFT JOIN "sys"."computed_columns" "cc" ON COL_NAME("cc"."object_id", "cc"."column_id") = "column_name" ` +
1645
+ `WHERE (${condition})`);
1501
1646
  })
1502
1647
  .join(" UNION ALL ");
1503
1648
  const constraintsSql = Object.entries(dbTablesByCatalog)
@@ -1597,13 +1742,14 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1597
1742
  table.name = this.driver.buildTableName(dbTable["TABLE_NAME"], schema, db);
1598
1743
  const defaultCollation = dbCollations.find((dbCollation) => dbCollation["NAME"] === dbTable["TABLE_CATALOG"]);
1599
1744
  // create columns from the loaded columns
1600
- table.columns = dbColumns
1601
- .filter((dbColumn) => dbColumn["TABLE_NAME"] === dbTable["TABLE_NAME"] &&
1745
+ table.columns = await Promise.all(dbColumns
1746
+ .filter((dbColumn) => dbColumn["TABLE_NAME"] ===
1747
+ dbTable["TABLE_NAME"] &&
1602
1748
  dbColumn["TABLE_SCHEMA"] ===
1603
1749
  dbTable["TABLE_SCHEMA"] &&
1604
1750
  dbColumn["TABLE_CATALOG"] ===
1605
1751
  dbTable["TABLE_CATALOG"])
1606
- .map((dbColumn) => {
1752
+ .map(async (dbColumn) => {
1607
1753
  const columnConstraints = dbConstraints.filter((dbConstraint) => dbConstraint["TABLE_NAME"] ===
1608
1754
  dbColumn["TABLE_NAME"] &&
1609
1755
  dbConstraint["TABLE_SCHEMA"] ===
@@ -1625,7 +1771,6 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1625
1771
  dbConstraint["COLUMN_NAME"] !==
1626
1772
  dbColumn["COLUMN_NAME"]);
1627
1773
  });
1628
- const isPrimary = !!columnConstraints.find((constraint) => constraint["CONSTRAINT_TYPE"] === "PRIMARY KEY");
1629
1774
  const isGenerated = !!dbIdentityColumns.find((column) => column["TABLE_NAME"] ===
1630
1775
  dbColumn["TABLE_NAME"] &&
1631
1776
  column["TABLE_SCHEMA"] ===
@@ -1636,7 +1781,8 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1636
1781
  dbColumn["COLUMN_NAME"]);
1637
1782
  const tableColumn = new TableColumn();
1638
1783
  tableColumn.name = dbColumn["COLUMN_NAME"];
1639
- tableColumn.type = dbColumn["DATA_TYPE"].toLowerCase();
1784
+ tableColumn.type =
1785
+ dbColumn["DATA_TYPE"].toLowerCase();
1640
1786
  // check only columns that have length property
1641
1787
  if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type) !== -1 &&
1642
1788
  dbColumn["CHARACTER_MAXIMUM_LENGTH"]) {
@@ -1659,7 +1805,8 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1659
1805
  dbColumn["NUMERIC_PRECISION"];
1660
1806
  if (dbColumn["NUMERIC_SCALE"] !== null &&
1661
1807
  !this.isDefaultColumnScale(table, tableColumn, dbColumn["NUMERIC_SCALE"]))
1662
- tableColumn.scale = dbColumn["NUMERIC_SCALE"];
1808
+ tableColumn.scale =
1809
+ dbColumn["NUMERIC_SCALE"];
1663
1810
  }
1664
1811
  if (tableColumn.type === "nvarchar") {
1665
1812
  // Check if this is an enum
@@ -1684,6 +1831,33 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1684
1831
  }
1685
1832
  }
1686
1833
  }
1834
+ const primaryConstraint = columnConstraints.find((constraint) => constraint["CONSTRAINT_TYPE"] ===
1835
+ "PRIMARY KEY");
1836
+ if (primaryConstraint) {
1837
+ tableColumn.isPrimary = true;
1838
+ // find another columns involved in primary key constraint
1839
+ const anotherPrimaryConstraints = dbConstraints.filter((constraint) => constraint["TABLE_NAME"] ===
1840
+ dbColumn["TABLE_NAME"] &&
1841
+ constraint["TABLE_SCHEMA"] ===
1842
+ dbColumn["TABLE_SCHEMA"] &&
1843
+ constraint["TABLE_CATALOG"] ===
1844
+ dbColumn["TABLE_CATALOG"] &&
1845
+ constraint["COLUMN_NAME"] !==
1846
+ dbColumn["COLUMN_NAME"] &&
1847
+ constraint["CONSTRAINT_TYPE"] ===
1848
+ "PRIMARY KEY");
1849
+ // collect all column names
1850
+ const columnNames = anotherPrimaryConstraints.map((constraint) => constraint["COLUMN_NAME"]);
1851
+ columnNames.push(dbColumn["COLUMN_NAME"]);
1852
+ // build default primary key constraint name
1853
+ const pkName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
1854
+ // if primary key has user-defined constraint name, write it in table column
1855
+ if (primaryConstraint["CONSTRAINT_NAME"] !==
1856
+ pkName) {
1857
+ tableColumn.primaryKeyConstraintName =
1858
+ primaryConstraint["CONSTRAINT_NAME"];
1859
+ }
1860
+ }
1687
1861
  tableColumn.default =
1688
1862
  dbColumn["COLUMN_DEFAULT"] !== null &&
1689
1863
  dbColumn["COLUMN_DEFAULT"] !== undefined
@@ -1691,7 +1865,6 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1691
1865
  : undefined;
1692
1866
  tableColumn.isNullable =
1693
1867
  dbColumn["IS_NULLABLE"] === "YES";
1694
- tableColumn.isPrimary = isPrimary;
1695
1868
  tableColumn.isUnique =
1696
1869
  uniqueConstraints.length > 0 &&
1697
1870
  !isConstraintComposite;
@@ -1719,8 +1892,31 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1719
1892
  ? dbColumn["DATETIME_PRECISION"]
1720
1893
  : undefined;
1721
1894
  }
1895
+ if (dbColumn["is_persisted"] !== null &&
1896
+ dbColumn["is_persisted"] !== undefined &&
1897
+ dbColumn["definition"]) {
1898
+ tableColumn.generatedType =
1899
+ dbColumn["is_persisted"] === true
1900
+ ? "STORED"
1901
+ : "VIRTUAL";
1902
+ // We cannot relay on information_schema.columns.generation_expression, because it is formatted different.
1903
+ const asExpressionQuery = await this.selectTypeormMetadataSql({
1904
+ database: dbTable["TABLE_CATALOG"],
1905
+ schema: dbTable["TABLE_SCHEMA"],
1906
+ table: dbTable["TABLE_NAME"],
1907
+ type: MetadataTableType.GENERATED_COLUMN,
1908
+ name: tableColumn.name,
1909
+ });
1910
+ const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
1911
+ if (results[0] && results[0].value) {
1912
+ tableColumn.asExpression = results[0].value;
1913
+ }
1914
+ else {
1915
+ tableColumn.asExpression = "";
1916
+ }
1917
+ }
1722
1918
  return tableColumn;
1723
- });
1919
+ }));
1724
1920
  // find unique constraints of table, group them by constraint name and build TableUnique.
1725
1921
  const tableUniqueConstraints = OrmUtils.uniq(dbConstraints.filter((dbConstraint) => dbConstraint["TABLE_NAME"] ===
1726
1922
  dbTable["TABLE_NAME"] &&
@@ -1875,7 +2071,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1875
2071
  }
1876
2072
  const primaryColumns = table.columns.filter((column) => column.isPrimary);
1877
2073
  if (primaryColumns.length > 0) {
1878
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
2074
+ const primaryKeyName = primaryColumns[0].primaryKeyConstraintName
2075
+ ? primaryColumns[0].primaryKeyConstraintName
2076
+ : this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
1879
2077
  const columnNames = primaryColumns
1880
2078
  .map((column) => `"${column.name}"`)
1881
2079
  .join(", ");
@@ -1966,8 +2164,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1966
2164
  /**
1967
2165
  * Builds create primary key sql.
1968
2166
  */
1969
- createPrimaryKeySql(table, columnNames) {
1970
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
2167
+ createPrimaryKeySql(table, columnNames, constraintName) {
2168
+ const primaryKeyName = constraintName
2169
+ ? constraintName
2170
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
1971
2171
  const columnNamesString = columnNames
1972
2172
  .map((columnName) => `"${columnName}"`)
1973
2173
  .join(", ");
@@ -1978,7 +2178,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1978
2178
  */
1979
2179
  dropPrimaryKeySql(table) {
1980
2180
  const columnNames = table.primaryColumns.map((column) => column.name);
1981
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
2181
+ const constraintName = table.primaryColumns[0].primaryKeyConstraintName;
2182
+ const primaryKeyName = constraintName
2183
+ ? constraintName
2184
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
1982
2185
  return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${primaryKeyName}"`);
1983
2186
  }
1984
2187
  /**
@@ -2097,8 +2300,19 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
2097
2300
  }
2098
2301
  if (column.collation)
2099
2302
  c += " COLLATE " + column.collation;
2100
- if (column.isNullable !== true)
2101
- c += " NOT NULL";
2303
+ if (column.asExpression) {
2304
+ c += ` AS (${column.asExpression})`;
2305
+ if (column.generatedType === "STORED") {
2306
+ c += ` PERSISTED`;
2307
+ // NOT NULL can be specified for computed columns only if PERSISTED is also specified
2308
+ if (column.isNullable !== true)
2309
+ c += " NOT NULL";
2310
+ }
2311
+ }
2312
+ else {
2313
+ if (column.isNullable !== true)
2314
+ c += " NOT NULL";
2315
+ }
2102
2316
  if (column.isGenerated === true &&
2103
2317
  column.generationStrategy === "increment" &&
2104
2318
  !skipIdentity)