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
@@ -173,7 +173,7 @@ export declare class PostgresQueryRunner extends BaseQueryRunner implements Quer
173
173
  /**
174
174
  * Creates a new primary key.
175
175
  */
176
- createPrimaryKey(tableOrName: Table | string, columnNames: string[]): Promise<void>;
176
+ createPrimaryKey(tableOrName: Table | string, columnNames: string[], constraintName?: string): Promise<void>;
177
177
  /**
178
178
  * Updates composite primary keys.
179
179
  */
@@ -181,7 +181,7 @@ export declare class PostgresQueryRunner extends BaseQueryRunner implements Quer
181
181
  /**
182
182
  * Drops a primary key.
183
183
  */
184
- dropPrimaryKey(tableOrName: Table | string): Promise<void>;
184
+ dropPrimaryKey(tableOrName: Table | string, constraintName?: string): Promise<void>;
185
185
  /**
186
186
  * Creates new unique constraint.
187
187
  */
@@ -325,7 +325,7 @@ export declare class PostgresQueryRunner extends BaseQueryRunner implements Quer
325
325
  /**
326
326
  * Builds create primary key sql.
327
327
  */
328
- protected createPrimaryKeySql(table: Table, columnNames: string[]): Query;
328
+ protected createPrimaryKeySql(table: Table, columnNames: string[], constraintName?: string): Query;
329
329
  /**
330
330
  * Builds drop primary key sql.
331
331
  */
@@ -501,8 +501,9 @@ export class PostgresQueryRunner extends BaseQueryRunner {
501
501
  : newTableName;
502
502
  upQueries.push(new Query(`ALTER TABLE ${this.escapePath(oldTable)} RENAME TO "${newTableName}"`));
503
503
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME TO "${oldTableName}"`));
504
- // rename column primary key constraint
505
- if (newTable.primaryColumns.length > 0) {
504
+ // rename column primary key constraint if it has default constraint name
505
+ if (newTable.primaryColumns.length > 0 &&
506
+ !newTable.primaryColumns[0].primaryKeyConstraintName) {
506
507
  const columnNames = newTable.primaryColumns.map((column) => column.name);
507
508
  const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);
508
509
  const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);
@@ -524,6 +525,10 @@ export class PostgresQueryRunner extends BaseQueryRunner {
524
525
  });
525
526
  // rename unique constraints
526
527
  newTable.uniques.forEach((unique) => {
528
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
529
+ // Skip renaming if Unique has user defined constraint name
530
+ if (unique.name !== oldUniqueName)
531
+ return;
527
532
  // build new constraint name
528
533
  const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
529
534
  // build queries
@@ -534,6 +539,10 @@ export class PostgresQueryRunner extends BaseQueryRunner {
534
539
  });
535
540
  // rename index constraints
536
541
  newTable.indices.forEach((index) => {
542
+ const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
543
+ // Skip renaming if Index has user defined constraint name
544
+ if (index.name !== oldIndexName)
545
+ return;
537
546
  // build new constraint name
538
547
  const { schema } = this.driver.parseTableName(newTable);
539
548
  const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
@@ -551,6 +560,10 @@ export class PostgresQueryRunner extends BaseQueryRunner {
551
560
  });
552
561
  // rename foreign key constraints
553
562
  newTable.foreignKeys.forEach((foreignKey) => {
563
+ const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
564
+ // Skip renaming if foreign key has user defined constraint name
565
+ if (foreignKey.name !== oldForeignKeyName)
566
+ return;
554
567
  // build new constraint name
555
568
  const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
556
569
  // build queries
@@ -595,7 +608,9 @@ export class PostgresQueryRunner extends BaseQueryRunner {
595
608
  const primaryColumns = clonedTable.primaryColumns;
596
609
  // if table already have primary key, me must drop it and recreate again
597
610
  if (primaryColumns.length > 0) {
598
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
611
+ const pkName = primaryColumns[0].primaryKeyConstraintName
612
+ ? primaryColumns[0].primaryKeyConstraintName
613
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
599
614
  const columnNames = primaryColumns
600
615
  .map((column) => `"${column.name}"`)
601
616
  .join(", ");
@@ -603,7 +618,9 @@ export class PostgresQueryRunner extends BaseQueryRunner {
603
618
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
604
619
  }
605
620
  primaryColumns.push(column);
606
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
621
+ const pkName = primaryColumns[0].primaryKeyConstraintName
622
+ ? primaryColumns[0].primaryKeyConstraintName
623
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
607
624
  const columnNames = primaryColumns
608
625
  .map((column) => `"${column.name}"`)
609
626
  .join(", ");
@@ -730,7 +747,8 @@ export class PostgresQueryRunner extends BaseQueryRunner {
730
747
  downQueries.push(new Query(`ALTER TYPE ${this.buildEnumName(table, newColumn)} RENAME TO "${oldEnumType.name}"`));
731
748
  }
732
749
  // rename column primary key constraint
733
- if (oldColumn.isPrimary === true) {
750
+ if (oldColumn.isPrimary === true &&
751
+ !oldColumn.primaryKeyConstraintName) {
734
752
  const primaryColumns = clonedTable.primaryColumns;
735
753
  // build old primary constraint name
736
754
  const columnNames = primaryColumns.map((column) => column.name);
@@ -757,6 +775,10 @@ export class PostgresQueryRunner extends BaseQueryRunner {
757
775
  }
758
776
  // rename unique constraints
759
777
  clonedTable.findColumnUniques(oldColumn).forEach((unique) => {
778
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);
779
+ // Skip renaming if Unique has user defined constraint name
780
+ if (unique.name !== oldUniqueName)
781
+ return;
760
782
  // build new constraint name
761
783
  unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);
762
784
  unique.columnNames.push(newColumn.name);
@@ -769,6 +791,10 @@ export class PostgresQueryRunner extends BaseQueryRunner {
769
791
  });
770
792
  // rename index constraints
771
793
  clonedTable.findColumnIndices(oldColumn).forEach((index) => {
794
+ const oldIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);
795
+ // Skip renaming if Index has user defined constraint name
796
+ if (index.name !== oldIndexName)
797
+ return;
772
798
  // build new constraint name
773
799
  index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);
774
800
  index.columnNames.push(newColumn.name);
@@ -790,6 +816,10 @@ export class PostgresQueryRunner extends BaseQueryRunner {
790
816
  clonedTable
791
817
  .findColumnForeignKeys(oldColumn)
792
818
  .forEach((foreignKey) => {
819
+ const foreignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
820
+ // Skip renaming if foreign key has user defined constraint name
821
+ if (foreignKey.name !== foreignKeyName)
822
+ return;
793
823
  // build new constraint name
794
824
  foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);
795
825
  foreignKey.columnNames.push(newColumn.name);
@@ -875,7 +905,9 @@ export class PostgresQueryRunner extends BaseQueryRunner {
875
905
  const primaryColumns = clonedTable.primaryColumns;
876
906
  // if primary column state changed, we must always drop existed constraint.
877
907
  if (primaryColumns.length > 0) {
878
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
908
+ const pkName = primaryColumns[0].primaryKeyConstraintName
909
+ ? primaryColumns[0].primaryKeyConstraintName
910
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
879
911
  const columnNames = primaryColumns
880
912
  .map((column) => `"${column.name}"`)
881
913
  .join(", ");
@@ -887,7 +919,9 @@ export class PostgresQueryRunner extends BaseQueryRunner {
887
919
  // update column in table
888
920
  const column = clonedTable.columns.find((column) => column.name === newColumn.name);
889
921
  column.isPrimary = true;
890
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
922
+ const pkName = primaryColumns[0].primaryKeyConstraintName
923
+ ? primaryColumns[0].primaryKeyConstraintName
924
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
891
925
  const columnNames = primaryColumns
892
926
  .map((column) => `"${column.name}"`)
893
927
  .join(", ");
@@ -902,7 +936,10 @@ export class PostgresQueryRunner extends BaseQueryRunner {
902
936
  column.isPrimary = false;
903
937
  // if we have another primary keys, we must recreate constraint.
904
938
  if (primaryColumns.length > 0) {
905
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
939
+ const pkName = primaryColumns[0]
940
+ .primaryKeyConstraintName
941
+ ? primaryColumns[0].primaryKeyConstraintName
942
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
906
943
  const columnNames = primaryColumns
907
944
  .map((column) => `"${column.name}"`)
908
945
  .join(", ");
@@ -1066,7 +1103,9 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1066
1103
  const downQueries = [];
1067
1104
  // drop primary key constraint
1068
1105
  if (column.isPrimary) {
1069
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1106
+ const pkName = column.primaryKeyConstraintName
1107
+ ? column.primaryKeyConstraintName
1108
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1070
1109
  const columnNames = clonedTable.primaryColumns
1071
1110
  .map((primaryColumn) => `"${primaryColumn.name}"`)
1072
1111
  .join(", ");
@@ -1077,7 +1116,10 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1077
1116
  tableColumn.isPrimary = false;
1078
1117
  // if primary key have multiple columns, we must recreate it without dropped column
1079
1118
  if (clonedTable.primaryColumns.length > 0) {
1080
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1119
+ const pkName = clonedTable.primaryColumns[0]
1120
+ .primaryKeyConstraintName
1121
+ ? clonedTable.primaryColumns[0].primaryKeyConstraintName
1122
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1081
1123
  const columnNames = clonedTable.primaryColumns
1082
1124
  .map((primaryColumn) => `"${primaryColumn.name}"`)
1083
1125
  .join(", ");
@@ -1159,12 +1201,12 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1159
1201
  /**
1160
1202
  * Creates a new primary key.
1161
1203
  */
1162
- async createPrimaryKey(tableOrName, columnNames) {
1204
+ async createPrimaryKey(tableOrName, columnNames, constraintName) {
1163
1205
  const table = InstanceChecker.isTable(tableOrName)
1164
1206
  ? tableOrName
1165
1207
  : await this.getCachedTable(tableOrName);
1166
1208
  const clonedTable = table.clone();
1167
- const up = this.createPrimaryKeySql(table, columnNames);
1209
+ const up = this.createPrimaryKeySql(table, columnNames, constraintName);
1168
1210
  // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.
1169
1211
  clonedTable.columns.forEach((column) => {
1170
1212
  if (columnNames.find((columnName) => columnName === column.name))
@@ -1188,7 +1230,9 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1188
1230
  // if table already have primary columns, we must drop them.
1189
1231
  const primaryColumns = clonedTable.primaryColumns;
1190
1232
  if (primaryColumns.length > 0) {
1191
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
1233
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1234
+ ? primaryColumns[0].primaryKeyConstraintName
1235
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
1192
1236
  const columnNamesString = primaryColumns
1193
1237
  .map((column) => `"${column.name}"`)
1194
1238
  .join(", ");
@@ -1199,7 +1243,9 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1199
1243
  clonedTable.columns
1200
1244
  .filter((column) => columnNames.indexOf(column.name) !== -1)
1201
1245
  .forEach((column) => (column.isPrimary = true));
1202
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
1246
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1247
+ ? primaryColumns[0].primaryKeyConstraintName
1248
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
1203
1249
  const columnNamesString = columnNames
1204
1250
  .map((columnName) => `"${columnName}"`)
1205
1251
  .join(", ");
@@ -1211,12 +1257,12 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1211
1257
  /**
1212
1258
  * Drops a primary key.
1213
1259
  */
1214
- async dropPrimaryKey(tableOrName) {
1260
+ async dropPrimaryKey(tableOrName, constraintName) {
1215
1261
  const table = InstanceChecker.isTable(tableOrName)
1216
1262
  ? tableOrName
1217
1263
  : await this.getCachedTable(tableOrName);
1218
1264
  const up = this.dropPrimaryKeySql(table);
1219
- const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name));
1265
+ const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name), constraintName);
1220
1266
  await this.executeQueries(up, down);
1221
1267
  table.primaryColumns.forEach((column) => {
1222
1268
  column.isPrimary = false;
@@ -1838,7 +1884,30 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1838
1884
  }
1839
1885
  tableColumn.isNullable =
1840
1886
  dbColumn["is_nullable"] === "YES";
1841
- tableColumn.isPrimary = !!columnConstraints.find((constraint) => constraint["constraint_type"] === "PRIMARY");
1887
+ const primaryConstraint = columnConstraints.find((constraint) => constraint["constraint_type"] === "PRIMARY");
1888
+ if (primaryConstraint) {
1889
+ tableColumn.isPrimary = true;
1890
+ // find another columns involved in primary key constraint
1891
+ const anotherPrimaryConstraints = dbConstraints.filter((constraint) => constraint["table_name"] ===
1892
+ dbColumn["table_name"] &&
1893
+ constraint["table_schema"] ===
1894
+ dbColumn["table_schema"] &&
1895
+ constraint["column_name"] !==
1896
+ dbColumn["column_name"] &&
1897
+ constraint["constraint_type"] ===
1898
+ "PRIMARY");
1899
+ // collect all column names
1900
+ const columnNames = anotherPrimaryConstraints.map((constraint) => constraint["column_name"]);
1901
+ columnNames.push(dbColumn["column_name"]);
1902
+ // build default primary key constraint name
1903
+ const pkName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
1904
+ // if primary key has user-defined constraint name, write it in table column
1905
+ if (primaryConstraint["constraint_name"] !==
1906
+ pkName) {
1907
+ tableColumn.primaryKeyConstraintName =
1908
+ primaryConstraint["constraint_name"];
1909
+ }
1910
+ }
1842
1911
  const uniqueConstraints = columnConstraints.filter((constraint) => constraint["constraint_type"] === "UNIQUE");
1843
1912
  const isConstraintComposite = uniqueConstraints.every((uniqueConstraint) => {
1844
1913
  return dbConstraints.some((dbConstraint) => dbConstraint["constraint_type"] ===
@@ -2102,7 +2171,9 @@ export class PostgresQueryRunner extends BaseQueryRunner {
2102
2171
  }
2103
2172
  const primaryColumns = table.columns.filter((column) => column.isPrimary);
2104
2173
  if (primaryColumns.length > 0) {
2105
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
2174
+ const primaryKeyName = primaryColumns[0].primaryKeyConstraintName
2175
+ ? primaryColumns[0].primaryKeyConstraintName
2176
+ : this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
2106
2177
  const columnNames = primaryColumns
2107
2178
  .map((column) => `"${column.name}"`)
2108
2179
  .join(", ");
@@ -2248,8 +2319,10 @@ export class PostgresQueryRunner extends BaseQueryRunner {
2248
2319
  /**
2249
2320
  * Builds create primary key sql.
2250
2321
  */
2251
- createPrimaryKeySql(table, columnNames) {
2252
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
2322
+ createPrimaryKeySql(table, columnNames, constraintName) {
2323
+ const primaryKeyName = constraintName
2324
+ ? constraintName
2325
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
2253
2326
  const columnNamesString = columnNames
2254
2327
  .map((columnName) => `"${columnName}"`)
2255
2328
  .join(", ");
@@ -2259,8 +2332,13 @@ export class PostgresQueryRunner extends BaseQueryRunner {
2259
2332
  * Builds drop primary key sql.
2260
2333
  */
2261
2334
  dropPrimaryKeySql(table) {
2335
+ if (!table.primaryColumns.length)
2336
+ throw new TypeORMError(`Table ${table} has no primary keys.`);
2262
2337
  const columnNames = table.primaryColumns.map((column) => column.name);
2263
- const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
2338
+ const constraintName = table.primaryColumns[0].primaryKeyConstraintName;
2339
+ const primaryKeyName = constraintName
2340
+ ? constraintName
2341
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
2264
2342
  return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${primaryKeyName}"`);
2265
2343
  }
2266
2344
  /**