typeorm 0.3.6-dev.0418ebc → 0.3.6-dev.1b4cb00

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 (134) 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/EntitySchemaColumnOptions.d.ts +4 -0
  35. package/browser/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  36. package/browser/entity-schema/EntitySchemaTransformer.js +2 -0
  37. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  38. package/browser/metadata/ColumnMetadata.d.ts +8 -0
  39. package/browser/metadata/ColumnMetadata.js +8 -0
  40. package/browser/metadata/ColumnMetadata.js.map +1 -1
  41. package/browser/metadata/ForeignKeyMetadata.d.ts +7 -0
  42. package/browser/metadata/ForeignKeyMetadata.js +4 -1
  43. package/browser/metadata/ForeignKeyMetadata.js.map +1 -1
  44. package/browser/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  45. package/browser/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  46. package/browser/metadata-builder/EntityMetadataValidator.js +9 -0
  47. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  48. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
  49. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  50. package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  51. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  52. package/browser/query-builder/QueryBuilder.js +1 -3
  53. package/browser/query-builder/QueryBuilder.js.map +1 -1
  54. package/browser/query-runner/QueryRunner.d.ts +2 -2
  55. package/browser/query-runner/QueryRunner.js.map +1 -1
  56. package/browser/schema-builder/options/TableColumnOptions.d.ts +8 -0
  57. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  58. package/browser/schema-builder/table/TableColumn.d.ts +4 -0
  59. package/browser/schema-builder/table/TableColumn.js +2 -0
  60. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  61. package/browser/schema-builder/util/TableUtils.js +1 -0
  62. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  63. package/browser/util/escapeRegExp.d.ts +1 -0
  64. package/browser/util/escapeRegExp.js +6 -0
  65. package/browser/util/escapeRegExp.js.map +1 -0
  66. package/cache/RedisQueryResultCache.js +3 -0
  67. package/cache/RedisQueryResultCache.js.map +1 -1
  68. package/commands/InitCommand.js +1 -1
  69. package/commands/InitCommand.js.map +1 -1
  70. package/commands/MigrationGenerateCommand.js +3 -2
  71. package/commands/MigrationGenerateCommand.js.map +1 -1
  72. package/decorator/options/ColumnOptions.d.ts +8 -0
  73. package/decorator/options/ColumnOptions.js.map +1 -1
  74. package/decorator/options/JoinColumnOptions.d.ts +4 -0
  75. package/decorator/options/JoinColumnOptions.js.map +1 -1
  76. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  77. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  78. package/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  79. package/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  80. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  81. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  82. package/decorator/relations/JoinColumn.js +1 -0
  83. package/decorator/relations/JoinColumn.js.map +1 -1
  84. package/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  85. package/driver/cockroachdb/CockroachQueryRunner.js +100 -22
  86. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  87. package/driver/mysql/MysqlQueryRunner.js +16 -0
  88. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  89. package/driver/oracle/OracleQueryRunner.d.ts +3 -3
  90. package/driver/oracle/OracleQueryRunner.js +98 -21
  91. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  92. package/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  93. package/driver/postgres/PostgresQueryRunner.js +99 -21
  94. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  95. package/driver/sqlite-abstract/AbstractSqliteDriver.js +59 -15
  96. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  97. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +53 -12
  98. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  99. package/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  100. package/driver/sqlserver/SqlServerQueryRunner.js +100 -22
  101. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  102. package/entity-schema/EntitySchemaColumnOptions.d.ts +4 -0
  103. package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  104. package/entity-schema/EntitySchemaTransformer.js +2 -0
  105. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  106. package/metadata/ColumnMetadata.d.ts +8 -0
  107. package/metadata/ColumnMetadata.js +8 -0
  108. package/metadata/ColumnMetadata.js.map +1 -1
  109. package/metadata/ForeignKeyMetadata.d.ts +7 -0
  110. package/metadata/ForeignKeyMetadata.js +4 -1
  111. package/metadata/ForeignKeyMetadata.js.map +1 -1
  112. package/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  113. package/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  114. package/metadata-builder/EntityMetadataValidator.js +9 -0
  115. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  116. package/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
  117. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  118. package/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  119. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  120. package/package.json +1 -1
  121. package/query-builder/QueryBuilder.js +3 -5
  122. package/query-builder/QueryBuilder.js.map +1 -1
  123. package/query-runner/QueryRunner.d.ts +2 -2
  124. package/query-runner/QueryRunner.js.map +1 -1
  125. package/schema-builder/options/TableColumnOptions.d.ts +8 -0
  126. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  127. package/schema-builder/table/TableColumn.d.ts +4 -0
  128. package/schema-builder/table/TableColumn.js +2 -0
  129. package/schema-builder/table/TableColumn.js.map +1 -1
  130. package/schema-builder/util/TableUtils.js +1 -0
  131. package/schema-builder/util/TableUtils.js.map +1 -1
  132. package/util/escapeRegExp.d.ts +1 -0
  133. package/util/escapeRegExp.js +10 -0
  134. package/util/escapeRegExp.js.map +1 -0
@@ -162,7 +162,7 @@ export declare class SqlServerQueryRunner extends BaseQueryRunner implements Que
162
162
  /**
163
163
  * Creates a new primary key.
164
164
  */
165
- createPrimaryKey(tableOrName: Table | string, columnNames: string[]): Promise<void>;
165
+ createPrimaryKey(tableOrName: Table | string, columnNames: string[], constraintName?: string): Promise<void>;
166
166
  /**
167
167
  * Updates composite primary keys.
168
168
  */
@@ -170,7 +170,7 @@ export declare class SqlServerQueryRunner extends BaseQueryRunner implements Que
170
170
  /**
171
171
  * Drops a primary key.
172
172
  */
173
- dropPrimaryKey(tableOrName: Table | string): Promise<void>;
173
+ dropPrimaryKey(tableOrName: Table | string, constraintName?: string): Promise<void>;
174
174
  /**
175
175
  * Creates a new unique constraint.
176
176
  */
@@ -294,7 +294,7 @@ export declare class SqlServerQueryRunner extends BaseQueryRunner implements Que
294
294
  /**
295
295
  * Builds create primary key sql.
296
296
  */
297
- protected createPrimaryKeySql(table: Table, columnNames: string[]): Query;
297
+ protected createPrimaryKeySql(table: Table, columnNames: string[], constraintName?: string): Query;
298
298
  /**
299
299
  * Builds drop primary key sql.
300
300
  */
@@ -601,7 +601,8 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
601
601
  upQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(oldTable)}", "${newTableName}"`));
602
602
  downQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(newTable)}", "${oldTableName}"`));
603
603
  // rename primary key constraint
604
- if (newTable.primaryColumns.length > 0) {
604
+ if (newTable.primaryColumns.length > 0 &&
605
+ !newTable.primaryColumns[0].primaryKeyConstraintName) {
605
606
  const columnNames = newTable.primaryColumns.map((column) => column.name);
606
607
  const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);
607
608
  const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);
@@ -611,6 +612,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
611
612
  }
612
613
  // rename unique constraints
613
614
  newTable.uniques.forEach((unique) => {
615
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
616
+ // Skip renaming if Unique has user defined constraint name
617
+ if (unique.name !== oldUniqueName)
618
+ return;
614
619
  // build new constraint name
615
620
  const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
616
621
  // build queries
@@ -621,6 +626,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
621
626
  });
622
627
  // rename index constraints
623
628
  newTable.indices.forEach((index) => {
629
+ const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
630
+ // Skip renaming if Index has user defined constraint name
631
+ if (index.name !== oldIndexName)
632
+ return;
624
633
  // build new constraint name
625
634
  const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
626
635
  // build queries
@@ -631,6 +640,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
631
640
  });
632
641
  // rename foreign key constraints
633
642
  newTable.foreignKeys.forEach((foreignKey) => {
643
+ const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
644
+ // Skip renaming if foreign key has user defined constraint name
645
+ if (foreignKey.name !== oldForeignKeyName)
646
+ return;
634
647
  // build new constraint name
635
648
  const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
636
649
  // build queries
@@ -666,7 +679,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
666
679
  const primaryColumns = clonedTable.primaryColumns;
667
680
  // if table already have primary key, me must drop it and recreate again
668
681
  if (primaryColumns.length > 0) {
669
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
682
+ const pkName = primaryColumns[0].primaryKeyConstraintName
683
+ ? primaryColumns[0].primaryKeyConstraintName
684
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
670
685
  const columnNames = primaryColumns
671
686
  .map((column) => `"${column.name}"`)
672
687
  .join(", ");
@@ -674,7 +689,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
674
689
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
675
690
  }
676
691
  primaryColumns.push(column);
677
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
692
+ const pkName = primaryColumns[0].primaryKeyConstraintName
693
+ ? primaryColumns[0].primaryKeyConstraintName
694
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
678
695
  const columnNames = primaryColumns
679
696
  .map((column) => `"${column.name}"`)
680
697
  .join(", ");
@@ -812,7 +829,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
812
829
  // rename the column
813
830
  upQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(table)}.${oldColumn.name}", "${newColumn.name}"`));
814
831
  downQueries.push(new Query(`EXEC sp_rename "${this.getTablePath(table)}.${newColumn.name}", "${oldColumn.name}"`));
815
- if (oldColumn.isPrimary === true) {
832
+ // rename column primary key constraint
833
+ if (oldColumn.isPrimary === true &&
834
+ !oldColumn.primaryKeyConstraintName) {
816
835
  const primaryColumns = clonedTable.primaryColumns;
817
836
  // build old primary constraint name
818
837
  const columnNames = primaryColumns.map((column) => column.name);
@@ -828,6 +847,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
828
847
  }
829
848
  // rename index constraints
830
849
  clonedTable.findColumnIndices(oldColumn).forEach((index) => {
850
+ const oldIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);
851
+ // Skip renaming if Index has user defined constraint name
852
+ if (index.name !== oldIndexName)
853
+ return;
831
854
  // build new constraint name
832
855
  index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);
833
856
  index.columnNames.push(newColumn.name);
@@ -842,6 +865,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
842
865
  clonedTable
843
866
  .findColumnForeignKeys(oldColumn)
844
867
  .forEach((foreignKey) => {
868
+ const foreignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
869
+ // Skip renaming if foreign key has user defined constraint name
870
+ if (foreignKey.name !== foreignKeyName)
871
+ return;
845
872
  // build new constraint name
846
873
  foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);
847
874
  foreignKey.columnNames.push(newColumn.name);
@@ -866,6 +893,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
866
893
  });
867
894
  // rename unique constraints
868
895
  clonedTable.findColumnUniques(oldColumn).forEach((unique) => {
896
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);
897
+ // Skip renaming if Unique has user defined constraint name
898
+ if (unique.name !== oldUniqueName)
899
+ return;
869
900
  // build new constraint name
870
901
  unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);
871
902
  unique.columnNames.push(newColumn.name);
@@ -904,7 +935,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
904
935
  const primaryColumns = clonedTable.primaryColumns;
905
936
  // if primary column state changed, we must always drop existed constraint.
906
937
  if (primaryColumns.length > 0) {
907
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
938
+ const pkName = primaryColumns[0].primaryKeyConstraintName
939
+ ? primaryColumns[0].primaryKeyConstraintName
940
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
908
941
  const columnNames = primaryColumns
909
942
  .map((column) => `"${column.name}"`)
910
943
  .join(", ");
@@ -916,7 +949,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
916
949
  // update column in table
917
950
  const column = clonedTable.columns.find((column) => column.name === newColumn.name);
918
951
  column.isPrimary = true;
919
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
952
+ const pkName = primaryColumns[0].primaryKeyConstraintName
953
+ ? primaryColumns[0].primaryKeyConstraintName
954
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
920
955
  const columnNames = primaryColumns
921
956
  .map((column) => `"${column.name}"`)
922
957
  .join(", ");
@@ -931,7 +966,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
931
966
  column.isPrimary = false;
932
967
  // if we have another primary keys, we must recreate constraint.
933
968
  if (primaryColumns.length > 0) {
934
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
969
+ const pkName = primaryColumns[0]
970
+ .primaryKeyConstraintName
971
+ ? primaryColumns[0].primaryKeyConstraintName
972
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
935
973
  const columnNames = primaryColumns
936
974
  .map((column) => `"${column.name}"`)
937
975
  .join(", ");
@@ -1004,7 +1042,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1004
1042
  const downQueries = [];
1005
1043
  // drop primary key constraint
1006
1044
  if (column.isPrimary) {
1007
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1045
+ const pkName = column.primaryKeyConstraintName
1046
+ ? column.primaryKeyConstraintName
1047
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1008
1048
  const columnNames = clonedTable.primaryColumns
1009
1049
  .map((primaryColumn) => `"${primaryColumn.name}"`)
1010
1050
  .join(", ");
@@ -1015,7 +1055,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1015
1055
  tableColumn.isPrimary = false;
1016
1056
  // if primary key have multiple columns, we must recreate it without dropped column
1017
1057
  if (clonedTable.primaryColumns.length > 0) {
1018
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1058
+ const pkName = clonedTable.primaryColumns[0]
1059
+ .primaryKeyConstraintName
1060
+ ? clonedTable.primaryColumns[0].primaryKeyConstraintName
1061
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1019
1062
  const columnNames = clonedTable.primaryColumns
1020
1063
  .map((primaryColumn) => `"${primaryColumn.name}"`)
1021
1064
  .join(", ");
@@ -1094,12 +1137,12 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1094
1137
  /**
1095
1138
  * Creates a new primary key.
1096
1139
  */
1097
- async createPrimaryKey(tableOrName, columnNames) {
1140
+ async createPrimaryKey(tableOrName, columnNames, constraintName) {
1098
1141
  const table = InstanceChecker.isTable(tableOrName)
1099
1142
  ? tableOrName
1100
1143
  : await this.getCachedTable(tableOrName);
1101
1144
  const clonedTable = table.clone();
1102
- const up = this.createPrimaryKeySql(table, columnNames);
1145
+ const up = this.createPrimaryKeySql(table, columnNames, constraintName);
1103
1146
  // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.
1104
1147
  clonedTable.columns.forEach((column) => {
1105
1148
  if (columnNames.find((columnName) => columnName === column.name))
@@ -1123,7 +1166,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1123
1166
  // if table already have primary columns, we must drop them.
1124
1167
  const primaryColumns = clonedTable.primaryColumns;
1125
1168
  if (primaryColumns.length > 0) {
1126
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
1169
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1170
+ ? primaryColumns[0].primaryKeyConstraintName
1171
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
1127
1172
  const columnNamesString = primaryColumns
1128
1173
  .map((column) => `"${column.name}"`)
1129
1174
  .join(", ");
@@ -1134,7 +1179,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1134
1179
  clonedTable.columns
1135
1180
  .filter((column) => columnNames.indexOf(column.name) !== -1)
1136
1181
  .forEach((column) => (column.isPrimary = true));
1137
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
1182
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1183
+ ? primaryColumns[0].primaryKeyConstraintName
1184
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
1138
1185
  const columnNamesString = columnNames
1139
1186
  .map((columnName) => `"${columnName}"`)
1140
1187
  .join(", ");
@@ -1146,12 +1193,12 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1146
1193
  /**
1147
1194
  * Drops a primary key.
1148
1195
  */
1149
- async dropPrimaryKey(tableOrName) {
1196
+ async dropPrimaryKey(tableOrName, constraintName) {
1150
1197
  const table = InstanceChecker.isTable(tableOrName)
1151
1198
  ? tableOrName
1152
1199
  : await this.getCachedTable(tableOrName);
1153
1200
  const up = this.dropPrimaryKeySql(table);
1154
- const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name));
1201
+ const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name), constraintName);
1155
1202
  await this.executeQueries(up, down);
1156
1203
  table.primaryColumns.forEach((column) => {
1157
1204
  column.isPrimary = false;
@@ -1724,8 +1771,6 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1724
1771
  dbConstraint["COLUMN_NAME"] !==
1725
1772
  dbColumn["COLUMN_NAME"]);
1726
1773
  });
1727
- const isPrimary = !!columnConstraints.find((constraint) => constraint["CONSTRAINT_TYPE"] ===
1728
- "PRIMARY KEY");
1729
1774
  const isGenerated = !!dbIdentityColumns.find((column) => column["TABLE_NAME"] ===
1730
1775
  dbColumn["TABLE_NAME"] &&
1731
1776
  column["TABLE_SCHEMA"] ===
@@ -1786,6 +1831,33 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1786
1831
  }
1787
1832
  }
1788
1833
  }
1834
+ const primaryConstraint = columnConstraints.find((constraint) => constraint["CONSTRAINT_TYPE"] ===
1835
+ "PRIMARY KEY");
1836
+ if (primaryConstraint) {
1837
+ tableColumn.isPrimary = true;
1838
+ // find another columns involved in primary key constraint
1839
+ const anotherPrimaryConstraints = dbConstraints.filter((constraint) => constraint["TABLE_NAME"] ===
1840
+ dbColumn["TABLE_NAME"] &&
1841
+ constraint["TABLE_SCHEMA"] ===
1842
+ dbColumn["TABLE_SCHEMA"] &&
1843
+ constraint["TABLE_CATALOG"] ===
1844
+ dbColumn["TABLE_CATALOG"] &&
1845
+ constraint["COLUMN_NAME"] !==
1846
+ dbColumn["COLUMN_NAME"] &&
1847
+ constraint["CONSTRAINT_TYPE"] ===
1848
+ "PRIMARY KEY");
1849
+ // collect all column names
1850
+ const columnNames = anotherPrimaryConstraints.map((constraint) => constraint["COLUMN_NAME"]);
1851
+ columnNames.push(dbColumn["COLUMN_NAME"]);
1852
+ // build default primary key constraint name
1853
+ const pkName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
1854
+ // if primary key has user-defined constraint name, write it in table column
1855
+ if (primaryConstraint["CONSTRAINT_NAME"] !==
1856
+ pkName) {
1857
+ tableColumn.primaryKeyConstraintName =
1858
+ primaryConstraint["CONSTRAINT_NAME"];
1859
+ }
1860
+ }
1789
1861
  tableColumn.default =
1790
1862
  dbColumn["COLUMN_DEFAULT"] !== null &&
1791
1863
  dbColumn["COLUMN_DEFAULT"] !== undefined
@@ -1793,7 +1865,6 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
1793
1865
  : undefined;
1794
1866
  tableColumn.isNullable =
1795
1867
  dbColumn["IS_NULLABLE"] === "YES";
1796
- tableColumn.isPrimary = isPrimary;
1797
1868
  tableColumn.isUnique =
1798
1869
  uniqueConstraints.length > 0 &&
1799
1870
  !isConstraintComposite;
@@ -2000,7 +2071,9 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
2000
2071
  }
2001
2072
  const primaryColumns = table.columns.filter((column) => column.isPrimary);
2002
2073
  if (primaryColumns.length > 0) {
2003
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
2074
+ const primaryKeyName = primaryColumns[0].primaryKeyConstraintName
2075
+ ? primaryColumns[0].primaryKeyConstraintName
2076
+ : this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
2004
2077
  const columnNames = primaryColumns
2005
2078
  .map((column) => `"${column.name}"`)
2006
2079
  .join(", ");
@@ -2091,8 +2164,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
2091
2164
  /**
2092
2165
  * Builds create primary key sql.
2093
2166
  */
2094
- createPrimaryKeySql(table, columnNames) {
2095
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
2167
+ createPrimaryKeySql(table, columnNames, constraintName) {
2168
+ const primaryKeyName = constraintName
2169
+ ? constraintName
2170
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
2096
2171
  const columnNamesString = columnNames
2097
2172
  .map((columnName) => `"${columnName}"`)
2098
2173
  .join(", ");
@@ -2103,7 +2178,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
2103
2178
  */
2104
2179
  dropPrimaryKeySql(table) {
2105
2180
  const columnNames = table.primaryColumns.map((column) => column.name);
2106
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
2181
+ const constraintName = table.primaryColumns[0].primaryKeyConstraintName;
2182
+ const primaryKeyName = constraintName
2183
+ ? constraintName
2184
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
2107
2185
  return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${primaryKeyName}"`);
2108
2186
  }
2109
2187
  /**