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
@@ -380,6 +380,30 @@ export class CockroachQueryRunner extends BaseQueryRunner {
380
380
  downQueries.push(this.dropIndexSql(table, index));
381
381
  });
382
382
  }
383
+ // if table have column with generated type, we must add the expression to the metadata table
384
+ const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
385
+ for (const column of generatedColumns) {
386
+ const currentSchema = await this.getCurrentSchema();
387
+ let { schema } = this.driver.parseTableName(table);
388
+ if (!schema) {
389
+ schema = currentSchema;
390
+ }
391
+ const insertQuery = this.insertTypeormMetadataSql({
392
+ schema: schema,
393
+ table: table.name,
394
+ type: MetadataTableType.GENERATED_COLUMN,
395
+ name: column.name,
396
+ value: column.asExpression,
397
+ });
398
+ const deleteQuery = this.deleteTypeormMetadataSql({
399
+ schema: schema,
400
+ table: table.name,
401
+ type: MetadataTableType.GENERATED_COLUMN,
402
+ name: column.name,
403
+ });
404
+ upQueries.push(insertQuery);
405
+ downQueries.push(deleteQuery);
406
+ }
383
407
  await this.executeQueries(upQueries, downQueries);
384
408
  }
385
409
  /**
@@ -417,6 +441,30 @@ export class CockroachQueryRunner extends BaseQueryRunner {
417
441
  upQueries.push(new Query(`DROP SEQUENCE ${this.escapePath(this.buildSequencePath(table, column))}`));
418
442
  downQueries.push(new Query(`CREATE SEQUENCE ${this.escapePath(this.buildSequencePath(table, column))}`));
419
443
  });
444
+ // if table had columns with generated type, we must remove the expression from the metadata table
445
+ const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
446
+ for (const column of generatedColumns) {
447
+ const currentSchema = await this.getCurrentSchema();
448
+ let { schema } = this.driver.parseTableName(table);
449
+ if (!schema) {
450
+ schema = currentSchema;
451
+ }
452
+ const deleteQuery = this.deleteTypeormMetadataSql({
453
+ schema: schema,
454
+ table: table.name,
455
+ type: MetadataTableType.GENERATED_COLUMN,
456
+ name: column.name,
457
+ });
458
+ const insertQuery = this.insertTypeormMetadataSql({
459
+ schema: schema,
460
+ table: table.name,
461
+ type: MetadataTableType.GENERATED_COLUMN,
462
+ name: column.name,
463
+ value: column.asExpression,
464
+ });
465
+ upQueries.push(deleteQuery);
466
+ downQueries.push(insertQuery);
467
+ }
420
468
  await this.executeQueries(upQueries, downQueries);
421
469
  }
422
470
  /**
@@ -462,7 +510,8 @@ export class CockroachQueryRunner extends BaseQueryRunner {
462
510
  upQueries.push(new Query(`ALTER TABLE ${this.escapePath(oldTable)} RENAME TO "${newTableName}"`));
463
511
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME TO "${oldTableName}"`));
464
512
  // rename column primary key constraint
465
- if (newTable.primaryColumns.length > 0) {
513
+ if (newTable.primaryColumns.length > 0 &&
514
+ !newTable.primaryColumns[0].primaryKeyConstraintName) {
466
515
  const columnNames = newTable.primaryColumns.map((column) => column.name);
467
516
  const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);
468
517
  const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);
@@ -471,6 +520,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
471
520
  }
472
521
  // rename unique constraints
473
522
  newTable.uniques.forEach((unique) => {
523
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
524
+ // Skip renaming if Unique has user defined constraint name
525
+ if (unique.name !== oldUniqueName)
526
+ return;
474
527
  // build new constraint name
475
528
  const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
476
529
  // build queries
@@ -481,6 +534,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
481
534
  });
482
535
  // rename index constraints
483
536
  newTable.indices.forEach((index) => {
537
+ const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
538
+ // Skip renaming if Index has user defined constraint name
539
+ if (index.name !== oldIndexName)
540
+ return;
484
541
  // build new constraint name
485
542
  const { schema } = this.driver.parseTableName(newTable);
486
543
  const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
@@ -498,6 +555,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
498
555
  });
499
556
  // rename foreign key constraints
500
557
  newTable.foreignKeys.forEach((foreignKey) => {
558
+ const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
559
+ // Skip renaming if foreign key has user defined constraint name
560
+ if (foreignKey.name !== oldForeignKeyName)
561
+ return;
501
562
  // build new constraint name
502
563
  const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
503
564
  // build queries
@@ -527,9 +588,11 @@ export class CockroachQueryRunner extends BaseQueryRunner {
527
588
  if (column.isPrimary) {
528
589
  const primaryColumns = clonedTable.primaryColumns;
529
590
  // if table already have primary key, me must drop it and recreate again
530
- // todo: altering pk is not supported yet https://github.com/cockroachdb/cockroach/issues/19141
591
+ // todo: https://go.crdb.dev/issue-v/48026/v21.1
531
592
  if (primaryColumns.length > 0) {
532
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
593
+ const pkName = primaryColumns[0].primaryKeyConstraintName
594
+ ? primaryColumns[0].primaryKeyConstraintName
595
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
533
596
  const columnNames = primaryColumns
534
597
  .map((column) => `"${column.name}"`)
535
598
  .join(", ");
@@ -537,13 +600,37 @@ export class CockroachQueryRunner extends BaseQueryRunner {
537
600
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
538
601
  }
539
602
  primaryColumns.push(column);
540
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
603
+ const pkName = primaryColumns[0].primaryKeyConstraintName
604
+ ? primaryColumns[0].primaryKeyConstraintName
605
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
541
606
  const columnNames = primaryColumns
542
607
  .map((column) => `"${column.name}"`)
543
608
  .join(", ");
544
609
  upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
545
610
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${pkName}"`));
546
611
  }
612
+ if (column.generatedType && column.asExpression) {
613
+ const currentSchema = await this.getCurrentSchema();
614
+ let { schema } = this.driver.parseTableName(table);
615
+ if (!schema) {
616
+ schema = currentSchema;
617
+ }
618
+ const insertQuery = this.insertTypeormMetadataSql({
619
+ schema: schema,
620
+ table: table.name,
621
+ type: MetadataTableType.GENERATED_COLUMN,
622
+ name: column.name,
623
+ value: column.asExpression,
624
+ });
625
+ const deleteQuery = this.deleteTypeormMetadataSql({
626
+ schema: schema,
627
+ table: table.name,
628
+ type: MetadataTableType.GENERATED_COLUMN,
629
+ name: column.name,
630
+ });
631
+ upQueries.push(insertQuery);
632
+ downQueries.push(deleteQuery);
633
+ }
547
634
  // create column index
548
635
  const columnIndex = clonedTable.indices.find((index) => index.columnNames.length === 1 &&
549
636
  index.columnNames[0] === column.name);
@@ -628,7 +715,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
628
715
  if (!oldColumn)
629
716
  throw new TypeORMError(`Column "${oldTableColumnOrName}" was not found in the "${table.name}" table.`);
630
717
  if (oldColumn.type !== newColumn.type ||
631
- oldColumn.length !== newColumn.length) {
718
+ oldColumn.length !== newColumn.length ||
719
+ oldColumn.generatedType !== newColumn.generatedType ||
720
+ oldColumn.asExpression !== newColumn.asExpression) {
632
721
  // To avoid data conversion, we just recreate column
633
722
  await this.dropColumn(table, oldColumn);
634
723
  await this.addColumn(table, newColumn);
@@ -641,7 +730,8 @@ export class CockroachQueryRunner extends BaseQueryRunner {
641
730
  upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN "${oldColumn.name}" TO "${newColumn.name}"`));
642
731
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN "${newColumn.name}" TO "${oldColumn.name}"`));
643
732
  // rename column primary key constraint
644
- if (oldColumn.isPrimary === true) {
733
+ if (oldColumn.isPrimary === true &&
734
+ !oldColumn.primaryKeyConstraintName) {
645
735
  const primaryColumns = clonedTable.primaryColumns;
646
736
  // build old primary constraint name
647
737
  const columnNames = primaryColumns.map((column) => column.name);
@@ -656,6 +746,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
656
746
  }
657
747
  // rename unique constraints
658
748
  clonedTable.findColumnUniques(oldColumn).forEach((unique) => {
749
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);
750
+ // Skip renaming if Unique has user defined constraint name
751
+ if (unique.name !== oldUniqueName)
752
+ return;
659
753
  // build new constraint name
660
754
  unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);
661
755
  unique.columnNames.push(newColumn.name);
@@ -668,6 +762,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
668
762
  });
669
763
  // rename index constraints
670
764
  clonedTable.findColumnIndices(oldColumn).forEach((index) => {
765
+ const oldIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);
766
+ // Skip renaming if Index has user defined constraint name
767
+ if (index.name !== oldIndexName)
768
+ return;
671
769
  // build new constraint name
672
770
  index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);
673
771
  index.columnNames.push(newColumn.name);
@@ -689,6 +787,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
689
787
  clonedTable
690
788
  .findColumnForeignKeys(oldColumn)
691
789
  .forEach((foreignKey) => {
790
+ const foreignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
791
+ // Skip renaming if foreign key has user defined constraint name
792
+ if (foreignKey.name !== foreignKeyName)
793
+ return;
692
794
  // build new constraint name
693
795
  foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);
694
796
  foreignKey.columnNames.push(newColumn.name);
@@ -727,7 +829,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
727
829
  const primaryColumns = clonedTable.primaryColumns;
728
830
  // if primary column state changed, we must always drop existed constraint.
729
831
  if (primaryColumns.length > 0) {
730
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
832
+ const pkName = primaryColumns[0].primaryKeyConstraintName
833
+ ? primaryColumns[0].primaryKeyConstraintName
834
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
731
835
  const columnNames = primaryColumns
732
836
  .map((column) => `"${column.name}"`)
733
837
  .join(", ");
@@ -739,7 +843,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
739
843
  // update column in table
740
844
  const column = clonedTable.columns.find((column) => column.name === newColumn.name);
741
845
  column.isPrimary = true;
742
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
846
+ const pkName = primaryColumns[0].primaryKeyConstraintName
847
+ ? primaryColumns[0].primaryKeyConstraintName
848
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
743
849
  const columnNames = primaryColumns
744
850
  .map((column) => `"${column.name}"`)
745
851
  .join(", ");
@@ -754,7 +860,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
754
860
  column.isPrimary = false;
755
861
  // if we have another primary keys, we must recreate constraint.
756
862
  if (primaryColumns.length > 0) {
757
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
863
+ const pkName = primaryColumns[0]
864
+ .primaryKeyConstraintName
865
+ ? primaryColumns[0].primaryKeyConstraintName
866
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
758
867
  const columnNames = primaryColumns
759
868
  .map((column) => `"${column.name}"`)
760
869
  .join(", ");
@@ -849,9 +958,11 @@ export class CockroachQueryRunner extends BaseQueryRunner {
849
958
  const upQueries = [];
850
959
  const downQueries = [];
851
960
  // drop primary key constraint
852
- // todo: altering pk is not supported yet https://github.com/cockroachdb/cockroach/issues/19141
961
+ // todo: https://go.crdb.dev/issue-v/48026/v21.1
853
962
  if (column.isPrimary) {
854
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
963
+ const pkName = column.primaryKeyConstraintName
964
+ ? column.primaryKeyConstraintName
965
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
855
966
  const columnNames = clonedTable.primaryColumns
856
967
  .map((primaryColumn) => `"${primaryColumn.name}"`)
857
968
  .join(", ");
@@ -862,7 +973,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
862
973
  tableColumn.isPrimary = false;
863
974
  // if primary key have multiple columns, we must recreate it without dropped column
864
975
  if (clonedTable.primaryColumns.length > 0) {
865
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
976
+ const pkName = clonedTable.primaryColumns[0]
977
+ .primaryKeyConstraintName
978
+ ? clonedTable.primaryColumns[0].primaryKeyConstraintName
979
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
866
980
  const columnNames = clonedTable.primaryColumns
867
981
  .map((primaryColumn) => `"${primaryColumn.name}"`)
868
982
  .join(", ");
@@ -901,6 +1015,28 @@ export class CockroachQueryRunner extends BaseQueryRunner {
901
1015
  upQueries.push(new Query(`DROP SEQUENCE ${this.escapePath(this.buildSequencePath(table, column))}`));
902
1016
  downQueries.push(new Query(`CREATE SEQUENCE ${this.escapePath(this.buildSequencePath(table, column))}`));
903
1017
  }
1018
+ if (column.generatedType && column.asExpression) {
1019
+ const currentSchema = await this.getCurrentSchema();
1020
+ let { schema } = this.driver.parseTableName(table);
1021
+ if (!schema) {
1022
+ schema = currentSchema;
1023
+ }
1024
+ const deleteQuery = this.deleteTypeormMetadataSql({
1025
+ schema: schema,
1026
+ table: table.name,
1027
+ type: MetadataTableType.GENERATED_COLUMN,
1028
+ name: column.name,
1029
+ });
1030
+ const insertQuery = this.insertTypeormMetadataSql({
1031
+ schema: schema,
1032
+ table: table.name,
1033
+ type: MetadataTableType.GENERATED_COLUMN,
1034
+ name: column.name,
1035
+ value: column.asExpression,
1036
+ });
1037
+ upQueries.push(deleteQuery);
1038
+ downQueries.push(insertQuery);
1039
+ }
904
1040
  await this.executeQueries(upQueries, downQueries);
905
1041
  clonedTable.removeColumn(column);
906
1042
  this.replaceCachedTable(table, clonedTable);
@@ -916,12 +1052,12 @@ export class CockroachQueryRunner extends BaseQueryRunner {
916
1052
  /**
917
1053
  * Creates a new primary key.
918
1054
  */
919
- async createPrimaryKey(tableOrName, columnNames) {
1055
+ async createPrimaryKey(tableOrName, columnNames, constraintName) {
920
1056
  const table = InstanceChecker.isTable(tableOrName)
921
1057
  ? tableOrName
922
1058
  : await this.getCachedTable(tableOrName);
923
1059
  const clonedTable = table.clone();
924
- const up = this.createPrimaryKeySql(table, columnNames);
1060
+ const up = this.createPrimaryKeySql(table, columnNames, constraintName);
925
1061
  // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.
926
1062
  clonedTable.columns.forEach((column) => {
927
1063
  if (columnNames.find((columnName) => columnName === column.name))
@@ -945,7 +1081,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
945
1081
  // if table already have primary columns, we must drop them.
946
1082
  const primaryColumns = clonedTable.primaryColumns;
947
1083
  if (primaryColumns.length > 0) {
948
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
1084
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1085
+ ? primaryColumns[0].primaryKeyConstraintName
1086
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
949
1087
  const columnNamesString = primaryColumns
950
1088
  .map((column) => `"${column.name}"`)
951
1089
  .join(", ");
@@ -956,7 +1094,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
956
1094
  clonedTable.columns
957
1095
  .filter((column) => columnNames.indexOf(column.name) !== -1)
958
1096
  .forEach((column) => (column.isPrimary = true));
959
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
1097
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1098
+ ? primaryColumns[0].primaryKeyConstraintName
1099
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
960
1100
  const columnNamesString = columnNames
961
1101
  .map((columnName) => `"${columnName}"`)
962
1102
  .join(", ");
@@ -968,12 +1108,12 @@ export class CockroachQueryRunner extends BaseQueryRunner {
968
1108
  /**
969
1109
  * Drops a primary key.
970
1110
  */
971
- async dropPrimaryKey(tableOrName) {
1111
+ async dropPrimaryKey(tableOrName, constraintName) {
972
1112
  const table = InstanceChecker.isTable(tableOrName)
973
1113
  ? tableOrName
974
1114
  : await this.getCachedTable(tableOrName);
975
1115
  const up = this.dropPrimaryKeySql(table);
976
- const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name));
1116
+ const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name), constraintName);
977
1117
  await this.executeQueries(up, down);
978
1118
  table.primaryColumns.forEach((column) => {
979
1119
  column.isPrimary = false;
@@ -1335,12 +1475,14 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1335
1475
  return `("table_schema" = '${table_schema}' AND "table_name" = '${table_name}')`;
1336
1476
  })
1337
1477
  .join(" OR ");
1338
- const columnsSql = `
1339
- SELECT
1340
- *,
1341
- pg_catalog.col_description(('"' || table_catalog || '"."' || table_schema || '"."' || table_name || '"')::regclass::oid, ordinal_position) as description
1342
- FROM "information_schema"."columns"
1343
- WHERE "is_hidden" = 'NO' AND ` + columnsCondiiton;
1478
+ const columnsSql = `SELECT "columns".*, "attr"."attgenerated" as "generated_type", ` +
1479
+ `pg_catalog.col_description(('"' || table_catalog || '"."' || table_schema || '"."' || table_name || '"')::regclass::oid, ordinal_position) as description ` +
1480
+ `FROM "information_schema"."columns" ` +
1481
+ `LEFT JOIN "pg_class" AS "cls" ON "cls"."relname" = "table_name" ` +
1482
+ `LEFT JOIN "pg_namespace" AS "ns" ON "ns"."oid" = "cls"."relnamespace" AND "ns"."nspname" = "table_schema" ` +
1483
+ `LEFT JOIN "pg_attribute" AS "attr" ON "attr"."attrelid" = "cls"."oid" AND "attr"."attname" = "column_name" AND "attr"."attnum" = "ordinal_position" ` +
1484
+ `WHERE "is_hidden" = 'NO' AND ` +
1485
+ columnsCondiiton;
1344
1486
  const constraintsCondition = dbTables
1345
1487
  .map(({ table_name, table_schema }) => {
1346
1488
  return `("ns"."nspname" = '${table_schema}' AND "t"."relname" = '${table_name}')`;
@@ -1474,7 +1616,30 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1474
1616
  }
1475
1617
  tableColumn.isNullable =
1476
1618
  dbColumn["is_nullable"] === "YES";
1477
- tableColumn.isPrimary = !!columnConstraints.find((constraint) => constraint["constraint_type"] === "PRIMARY");
1619
+ const primaryConstraint = columnConstraints.find((constraint) => constraint["constraint_type"] === "PRIMARY");
1620
+ if (primaryConstraint) {
1621
+ tableColumn.isPrimary = true;
1622
+ // find another columns involved in primary key constraint
1623
+ const anotherPrimaryConstraints = dbConstraints.filter((constraint) => constraint["table_name"] ===
1624
+ dbColumn["table_name"] &&
1625
+ constraint["table_schema"] ===
1626
+ dbColumn["table_schema"] &&
1627
+ constraint["column_name"] !==
1628
+ dbColumn["column_name"] &&
1629
+ constraint["constraint_type"] ===
1630
+ "PRIMARY");
1631
+ // collect all column names
1632
+ const columnNames = anotherPrimaryConstraints.map((constraint) => constraint["column_name"]);
1633
+ columnNames.push(dbColumn["column_name"]);
1634
+ // build default primary key constraint name
1635
+ const pkName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
1636
+ // if primary key has user-defined constraint name, write it in table column
1637
+ if (primaryConstraint["constraint_name"] !==
1638
+ pkName) {
1639
+ tableColumn.primaryKeyConstraintName =
1640
+ primaryConstraint["constraint_name"];
1641
+ }
1642
+ }
1478
1643
  const uniqueConstraints = columnConstraints.filter((constraint) => constraint["constraint_type"] === "UNIQUE");
1479
1644
  const isConstraintComposite = uniqueConstraints.every((uniqueConstraint) => {
1480
1645
  return dbConstraints.some((dbConstraint) => dbConstraint["constraint_type"] ===
@@ -1509,6 +1674,27 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1509
1674
  tableColumn.default.replace(/^(-?[\d\.]+)$/, "($1)");
1510
1675
  }
1511
1676
  }
1677
+ if (dbColumn["is_generated"] === "YES" &&
1678
+ dbColumn["generation_expression"]) {
1679
+ tableColumn.generatedType =
1680
+ dbColumn["generated_type"] === "s"
1681
+ ? "STORED"
1682
+ : "VIRTUAL";
1683
+ // We cannot relay on information_schema.columns.generation_expression, because it is formatted different.
1684
+ const asExpressionQuery = await this.selectTypeormMetadataSql({
1685
+ schema: dbTable["table_schema"],
1686
+ table: dbTable["table_name"],
1687
+ type: MetadataTableType.GENERATED_COLUMN,
1688
+ name: tableColumn.name,
1689
+ });
1690
+ const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
1691
+ if (results[0] && results[0].value) {
1692
+ tableColumn.asExpression = results[0].value;
1693
+ }
1694
+ else {
1695
+ tableColumn.asExpression = "";
1696
+ }
1697
+ }
1512
1698
  tableColumn.comment =
1513
1699
  dbColumn["description"] == null
1514
1700
  ? undefined
@@ -1684,7 +1870,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1684
1870
  }
1685
1871
  const primaryColumns = table.columns.filter((column) => column.isPrimary);
1686
1872
  if (primaryColumns.length > 0) {
1687
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
1873
+ const primaryKeyName = primaryColumns[0].primaryKeyConstraintName
1874
+ ? primaryColumns[0].primaryKeyConstraintName
1875
+ : this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
1688
1876
  const columnNames = primaryColumns
1689
1877
  .map((column) => `"${column.name}"`)
1690
1878
  .join(", ");
@@ -1772,8 +1960,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1772
1960
  /**
1773
1961
  * Builds create primary key sql.
1774
1962
  */
1775
- createPrimaryKeySql(table, columnNames) {
1776
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
1963
+ createPrimaryKeySql(table, columnNames, constraintName) {
1964
+ const primaryKeyName = constraintName
1965
+ ? constraintName
1966
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
1777
1967
  const columnNamesString = columnNames
1778
1968
  .map((columnName) => `"${columnName}"`)
1779
1969
  .join(", ");
@@ -1783,8 +1973,13 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1783
1973
  * Builds drop primary key sql.
1784
1974
  */
1785
1975
  dropPrimaryKeySql(table) {
1976
+ if (!table.primaryColumns.length)
1977
+ throw new TypeORMError(`Table ${table} has no primary keys.`);
1786
1978
  const columnNames = table.primaryColumns.map((column) => column.name);
1787
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
1979
+ const constraintName = table.primaryColumns[0].primaryKeyConstraintName;
1980
+ const primaryKeyName = constraintName
1981
+ ? constraintName
1982
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
1788
1983
  return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${primaryKeyName}"`);
1789
1984
  }
1790
1985
  /**
@@ -1901,10 +2096,15 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1901
2096
  }
1902
2097
  if (!column.isGenerated)
1903
2098
  c += " " + this.connection.driver.createFullType(column);
1904
- if (column.charset)
1905
- c += ' CHARACTER SET "' + column.charset + '"';
1906
- if (column.collation)
1907
- c += ' COLLATE "' + column.collation + '"';
2099
+ if (column.asExpression) {
2100
+ c += ` AS (${column.asExpression}) ${column.generatedType ? column.generatedType : "VIRTUAL"}`;
2101
+ }
2102
+ else {
2103
+ if (column.charset)
2104
+ c += ' CHARACTER SET "' + column.charset + '"';
2105
+ if (column.collation)
2106
+ c += ' COLLATE "' + column.collation + '"';
2107
+ }
1908
2108
  if (!column.isNullable)
1909
2109
  c += " NOT NULL";
1910
2110
  if (!column.isGenerated &&