typeorm 0.3.6-dev.0418ebc → 0.3.6-dev.22570f5

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 (120) hide show
  1. package/README.md +1 -1
  2. package/browser/cache/RedisQueryResultCache.js +3 -0
  3. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  4. package/browser/decorator/options/ColumnOptions.d.ts +8 -0
  5. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  6. package/browser/decorator/options/JoinColumnOptions.d.ts +4 -0
  7. package/browser/decorator/options/JoinColumnOptions.js.map +1 -1
  8. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  9. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  10. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  11. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  12. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  13. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  14. package/browser/decorator/relations/JoinColumn.js +1 -0
  15. package/browser/decorator/relations/JoinColumn.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/mysql/MysqlQueryRunner.js +16 -0
  20. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  21. package/browser/driver/oracle/OracleQueryRunner.d.ts +3 -3
  22. package/browser/driver/oracle/OracleQueryRunner.js +98 -21
  23. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  24. package/browser/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  25. package/browser/driver/postgres/PostgresQueryRunner.js +99 -21
  26. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  27. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +59 -15
  28. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  29. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +53 -12
  30. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  31. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  32. package/browser/driver/sqlserver/SqlServerQueryRunner.js +100 -22
  33. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  34. package/browser/entity-schema/EntitySchemaTransformer.js +1 -0
  35. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  36. package/browser/metadata/ColumnMetadata.d.ts +8 -0
  37. package/browser/metadata/ColumnMetadata.js +8 -0
  38. package/browser/metadata/ColumnMetadata.js.map +1 -1
  39. package/browser/metadata/ForeignKeyMetadata.d.ts +7 -0
  40. package/browser/metadata/ForeignKeyMetadata.js +4 -1
  41. package/browser/metadata/ForeignKeyMetadata.js.map +1 -1
  42. package/browser/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  43. package/browser/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  44. package/browser/metadata-builder/EntityMetadataValidator.js +9 -0
  45. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  46. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
  47. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  48. package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  49. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  50. package/browser/query-runner/QueryRunner.d.ts +2 -2
  51. package/browser/query-runner/QueryRunner.js.map +1 -1
  52. package/browser/schema-builder/options/TableColumnOptions.d.ts +8 -0
  53. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  54. package/browser/schema-builder/table/TableColumn.d.ts +4 -0
  55. package/browser/schema-builder/table/TableColumn.js +2 -0
  56. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  57. package/browser/schema-builder/util/TableUtils.js +1 -0
  58. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  59. package/cache/RedisQueryResultCache.js +3 -0
  60. package/cache/RedisQueryResultCache.js.map +1 -1
  61. package/commands/InitCommand.js +1 -1
  62. package/commands/InitCommand.js.map +1 -1
  63. package/commands/MigrationGenerateCommand.js +3 -2
  64. package/commands/MigrationGenerateCommand.js.map +1 -1
  65. package/decorator/options/ColumnOptions.d.ts +8 -0
  66. package/decorator/options/ColumnOptions.js.map +1 -1
  67. package/decorator/options/JoinColumnOptions.d.ts +4 -0
  68. package/decorator/options/JoinColumnOptions.js.map +1 -1
  69. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  70. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  71. package/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  72. package/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  73. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  74. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  75. package/decorator/relations/JoinColumn.js +1 -0
  76. package/decorator/relations/JoinColumn.js.map +1 -1
  77. package/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  78. package/driver/cockroachdb/CockroachQueryRunner.js +100 -22
  79. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  80. package/driver/mysql/MysqlQueryRunner.js +16 -0
  81. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  82. package/driver/oracle/OracleQueryRunner.d.ts +3 -3
  83. package/driver/oracle/OracleQueryRunner.js +98 -21
  84. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  85. package/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  86. package/driver/postgres/PostgresQueryRunner.js +99 -21
  87. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  88. package/driver/sqlite-abstract/AbstractSqliteDriver.js +59 -15
  89. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  90. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +53 -12
  91. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  92. package/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  93. package/driver/sqlserver/SqlServerQueryRunner.js +100 -22
  94. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  95. package/entity-schema/EntitySchemaTransformer.js +1 -0
  96. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  97. package/metadata/ColumnMetadata.d.ts +8 -0
  98. package/metadata/ColumnMetadata.js +8 -0
  99. package/metadata/ColumnMetadata.js.map +1 -1
  100. package/metadata/ForeignKeyMetadata.d.ts +7 -0
  101. package/metadata/ForeignKeyMetadata.js +4 -1
  102. package/metadata/ForeignKeyMetadata.js.map +1 -1
  103. package/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  104. package/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  105. package/metadata-builder/EntityMetadataValidator.js +9 -0
  106. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  107. package/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
  108. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  109. package/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  110. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  111. package/package.json +1 -1
  112. package/query-runner/QueryRunner.d.ts +2 -2
  113. package/query-runner/QueryRunner.js.map +1 -1
  114. package/schema-builder/options/TableColumnOptions.d.ts +8 -0
  115. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  116. package/schema-builder/table/TableColumn.d.ts +4 -0
  117. package/schema-builder/table/TableColumn.js +2 -0
  118. package/schema-builder/table/TableColumn.js.map +1 -1
  119. package/schema-builder/util/TableUtils.js +1 -0
  120. package/schema-builder/util/TableUtils.js.map +1 -1
@@ -513,7 +513,8 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
513
513
  upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(oldTable)} RENAME TO "${newTableName}"`));
514
514
  downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME TO "${oldTableName}"`));
515
515
  // rename column primary key constraint
516
- if (newTable.primaryColumns.length > 0) {
516
+ if (newTable.primaryColumns.length > 0 &&
517
+ !newTable.primaryColumns[0].primaryKeyConstraintName) {
517
518
  const columnNames = newTable.primaryColumns.map((column) => column.name);
518
519
  const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);
519
520
  const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);
@@ -522,6 +523,10 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
522
523
  }
523
524
  // rename unique constraints
524
525
  newTable.uniques.forEach((unique) => {
526
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
527
+ // Skip renaming if Unique has user defined constraint name
528
+ if (unique.name !== oldUniqueName)
529
+ return;
525
530
  // build new constraint name
526
531
  const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
527
532
  // build queries
@@ -532,6 +537,10 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
532
537
  });
533
538
  // rename index constraints
534
539
  newTable.indices.forEach((index) => {
540
+ const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
541
+ // Skip renaming if Index has user defined constraint name
542
+ if (index.name !== oldIndexName)
543
+ return;
535
544
  // build new constraint name
536
545
  const { schema } = this.driver.parseTableName(newTable);
537
546
  const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
@@ -549,6 +558,10 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
549
558
  });
550
559
  // rename foreign key constraints
551
560
  newTable.foreignKeys.forEach((foreignKey) => {
561
+ const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
562
+ // Skip renaming if foreign key has user defined constraint name
563
+ if (foreignKey.name !== oldForeignKeyName)
564
+ return;
552
565
  // build new constraint name
553
566
  const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
554
567
  // build queries
@@ -578,9 +591,11 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
578
591
  if (column.isPrimary) {
579
592
  const primaryColumns = clonedTable.primaryColumns;
580
593
  // if table already have primary key, me must drop it and recreate again
581
- // todo: altering pk is not supported yet https://github.com/cockroachdb/cockroach/issues/19141
594
+ // todo: https://go.crdb.dev/issue-v/48026/v21.1
582
595
  if (primaryColumns.length > 0) {
583
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
596
+ const pkName = primaryColumns[0].primaryKeyConstraintName
597
+ ? primaryColumns[0].primaryKeyConstraintName
598
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
584
599
  const columnNames = primaryColumns
585
600
  .map((column) => `"${column.name}"`)
586
601
  .join(", ");
@@ -588,7 +603,9 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
588
603
  downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
589
604
  }
590
605
  primaryColumns.push(column);
591
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
606
+ const pkName = primaryColumns[0].primaryKeyConstraintName
607
+ ? primaryColumns[0].primaryKeyConstraintName
608
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
592
609
  const columnNames = primaryColumns
593
610
  .map((column) => `"${column.name}"`)
594
611
  .join(", ");
@@ -716,7 +733,8 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
716
733
  upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN "${oldColumn.name}" TO "${newColumn.name}"`));
717
734
  downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN "${newColumn.name}" TO "${oldColumn.name}"`));
718
735
  // rename column primary key constraint
719
- if (oldColumn.isPrimary === true) {
736
+ if (oldColumn.isPrimary === true &&
737
+ !oldColumn.primaryKeyConstraintName) {
720
738
  const primaryColumns = clonedTable.primaryColumns;
721
739
  // build old primary constraint name
722
740
  const columnNames = primaryColumns.map((column) => column.name);
@@ -731,6 +749,10 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
731
749
  }
732
750
  // rename unique constraints
733
751
  clonedTable.findColumnUniques(oldColumn).forEach((unique) => {
752
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);
753
+ // Skip renaming if Unique has user defined constraint name
754
+ if (unique.name !== oldUniqueName)
755
+ return;
734
756
  // build new constraint name
735
757
  unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);
736
758
  unique.columnNames.push(newColumn.name);
@@ -743,6 +765,10 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
743
765
  });
744
766
  // rename index constraints
745
767
  clonedTable.findColumnIndices(oldColumn).forEach((index) => {
768
+ const oldIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);
769
+ // Skip renaming if Index has user defined constraint name
770
+ if (index.name !== oldIndexName)
771
+ return;
746
772
  // build new constraint name
747
773
  index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);
748
774
  index.columnNames.push(newColumn.name);
@@ -764,6 +790,10 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
764
790
  clonedTable
765
791
  .findColumnForeignKeys(oldColumn)
766
792
  .forEach((foreignKey) => {
793
+ const foreignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
794
+ // Skip renaming if foreign key has user defined constraint name
795
+ if (foreignKey.name !== foreignKeyName)
796
+ return;
767
797
  // build new constraint name
768
798
  foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);
769
799
  foreignKey.columnNames.push(newColumn.name);
@@ -802,7 +832,9 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
802
832
  const primaryColumns = clonedTable.primaryColumns;
803
833
  // if primary column state changed, we must always drop existed constraint.
804
834
  if (primaryColumns.length > 0) {
805
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
835
+ const pkName = primaryColumns[0].primaryKeyConstraintName
836
+ ? primaryColumns[0].primaryKeyConstraintName
837
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
806
838
  const columnNames = primaryColumns
807
839
  .map((column) => `"${column.name}"`)
808
840
  .join(", ");
@@ -814,7 +846,9 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
814
846
  // update column in table
815
847
  const column = clonedTable.columns.find((column) => column.name === newColumn.name);
816
848
  column.isPrimary = true;
817
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
849
+ const pkName = primaryColumns[0].primaryKeyConstraintName
850
+ ? primaryColumns[0].primaryKeyConstraintName
851
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
818
852
  const columnNames = primaryColumns
819
853
  .map((column) => `"${column.name}"`)
820
854
  .join(", ");
@@ -829,7 +863,10 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
829
863
  column.isPrimary = false;
830
864
  // if we have another primary keys, we must recreate constraint.
831
865
  if (primaryColumns.length > 0) {
832
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
866
+ const pkName = primaryColumns[0]
867
+ .primaryKeyConstraintName
868
+ ? primaryColumns[0].primaryKeyConstraintName
869
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
833
870
  const columnNames = primaryColumns
834
871
  .map((column) => `"${column.name}"`)
835
872
  .join(", ");
@@ -924,9 +961,11 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
924
961
  const upQueries = [];
925
962
  const downQueries = [];
926
963
  // drop primary key constraint
927
- // todo: altering pk is not supported yet https://github.com/cockroachdb/cockroach/issues/19141
964
+ // todo: https://go.crdb.dev/issue-v/48026/v21.1
928
965
  if (column.isPrimary) {
929
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
966
+ const pkName = column.primaryKeyConstraintName
967
+ ? column.primaryKeyConstraintName
968
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
930
969
  const columnNames = clonedTable.primaryColumns
931
970
  .map((primaryColumn) => `"${primaryColumn.name}"`)
932
971
  .join(", ");
@@ -937,7 +976,10 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
937
976
  tableColumn.isPrimary = false;
938
977
  // if primary key have multiple columns, we must recreate it without dropped column
939
978
  if (clonedTable.primaryColumns.length > 0) {
940
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
979
+ const pkName = clonedTable.primaryColumns[0]
980
+ .primaryKeyConstraintName
981
+ ? clonedTable.primaryColumns[0].primaryKeyConstraintName
982
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
941
983
  const columnNames = clonedTable.primaryColumns
942
984
  .map((primaryColumn) => `"${primaryColumn.name}"`)
943
985
  .join(", ");
@@ -1013,12 +1055,12 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1013
1055
  /**
1014
1056
  * Creates a new primary key.
1015
1057
  */
1016
- async createPrimaryKey(tableOrName, columnNames) {
1058
+ async createPrimaryKey(tableOrName, columnNames, constraintName) {
1017
1059
  const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1018
1060
  ? tableOrName
1019
1061
  : await this.getCachedTable(tableOrName);
1020
1062
  const clonedTable = table.clone();
1021
- const up = this.createPrimaryKeySql(table, columnNames);
1063
+ const up = this.createPrimaryKeySql(table, columnNames, constraintName);
1022
1064
  // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.
1023
1065
  clonedTable.columns.forEach((column) => {
1024
1066
  if (columnNames.find((columnName) => columnName === column.name))
@@ -1042,7 +1084,9 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1042
1084
  // if table already have primary columns, we must drop them.
1043
1085
  const primaryColumns = clonedTable.primaryColumns;
1044
1086
  if (primaryColumns.length > 0) {
1045
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
1087
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1088
+ ? primaryColumns[0].primaryKeyConstraintName
1089
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
1046
1090
  const columnNamesString = primaryColumns
1047
1091
  .map((column) => `"${column.name}"`)
1048
1092
  .join(", ");
@@ -1053,7 +1097,9 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1053
1097
  clonedTable.columns
1054
1098
  .filter((column) => columnNames.indexOf(column.name) !== -1)
1055
1099
  .forEach((column) => (column.isPrimary = true));
1056
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
1100
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1101
+ ? primaryColumns[0].primaryKeyConstraintName
1102
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
1057
1103
  const columnNamesString = columnNames
1058
1104
  .map((columnName) => `"${columnName}"`)
1059
1105
  .join(", ");
@@ -1065,12 +1111,12 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1065
1111
  /**
1066
1112
  * Drops a primary key.
1067
1113
  */
1068
- async dropPrimaryKey(tableOrName) {
1114
+ async dropPrimaryKey(tableOrName, constraintName) {
1069
1115
  const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1070
1116
  ? tableOrName
1071
1117
  : await this.getCachedTable(tableOrName);
1072
1118
  const up = this.dropPrimaryKeySql(table);
1073
- const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name));
1119
+ const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name), constraintName);
1074
1120
  await this.executeQueries(up, down);
1075
1121
  table.primaryColumns.forEach((column) => {
1076
1122
  column.isPrimary = false;
@@ -1573,7 +1619,30 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1573
1619
  }
1574
1620
  tableColumn.isNullable =
1575
1621
  dbColumn["is_nullable"] === "YES";
1576
- tableColumn.isPrimary = !!columnConstraints.find((constraint) => constraint["constraint_type"] === "PRIMARY");
1622
+ const primaryConstraint = columnConstraints.find((constraint) => constraint["constraint_type"] === "PRIMARY");
1623
+ if (primaryConstraint) {
1624
+ tableColumn.isPrimary = true;
1625
+ // find another columns involved in primary key constraint
1626
+ const anotherPrimaryConstraints = dbConstraints.filter((constraint) => constraint["table_name"] ===
1627
+ dbColumn["table_name"] &&
1628
+ constraint["table_schema"] ===
1629
+ dbColumn["table_schema"] &&
1630
+ constraint["column_name"] !==
1631
+ dbColumn["column_name"] &&
1632
+ constraint["constraint_type"] ===
1633
+ "PRIMARY");
1634
+ // collect all column names
1635
+ const columnNames = anotherPrimaryConstraints.map((constraint) => constraint["column_name"]);
1636
+ columnNames.push(dbColumn["column_name"]);
1637
+ // build default primary key constraint name
1638
+ const pkName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
1639
+ // if primary key has user-defined constraint name, write it in table column
1640
+ if (primaryConstraint["constraint_name"] !==
1641
+ pkName) {
1642
+ tableColumn.primaryKeyConstraintName =
1643
+ primaryConstraint["constraint_name"];
1644
+ }
1645
+ }
1577
1646
  const uniqueConstraints = columnConstraints.filter((constraint) => constraint["constraint_type"] === "UNIQUE");
1578
1647
  const isConstraintComposite = uniqueConstraints.every((uniqueConstraint) => {
1579
1648
  return dbConstraints.some((dbConstraint) => dbConstraint["constraint_type"] ===
@@ -1804,7 +1873,9 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1804
1873
  }
1805
1874
  const primaryColumns = table.columns.filter((column) => column.isPrimary);
1806
1875
  if (primaryColumns.length > 0) {
1807
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
1876
+ const primaryKeyName = primaryColumns[0].primaryKeyConstraintName
1877
+ ? primaryColumns[0].primaryKeyConstraintName
1878
+ : this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
1808
1879
  const columnNames = primaryColumns
1809
1880
  .map((column) => `"${column.name}"`)
1810
1881
  .join(", ");
@@ -1892,8 +1963,10 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1892
1963
  /**
1893
1964
  * Builds create primary key sql.
1894
1965
  */
1895
- createPrimaryKeySql(table, columnNames) {
1896
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
1966
+ createPrimaryKeySql(table, columnNames, constraintName) {
1967
+ const primaryKeyName = constraintName
1968
+ ? constraintName
1969
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
1897
1970
  const columnNamesString = columnNames
1898
1971
  .map((columnName) => `"${columnName}"`)
1899
1972
  .join(", ");
@@ -1903,8 +1976,13 @@ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1903
1976
  * Builds drop primary key sql.
1904
1977
  */
1905
1978
  dropPrimaryKeySql(table) {
1979
+ if (!table.primaryColumns.length)
1980
+ throw new error_1.TypeORMError(`Table ${table} has no primary keys.`);
1906
1981
  const columnNames = table.primaryColumns.map((column) => column.name);
1907
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
1982
+ const constraintName = table.primaryColumns[0].primaryKeyConstraintName;
1983
+ const primaryKeyName = constraintName
1984
+ ? constraintName
1985
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
1908
1986
  return new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${primaryKeyName}"`);
1909
1987
  }
1910
1988
  /**