typeorm 0.3.6-dev.2d8afbe → 0.3.6-dev.506133e

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 (210) hide show
  1. package/README.md +1 -1
  2. package/browser/decorator/options/ColumnOptions.d.ts +8 -0
  3. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  4. package/browser/decorator/options/JoinColumnOptions.d.ts +4 -0
  5. package/browser/decorator/options/JoinColumnOptions.js.map +1 -1
  6. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  7. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  8. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  9. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  10. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  11. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  12. package/browser/decorator/relations/JoinColumn.js +1 -0
  13. package/browser/decorator/relations/JoinColumn.js.map +1 -1
  14. package/browser/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  15. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  16. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  17. package/browser/driver/cockroachdb/CockroachQueryRunner.js +100 -22
  18. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  19. package/browser/driver/mongodb/typings.d.ts +5 -5
  20. package/browser/driver/mongodb/typings.js.map +1 -1
  21. package/browser/driver/mysql/MysqlQueryRunner.js +16 -0
  22. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  23. package/browser/driver/oracle/OracleQueryRunner.d.ts +3 -3
  24. package/browser/driver/oracle/OracleQueryRunner.js +98 -21
  25. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  26. package/browser/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  27. package/browser/driver/postgres/PostgresQueryRunner.js +99 -21
  28. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  29. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +59 -15
  30. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  31. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +53 -12
  32. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  33. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  34. package/browser/driver/sqlserver/SqlServerQueryRunner.js +100 -22
  35. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  36. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.d.ts +1 -1
  37. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
  38. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.d.ts +2 -2
  39. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
  40. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.d.ts +2 -2
  41. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
  42. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.d.ts +2 -2
  43. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
  44. package/browser/entity-manager/EntityManager.js +1 -1
  45. package/browser/entity-manager/EntityManager.js.map +1 -1
  46. package/browser/entity-schema/EntitySchemaColumnOptions.d.ts +4 -0
  47. package/browser/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  48. package/browser/entity-schema/EntitySchemaTransformer.js +2 -0
  49. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  50. package/browser/metadata/ColumnMetadata.d.ts +8 -0
  51. package/browser/metadata/ColumnMetadata.js +8 -0
  52. package/browser/metadata/ColumnMetadata.js.map +1 -1
  53. package/browser/metadata/EntityMetadata.js +1 -1
  54. package/browser/metadata/EntityMetadata.js.map +1 -1
  55. package/browser/metadata/ForeignKeyMetadata.d.ts +7 -0
  56. package/browser/metadata/ForeignKeyMetadata.js +4 -1
  57. package/browser/metadata/ForeignKeyMetadata.js.map +1 -1
  58. package/browser/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  59. package/browser/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  60. package/browser/metadata-builder/EntityMetadataValidator.js +9 -0
  61. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  62. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
  63. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  64. package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  65. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  66. package/browser/migration/MigrationExecutor.js +1 -1
  67. package/browser/migration/MigrationExecutor.js.map +1 -1
  68. package/browser/persistence/SubjectDatabaseEntityLoader.d.ts +1 -1
  69. package/browser/persistence/SubjectDatabaseEntityLoader.js +1 -1
  70. package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  71. package/browser/persistence/SubjectExecutor.js +1 -1
  72. package/browser/persistence/SubjectExecutor.js.map +1 -1
  73. package/browser/persistence/subject-builder/CascadesSubjectBuilder.d.ts +1 -1
  74. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
  75. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  76. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js +1 -1
  77. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  78. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
  79. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  80. package/browser/query-builder/QueryBuilder.d.ts +1 -1
  81. package/browser/query-builder/QueryBuilder.js +15 -15
  82. package/browser/query-builder/QueryBuilder.js.map +1 -1
  83. package/browser/query-builder/QueryExpressionMap.d.ts +1 -1
  84. package/browser/query-builder/QueryExpressionMap.js +1 -1
  85. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  86. package/browser/query-builder/ReturningResultsEntityUpdator.js +2 -2
  87. package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  88. package/browser/query-runner/QueryRunner.d.ts +2 -2
  89. package/browser/query-runner/QueryRunner.js.map +1 -1
  90. package/browser/schema-builder/options/TableColumnOptions.d.ts +8 -0
  91. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  92. package/browser/schema-builder/options/TableForeignKeyOptions.d.ts +1 -1
  93. package/browser/schema-builder/options/TableForeignKeyOptions.js.map +1 -1
  94. package/browser/schema-builder/table/TableColumn.d.ts +4 -0
  95. package/browser/schema-builder/table/TableColumn.js +2 -0
  96. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  97. package/browser/schema-builder/util/TableUtils.js +1 -0
  98. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  99. package/browser/util/OrmUtils.d.ts +1 -1
  100. package/browser/util/OrmUtils.js +4 -4
  101. package/browser/util/OrmUtils.js.map +1 -1
  102. package/browser/util/escapeRegExp.d.ts +1 -0
  103. package/browser/util/escapeRegExp.js +6 -0
  104. package/browser/util/escapeRegExp.js.map +1 -0
  105. package/commands/MigrationGenerateCommand.js +3 -2
  106. package/commands/MigrationGenerateCommand.js.map +1 -1
  107. package/decorator/options/ColumnOptions.d.ts +8 -0
  108. package/decorator/options/ColumnOptions.js.map +1 -1
  109. package/decorator/options/JoinColumnOptions.d.ts +4 -0
  110. package/decorator/options/JoinColumnOptions.js.map +1 -1
  111. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  112. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  113. package/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  114. package/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  115. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  116. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  117. package/decorator/relations/JoinColumn.js +1 -0
  118. package/decorator/relations/JoinColumn.js.map +1 -1
  119. package/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  120. package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  121. package/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  122. package/driver/cockroachdb/CockroachQueryRunner.js +100 -22
  123. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  124. package/driver/mongodb/typings.d.ts +5 -5
  125. package/driver/mongodb/typings.js.map +1 -1
  126. package/driver/mysql/MysqlQueryRunner.js +16 -0
  127. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  128. package/driver/oracle/OracleQueryRunner.d.ts +3 -3
  129. package/driver/oracle/OracleQueryRunner.js +98 -21
  130. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  131. package/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  132. package/driver/postgres/PostgresQueryRunner.js +99 -21
  133. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  134. package/driver/sqlite-abstract/AbstractSqliteDriver.js +59 -15
  135. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  136. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +53 -12
  137. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  138. package/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  139. package/driver/sqlserver/SqlServerQueryRunner.js +100 -22
  140. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  141. package/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.d.ts +1 -1
  142. package/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
  143. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.d.ts +2 -2
  144. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
  145. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.d.ts +2 -2
  146. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
  147. package/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.d.ts +2 -2
  148. package/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
  149. package/entity-manager/EntityManager.js +1 -1
  150. package/entity-manager/EntityManager.js.map +1 -1
  151. package/entity-schema/EntitySchemaColumnOptions.d.ts +4 -0
  152. package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  153. package/entity-schema/EntitySchemaTransformer.js +2 -0
  154. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  155. package/metadata/ColumnMetadata.d.ts +8 -0
  156. package/metadata/ColumnMetadata.js +8 -0
  157. package/metadata/ColumnMetadata.js.map +1 -1
  158. package/metadata/EntityMetadata.js +1 -1
  159. package/metadata/EntityMetadata.js.map +1 -1
  160. package/metadata/ForeignKeyMetadata.d.ts +7 -0
  161. package/metadata/ForeignKeyMetadata.js +4 -1
  162. package/metadata/ForeignKeyMetadata.js.map +1 -1
  163. package/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  164. package/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  165. package/metadata-builder/EntityMetadataValidator.js +9 -0
  166. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  167. package/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
  168. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  169. package/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  170. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  171. package/migration/MigrationExecutor.js +1 -1
  172. package/migration/MigrationExecutor.js.map +1 -1
  173. package/package.json +1 -1
  174. package/persistence/SubjectDatabaseEntityLoader.d.ts +1 -1
  175. package/persistence/SubjectDatabaseEntityLoader.js +1 -1
  176. package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  177. package/persistence/SubjectExecutor.js +1 -1
  178. package/persistence/SubjectExecutor.js.map +1 -1
  179. package/persistence/subject-builder/CascadesSubjectBuilder.d.ts +1 -1
  180. package/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
  181. package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  182. package/persistence/subject-builder/ManyToManySubjectBuilder.js +1 -1
  183. package/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  184. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
  185. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  186. package/query-builder/QueryBuilder.d.ts +1 -1
  187. package/query-builder/QueryBuilder.js +15 -15
  188. package/query-builder/QueryBuilder.js.map +1 -1
  189. package/query-builder/QueryExpressionMap.d.ts +1 -1
  190. package/query-builder/QueryExpressionMap.js +1 -1
  191. package/query-builder/QueryExpressionMap.js.map +1 -1
  192. package/query-builder/ReturningResultsEntityUpdator.js +2 -2
  193. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  194. package/query-runner/QueryRunner.d.ts +2 -2
  195. package/query-runner/QueryRunner.js.map +1 -1
  196. package/schema-builder/options/TableColumnOptions.d.ts +8 -0
  197. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  198. package/schema-builder/options/TableForeignKeyOptions.d.ts +1 -1
  199. package/schema-builder/options/TableForeignKeyOptions.js.map +1 -1
  200. package/schema-builder/table/TableColumn.d.ts +4 -0
  201. package/schema-builder/table/TableColumn.js +2 -0
  202. package/schema-builder/table/TableColumn.js.map +1 -1
  203. package/schema-builder/util/TableUtils.js +1 -0
  204. package/schema-builder/util/TableUtils.js.map +1 -1
  205. package/util/OrmUtils.d.ts +1 -1
  206. package/util/OrmUtils.js +4 -4
  207. package/util/OrmUtils.js.map +1 -1
  208. package/util/escapeRegExp.d.ts +1 -0
  209. package/util/escapeRegExp.js +10 -0
  210. package/util/escapeRegExp.js.map +1 -0
@@ -510,7 +510,8 @@ export class CockroachQueryRunner extends BaseQueryRunner {
510
510
  upQueries.push(new Query(`ALTER TABLE ${this.escapePath(oldTable)} RENAME TO "${newTableName}"`));
511
511
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME TO "${oldTableName}"`));
512
512
  // rename column primary key constraint
513
- if (newTable.primaryColumns.length > 0) {
513
+ if (newTable.primaryColumns.length > 0 &&
514
+ !newTable.primaryColumns[0].primaryKeyConstraintName) {
514
515
  const columnNames = newTable.primaryColumns.map((column) => column.name);
515
516
  const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);
516
517
  const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);
@@ -519,6 +520,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
519
520
  }
520
521
  // rename unique constraints
521
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;
522
527
  // build new constraint name
523
528
  const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
524
529
  // build queries
@@ -529,6 +534,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
529
534
  });
530
535
  // rename index constraints
531
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;
532
541
  // build new constraint name
533
542
  const { schema } = this.driver.parseTableName(newTable);
534
543
  const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
@@ -546,6 +555,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
546
555
  });
547
556
  // rename foreign key constraints
548
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;
549
562
  // build new constraint name
550
563
  const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
551
564
  // build queries
@@ -575,9 +588,11 @@ export class CockroachQueryRunner extends BaseQueryRunner {
575
588
  if (column.isPrimary) {
576
589
  const primaryColumns = clonedTable.primaryColumns;
577
590
  // if table already have primary key, me must drop it and recreate again
578
- // 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
579
592
  if (primaryColumns.length > 0) {
580
- 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));
581
596
  const columnNames = primaryColumns
582
597
  .map((column) => `"${column.name}"`)
583
598
  .join(", ");
@@ -585,7 +600,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
585
600
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
586
601
  }
587
602
  primaryColumns.push(column);
588
- 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));
589
606
  const columnNames = primaryColumns
590
607
  .map((column) => `"${column.name}"`)
591
608
  .join(", ");
@@ -713,7 +730,8 @@ export class CockroachQueryRunner extends BaseQueryRunner {
713
730
  upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN "${oldColumn.name}" TO "${newColumn.name}"`));
714
731
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN "${newColumn.name}" TO "${oldColumn.name}"`));
715
732
  // rename column primary key constraint
716
- if (oldColumn.isPrimary === true) {
733
+ if (oldColumn.isPrimary === true &&
734
+ !oldColumn.primaryKeyConstraintName) {
717
735
  const primaryColumns = clonedTable.primaryColumns;
718
736
  // build old primary constraint name
719
737
  const columnNames = primaryColumns.map((column) => column.name);
@@ -728,6 +746,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
728
746
  }
729
747
  // rename unique constraints
730
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;
731
753
  // build new constraint name
732
754
  unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);
733
755
  unique.columnNames.push(newColumn.name);
@@ -740,6 +762,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
740
762
  });
741
763
  // rename index constraints
742
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;
743
769
  // build new constraint name
744
770
  index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);
745
771
  index.columnNames.push(newColumn.name);
@@ -761,6 +787,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
761
787
  clonedTable
762
788
  .findColumnForeignKeys(oldColumn)
763
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;
764
794
  // build new constraint name
765
795
  foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);
766
796
  foreignKey.columnNames.push(newColumn.name);
@@ -799,7 +829,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
799
829
  const primaryColumns = clonedTable.primaryColumns;
800
830
  // if primary column state changed, we must always drop existed constraint.
801
831
  if (primaryColumns.length > 0) {
802
- 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));
803
835
  const columnNames = primaryColumns
804
836
  .map((column) => `"${column.name}"`)
805
837
  .join(", ");
@@ -811,7 +843,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
811
843
  // update column in table
812
844
  const column = clonedTable.columns.find((column) => column.name === newColumn.name);
813
845
  column.isPrimary = true;
814
- 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));
815
849
  const columnNames = primaryColumns
816
850
  .map((column) => `"${column.name}"`)
817
851
  .join(", ");
@@ -826,7 +860,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
826
860
  column.isPrimary = false;
827
861
  // if we have another primary keys, we must recreate constraint.
828
862
  if (primaryColumns.length > 0) {
829
- 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));
830
867
  const columnNames = primaryColumns
831
868
  .map((column) => `"${column.name}"`)
832
869
  .join(", ");
@@ -921,9 +958,11 @@ export class CockroachQueryRunner extends BaseQueryRunner {
921
958
  const upQueries = [];
922
959
  const downQueries = [];
923
960
  // drop primary key constraint
924
- // 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
925
962
  if (column.isPrimary) {
926
- 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));
927
966
  const columnNames = clonedTable.primaryColumns
928
967
  .map((primaryColumn) => `"${primaryColumn.name}"`)
929
968
  .join(", ");
@@ -934,7 +973,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
934
973
  tableColumn.isPrimary = false;
935
974
  // if primary key have multiple columns, we must recreate it without dropped column
936
975
  if (clonedTable.primaryColumns.length > 0) {
937
- 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));
938
980
  const columnNames = clonedTable.primaryColumns
939
981
  .map((primaryColumn) => `"${primaryColumn.name}"`)
940
982
  .join(", ");
@@ -1010,12 +1052,12 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1010
1052
  /**
1011
1053
  * Creates a new primary key.
1012
1054
  */
1013
- async createPrimaryKey(tableOrName, columnNames) {
1055
+ async createPrimaryKey(tableOrName, columnNames, constraintName) {
1014
1056
  const table = InstanceChecker.isTable(tableOrName)
1015
1057
  ? tableOrName
1016
1058
  : await this.getCachedTable(tableOrName);
1017
1059
  const clonedTable = table.clone();
1018
- const up = this.createPrimaryKeySql(table, columnNames);
1060
+ const up = this.createPrimaryKeySql(table, columnNames, constraintName);
1019
1061
  // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.
1020
1062
  clonedTable.columns.forEach((column) => {
1021
1063
  if (columnNames.find((columnName) => columnName === column.name))
@@ -1039,7 +1081,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1039
1081
  // if table already have primary columns, we must drop them.
1040
1082
  const primaryColumns = clonedTable.primaryColumns;
1041
1083
  if (primaryColumns.length > 0) {
1042
- 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));
1043
1087
  const columnNamesString = primaryColumns
1044
1088
  .map((column) => `"${column.name}"`)
1045
1089
  .join(", ");
@@ -1050,7 +1094,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1050
1094
  clonedTable.columns
1051
1095
  .filter((column) => columnNames.indexOf(column.name) !== -1)
1052
1096
  .forEach((column) => (column.isPrimary = true));
1053
- 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);
1054
1100
  const columnNamesString = columnNames
1055
1101
  .map((columnName) => `"${columnName}"`)
1056
1102
  .join(", ");
@@ -1062,12 +1108,12 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1062
1108
  /**
1063
1109
  * Drops a primary key.
1064
1110
  */
1065
- async dropPrimaryKey(tableOrName) {
1111
+ async dropPrimaryKey(tableOrName, constraintName) {
1066
1112
  const table = InstanceChecker.isTable(tableOrName)
1067
1113
  ? tableOrName
1068
1114
  : await this.getCachedTable(tableOrName);
1069
1115
  const up = this.dropPrimaryKeySql(table);
1070
- const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name));
1116
+ const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name), constraintName);
1071
1117
  await this.executeQueries(up, down);
1072
1118
  table.primaryColumns.forEach((column) => {
1073
1119
  column.isPrimary = false;
@@ -1570,7 +1616,30 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1570
1616
  }
1571
1617
  tableColumn.isNullable =
1572
1618
  dbColumn["is_nullable"] === "YES";
1573
- 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
+ }
1574
1643
  const uniqueConstraints = columnConstraints.filter((constraint) => constraint["constraint_type"] === "UNIQUE");
1575
1644
  const isConstraintComposite = uniqueConstraints.every((uniqueConstraint) => {
1576
1645
  return dbConstraints.some((dbConstraint) => dbConstraint["constraint_type"] ===
@@ -1801,7 +1870,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1801
1870
  }
1802
1871
  const primaryColumns = table.columns.filter((column) => column.isPrimary);
1803
1872
  if (primaryColumns.length > 0) {
1804
- 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));
1805
1876
  const columnNames = primaryColumns
1806
1877
  .map((column) => `"${column.name}"`)
1807
1878
  .join(", ");
@@ -1889,8 +1960,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1889
1960
  /**
1890
1961
  * Builds create primary key sql.
1891
1962
  */
1892
- createPrimaryKeySql(table, columnNames) {
1893
- 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);
1894
1967
  const columnNamesString = columnNames
1895
1968
  .map((columnName) => `"${columnName}"`)
1896
1969
  .join(", ");
@@ -1900,8 +1973,13 @@ export class CockroachQueryRunner extends BaseQueryRunner {
1900
1973
  * Builds drop primary key sql.
1901
1974
  */
1902
1975
  dropPrimaryKeySql(table) {
1976
+ if (!table.primaryColumns.length)
1977
+ throw new TypeORMError(`Table ${table} has no primary keys.`);
1903
1978
  const columnNames = table.primaryColumns.map((column) => column.name);
1904
- 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);
1905
1983
  return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${primaryKeyName}"`);
1906
1984
  }
1907
1985
  /**