typeorm 0.2.40-dev.ae858ad → 0.2.41-dev.15ad5ac

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 (203) hide show
  1. package/browser/cache/DbQueryResultCache.js +12 -3
  2. package/browser/cache/DbQueryResultCache.js.map +1 -1
  3. package/browser/decorator/columns/PrimaryGeneratedColumn.d.ts +1 -0
  4. package/browser/decorator/columns/PrimaryGeneratedColumn.js +1 -1
  5. package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  6. package/browser/decorator/options/ColumnCommonOptions.d.ts +1 -1
  7. package/browser/decorator/options/ColumnCommonOptions.js.map +1 -1
  8. package/browser/driver/Driver.d.ts +5 -0
  9. package/browser/driver/Driver.js.map +1 -1
  10. package/browser/driver/aurora-data-api/AuroraDataApiDriver.d.ts +4 -0
  11. package/browser/driver/aurora-data-api/AuroraDataApiDriver.js +4 -0
  12. package/browser/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
  13. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +33 -39
  14. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  15. package/browser/driver/cockroachdb/CockroachDriver.d.ts +4 -0
  16. package/browser/driver/cockroachdb/CockroachDriver.js +4 -0
  17. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  18. package/browser/driver/cockroachdb/CockroachQueryRunner.js +24 -30
  19. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  20. package/browser/driver/mongodb/MongoConnectionOptions.d.ts +4 -0
  21. package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  22. package/browser/driver/mongodb/MongoQueryRunner.d.ts +2 -0
  23. package/browser/driver/mongodb/MongoQueryRunner.js +3 -0
  24. package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
  25. package/browser/driver/mysql/MysqlDriver.d.ts +4 -0
  26. package/browser/driver/mysql/MysqlDriver.js +10 -3
  27. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  28. package/browser/driver/mysql/MysqlQueryRunner.js +37 -39
  29. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  30. package/browser/driver/oracle/OracleDriver.js +1 -1
  31. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  32. package/browser/driver/oracle/OracleQueryRunner.js +13 -24
  33. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  34. package/browser/driver/postgres/PostgresDriver.d.ts +5 -0
  35. package/browser/driver/postgres/PostgresDriver.js +20 -7
  36. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  37. package/browser/driver/postgres/PostgresQueryRunner.d.ts +5 -0
  38. package/browser/driver/postgres/PostgresQueryRunner.js +333 -143
  39. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  40. package/browser/driver/sap/SapQueryRunner.js +36 -42
  41. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  42. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +4 -0
  43. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -0
  44. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  45. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +8 -14
  46. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  47. package/browser/driver/sqlserver/SqlServerQueryRunner.js +31 -33
  48. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  49. package/browser/driver/types/MetadataTableType.d.ts +5 -0
  50. package/browser/driver/types/MetadataTableType.js +8 -0
  51. package/browser/driver/types/MetadataTableType.js.map +1 -0
  52. package/browser/driver/types/UpsertType.d.ts +1 -0
  53. package/browser/driver/types/UpsertType.js +3 -0
  54. package/browser/driver/types/UpsertType.js.map +1 -0
  55. package/browser/entity-manager/EntityManager.d.ts +2 -0
  56. package/browser/entity-manager/EntityManager.js +42 -1
  57. package/browser/entity-manager/EntityManager.js.map +1 -1
  58. package/browser/find-options/FindConditions.d.ts +6 -2
  59. package/browser/find-options/FindConditions.js.map +1 -1
  60. package/browser/find-options/FindTreeOptions.d.ts +5 -1
  61. package/browser/find-options/FindTreeOptions.js.map +1 -1
  62. package/browser/metadata/EntityMetadata.d.ts +4 -0
  63. package/browser/metadata/EntityMetadata.js +14 -0
  64. package/browser/metadata/EntityMetadata.js.map +1 -1
  65. package/browser/migration/MigrationExecutor.js +55 -48
  66. package/browser/migration/MigrationExecutor.js.map +1 -1
  67. package/browser/query-builder/InsertQueryBuilder.js +8 -2
  68. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  69. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  70. package/browser/query-builder/SelectQueryBuilder.js +4 -20
  71. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  72. package/browser/query-runner/BaseQueryRunner.d.ts +23 -0
  73. package/browser/query-runner/BaseQueryRunner.js +37 -0
  74. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  75. package/browser/query-runner/QueryRunner.d.ts +5 -0
  76. package/browser/query-runner/QueryRunner.js.map +1 -1
  77. package/browser/repository/BaseEntity.d.ts +7 -0
  78. package/browser/repository/BaseEntity.js +8 -0
  79. package/browser/repository/BaseEntity.js.map +1 -1
  80. package/browser/repository/FindTreesOptions.d.ts +9 -0
  81. package/browser/repository/FindTreesOptions.js +3 -0
  82. package/browser/repository/FindTreesOptions.js.map +1 -0
  83. package/browser/repository/Repository.d.ts +7 -0
  84. package/browser/repository/Repository.js +8 -0
  85. package/browser/repository/Repository.js.map +1 -1
  86. package/browser/repository/TreeRepository.d.ts +4 -1
  87. package/browser/repository/TreeRepository.js +8 -4
  88. package/browser/repository/TreeRepository.js.map +1 -1
  89. package/browser/repository/UpsertOptions.d.ts +6 -0
  90. package/browser/repository/UpsertOptions.js +3 -0
  91. package/browser/repository/UpsertOptions.js.map +1 -0
  92. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +5 -1
  93. package/browser/schema-builder/RdbmsSchemaBuilder.js +58 -49
  94. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  95. package/browser/schema-builder/options/TableColumnOptions.d.ts +1 -1
  96. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  97. package/browser/schema-builder/table/TableColumn.d.ts +1 -1
  98. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  99. package/browser/util/OrmUtils.d.ts +1 -0
  100. package/browser/util/OrmUtils.js +11 -0
  101. package/browser/util/OrmUtils.js.map +1 -1
  102. package/cache/DbQueryResultCache.js +12 -3
  103. package/cache/DbQueryResultCache.js.map +1 -1
  104. package/decorator/columns/PrimaryGeneratedColumn.d.ts +1 -0
  105. package/decorator/columns/PrimaryGeneratedColumn.js +1 -1
  106. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  107. package/decorator/options/ColumnCommonOptions.d.ts +1 -1
  108. package/decorator/options/ColumnCommonOptions.js.map +1 -1
  109. package/driver/Driver.d.ts +5 -0
  110. package/driver/Driver.js.map +1 -1
  111. package/driver/aurora-data-api/AuroraDataApiDriver.d.ts +4 -0
  112. package/driver/aurora-data-api/AuroraDataApiDriver.js +4 -0
  113. package/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
  114. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +33 -39
  115. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  116. package/driver/cockroachdb/CockroachDriver.d.ts +4 -0
  117. package/driver/cockroachdb/CockroachDriver.js +4 -0
  118. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  119. package/driver/cockroachdb/CockroachQueryRunner.js +24 -30
  120. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  121. package/driver/mongodb/MongoConnectionOptions.d.ts +4 -0
  122. package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  123. package/driver/mongodb/MongoQueryRunner.d.ts +2 -0
  124. package/driver/mongodb/MongoQueryRunner.js +3 -0
  125. package/driver/mongodb/MongoQueryRunner.js.map +1 -1
  126. package/driver/mysql/MysqlDriver.d.ts +4 -0
  127. package/driver/mysql/MysqlDriver.js +10 -3
  128. package/driver/mysql/MysqlDriver.js.map +1 -1
  129. package/driver/mysql/MysqlQueryRunner.js +37 -39
  130. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  131. package/driver/oracle/OracleDriver.js +1 -1
  132. package/driver/oracle/OracleDriver.js.map +1 -1
  133. package/driver/oracle/OracleQueryRunner.js +13 -24
  134. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  135. package/driver/postgres/PostgresDriver.d.ts +5 -0
  136. package/driver/postgres/PostgresDriver.js +20 -7
  137. package/driver/postgres/PostgresDriver.js.map +1 -1
  138. package/driver/postgres/PostgresQueryRunner.d.ts +5 -0
  139. package/driver/postgres/PostgresQueryRunner.js +333 -143
  140. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  141. package/driver/sap/SapQueryRunner.js +36 -42
  142. package/driver/sap/SapQueryRunner.js.map +1 -1
  143. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +4 -0
  144. package/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -0
  145. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  146. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +8 -14
  147. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  148. package/driver/sqlserver/SqlServerQueryRunner.js +31 -33
  149. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  150. package/driver/types/MetadataTableType.d.ts +5 -0
  151. package/driver/types/MetadataTableType.js +11 -0
  152. package/driver/types/MetadataTableType.js.map +1 -0
  153. package/driver/types/UpsertType.d.ts +1 -0
  154. package/driver/types/UpsertType.js +4 -0
  155. package/driver/types/UpsertType.js.map +1 -0
  156. package/entity-manager/EntityManager.d.ts +2 -0
  157. package/entity-manager/EntityManager.js +41 -0
  158. package/entity-manager/EntityManager.js.map +1 -1
  159. package/find-options/FindConditions.d.ts +6 -2
  160. package/find-options/FindConditions.js.map +1 -1
  161. package/find-options/FindTreeOptions.d.ts +5 -1
  162. package/find-options/FindTreeOptions.js.map +1 -1
  163. package/metadata/EntityMetadata.d.ts +4 -0
  164. package/metadata/EntityMetadata.js +14 -0
  165. package/metadata/EntityMetadata.js.map +1 -1
  166. package/migration/MigrationExecutor.js +55 -48
  167. package/migration/MigrationExecutor.js.map +1 -1
  168. package/package.json +1 -1
  169. package/query-builder/InsertQueryBuilder.js +11 -5
  170. package/query-builder/InsertQueryBuilder.js.map +1 -1
  171. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  172. package/query-builder/SelectQueryBuilder.js +4 -20
  173. package/query-builder/SelectQueryBuilder.js.map +1 -1
  174. package/query-runner/BaseQueryRunner.d.ts +23 -0
  175. package/query-runner/BaseQueryRunner.js +37 -0
  176. package/query-runner/BaseQueryRunner.js.map +1 -1
  177. package/query-runner/QueryRunner.d.ts +5 -0
  178. package/query-runner/QueryRunner.js.map +1 -1
  179. package/repository/BaseEntity.d.ts +7 -0
  180. package/repository/BaseEntity.js +8 -0
  181. package/repository/BaseEntity.js.map +1 -1
  182. package/repository/FindTreesOptions.d.ts +9 -0
  183. package/repository/FindTreesOptions.js +4 -0
  184. package/repository/FindTreesOptions.js.map +1 -0
  185. package/repository/Repository.d.ts +7 -0
  186. package/repository/Repository.js +8 -0
  187. package/repository/Repository.js.map +1 -1
  188. package/repository/TreeRepository.d.ts +4 -1
  189. package/repository/TreeRepository.js +7 -3
  190. package/repository/TreeRepository.js.map +1 -1
  191. package/repository/UpsertOptions.d.ts +6 -0
  192. package/repository/UpsertOptions.js +4 -0
  193. package/repository/UpsertOptions.js.map +1 -0
  194. package/schema-builder/RdbmsSchemaBuilder.d.ts +5 -1
  195. package/schema-builder/RdbmsSchemaBuilder.js +58 -49
  196. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  197. package/schema-builder/options/TableColumnOptions.d.ts +1 -1
  198. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  199. package/schema-builder/table/TableColumn.d.ts +1 -1
  200. package/schema-builder/table/TableColumn.js.map +1 -1
  201. package/util/OrmUtils.d.ts +1 -0
  202. package/util/OrmUtils.js +11 -0
  203. package/util/OrmUtils.js.map +1 -1
@@ -18,6 +18,7 @@ import { Query } from "../Query";
18
18
  import { VersionUtils } from "../../util/VersionUtils";
19
19
  import { TypeORMError } from "../../error";
20
20
  import { QueryResult } from "../../query-runner/QueryResult";
21
+ import { MetadataTableType } from "../types/MetadataTableType";
21
22
  /**
22
23
  * Runs queries on a single postgres database connection.
23
24
  */
@@ -219,23 +220,25 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
219
220
  if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)
220
221
  this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);
221
222
  result = new QueryResult();
222
- if (raw === null || raw === void 0 ? void 0 : raw.hasOwnProperty('rows')) {
223
- result.records = raw.rows;
224
- }
225
- if (raw === null || raw === void 0 ? void 0 : raw.hasOwnProperty('rowCount')) {
226
- result.affected = raw.rowCount;
227
- }
228
- switch (raw.command) {
229
- case "DELETE":
230
- case "UPDATE":
231
- // for UPDATE and DELETE query additionally return number of affected rows
232
- result.raw = [raw.rows, raw.rowCount];
233
- break;
234
- default:
235
- result.raw = raw.rows;
236
- }
237
- if (!useStructuredResult) {
238
- return [2 /*return*/, result.raw];
223
+ if (raw) {
224
+ if (raw.hasOwnProperty('rows')) {
225
+ result.records = raw.rows;
226
+ }
227
+ if (raw.hasOwnProperty('rowCount')) {
228
+ result.affected = raw.rowCount;
229
+ }
230
+ switch (raw.command) {
231
+ case "DELETE":
232
+ case "UPDATE":
233
+ // for UPDATE and DELETE query additionally return number of affected rows
234
+ result.raw = [raw.rows, raw.rowCount];
235
+ break;
236
+ default:
237
+ result.raw = raw.rows;
238
+ }
239
+ if (!useStructuredResult) {
240
+ return [2 /*return*/, result.raw];
241
+ }
239
242
  }
240
243
  return [2 /*return*/, result];
241
244
  case 4:
@@ -506,35 +509,35 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
506
509
  if (createForeignKeys === void 0) { createForeignKeys = true; }
507
510
  if (createIndices === void 0) { createIndices = true; }
508
511
  return __awaiter(this, void 0, void 0, function () {
509
- var isTableExist, upQueries, downQueries, enumColumns, createdEnumTypes, enumColumns_1, enumColumns_1_1, column, hasEnum, enumName, e_1_1;
510
- var e_1, _a;
512
+ var isTableExist, upQueries, downQueries, enumColumns, createdEnumTypes, enumColumns_1, enumColumns_1_1, column, hasEnum, enumName, e_1_1, generatedColumns, generatedColumns_1, generatedColumns_1_1, column, tableNameWithSchema, tableName, schema, insertQuery, deleteQuery, e_2_1;
513
+ var e_1, _a, e_2, _b;
511
514
  var _this = this;
512
- return __generator(this, function (_b) {
513
- switch (_b.label) {
515
+ return __generator(this, function (_c) {
516
+ switch (_c.label) {
514
517
  case 0:
515
518
  if (!ifNotExist) return [3 /*break*/, 2];
516
519
  return [4 /*yield*/, this.hasTable(table)];
517
520
  case 1:
518
- isTableExist = _b.sent();
521
+ isTableExist = _c.sent();
519
522
  if (isTableExist)
520
523
  return [2 /*return*/, Promise.resolve()];
521
- _b.label = 2;
524
+ _c.label = 2;
522
525
  case 2:
523
526
  upQueries = [];
524
527
  downQueries = [];
525
528
  enumColumns = table.columns.filter(function (column) { return column.type === "enum" || column.type === "simple-enum"; });
526
529
  createdEnumTypes = [];
527
- _b.label = 3;
530
+ _c.label = 3;
528
531
  case 3:
529
- _b.trys.push([3, 8, 9, 10]);
532
+ _c.trys.push([3, 8, 9, 10]);
530
533
  enumColumns_1 = __values(enumColumns), enumColumns_1_1 = enumColumns_1.next();
531
- _b.label = 4;
534
+ _c.label = 4;
532
535
  case 4:
533
536
  if (!!enumColumns_1_1.done) return [3 /*break*/, 7];
534
537
  column = enumColumns_1_1.value;
535
538
  return [4 /*yield*/, this.hasEnumType(table, column)];
536
539
  case 5:
537
- hasEnum = _b.sent();
540
+ hasEnum = _c.sent();
538
541
  enumName = this.buildEnumName(table, column);
539
542
  // if enum with the same "enumName" is defined more then once, me must prevent double creation
540
543
  if (!hasEnum && createdEnumTypes.indexOf(enumName) === -1) {
@@ -542,13 +545,13 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
542
545
  upQueries.push(this.createEnumTypeSql(table, column, enumName));
543
546
  downQueries.push(this.dropEnumTypeSql(table, column, enumName));
544
547
  }
545
- _b.label = 6;
548
+ _c.label = 6;
546
549
  case 6:
547
550
  enumColumns_1_1 = enumColumns_1.next();
548
551
  return [3 /*break*/, 4];
549
552
  case 7: return [3 /*break*/, 10];
550
553
  case 8:
551
- e_1_1 = _b.sent();
554
+ e_1_1 = _c.sent();
552
555
  e_1 = { error: e_1_1 };
553
556
  return [3 /*break*/, 10];
554
557
  case 9:
@@ -558,6 +561,54 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
558
561
  finally { if (e_1) throw e_1.error; }
559
562
  return [7 /*endfinally*/];
560
563
  case 10:
564
+ generatedColumns = table.columns.filter(function (column) { return column.generatedType === "STORED" && column.asExpression; });
565
+ _c.label = 11;
566
+ case 11:
567
+ _c.trys.push([11, 16, 17, 18]);
568
+ generatedColumns_1 = __values(generatedColumns), generatedColumns_1_1 = generatedColumns_1.next();
569
+ _c.label = 12;
570
+ case 12:
571
+ if (!!generatedColumns_1_1.done) return [3 /*break*/, 15];
572
+ column = generatedColumns_1_1.value;
573
+ return [4 /*yield*/, this.getTableNameWithSchema(table.name)];
574
+ case 13:
575
+ tableNameWithSchema = (_c.sent()).split('.');
576
+ tableName = tableNameWithSchema[1];
577
+ schema = tableNameWithSchema[0];
578
+ insertQuery = this.insertTypeormMetadataSql({
579
+ database: this.driver.database,
580
+ schema: schema,
581
+ table: tableName,
582
+ type: MetadataTableType.GENERATED_COLUMN,
583
+ name: column.name,
584
+ value: column.asExpression
585
+ });
586
+ deleteQuery = this.deleteTypeormMetadataSql({
587
+ database: this.driver.database,
588
+ schema: schema,
589
+ table: tableName,
590
+ type: MetadataTableType.GENERATED_COLUMN,
591
+ name: column.name
592
+ });
593
+ upQueries.push(deleteQuery);
594
+ upQueries.push(insertQuery);
595
+ downQueries.push(deleteQuery);
596
+ _c.label = 14;
597
+ case 14:
598
+ generatedColumns_1_1 = generatedColumns_1.next();
599
+ return [3 /*break*/, 12];
600
+ case 15: return [3 /*break*/, 18];
601
+ case 16:
602
+ e_2_1 = _c.sent();
603
+ e_2 = { error: e_2_1 };
604
+ return [3 /*break*/, 18];
605
+ case 17:
606
+ try {
607
+ if (generatedColumns_1_1 && !generatedColumns_1_1.done && (_b = generatedColumns_1.return)) _b.call(generatedColumns_1);
608
+ }
609
+ finally { if (e_2) throw e_2.error; }
610
+ return [7 /*endfinally*/];
611
+ case 18:
561
612
  upQueries.push(this.createTableSql(table, createForeignKeys));
562
613
  downQueries.push(this.dropTableSql(table));
563
614
  // if createForeignKeys is true, we must drop created foreign keys in down query.
@@ -574,8 +625,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
574
625
  });
575
626
  }
576
627
  return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
577
- case 11:
578
- _b.sent();
628
+ case 19:
629
+ _c.sent();
579
630
  return [2 /*return*/];
580
631
  }
581
632
  });
@@ -693,8 +744,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
693
744
  */
694
745
  PostgresQueryRunner.prototype.renameTable = function (oldTableOrName, newTableName) {
695
746
  return __awaiter(this, void 0, void 0, function () {
696
- var upQueries, downQueries, oldTable, _a, newTable, _b, schemaName, oldTableName, columnNames, oldPkName, newPkName, enumColumns, enumColumns_2, enumColumns_2_1, column, oldEnumType, e_2_1;
697
- var e_2, _c;
747
+ var upQueries, downQueries, oldTable, _a, newTable, _b, schemaName, oldTableName, columnNames, oldPkName, newPkName, enumColumns, enumColumns_2, enumColumns_2_1, column, oldEnumType, e_3_1;
748
+ var e_3, _c;
698
749
  var _this = this;
699
750
  return __generator(this, function (_d) {
700
751
  switch (_d.label) {
@@ -792,14 +843,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
792
843
  return [3 /*break*/, 5];
793
844
  case 8: return [3 /*break*/, 11];
794
845
  case 9:
795
- e_2_1 = _d.sent();
796
- e_2 = { error: e_2_1 };
846
+ e_3_1 = _d.sent();
847
+ e_3 = { error: e_3_1 };
797
848
  return [3 /*break*/, 11];
798
849
  case 10:
799
850
  try {
800
851
  if (enumColumns_2_1 && !enumColumns_2_1.done && (_c = enumColumns_2.return)) _c.call(enumColumns_2);
801
852
  }
802
- finally { if (e_2) throw e_2.error; }
853
+ finally { if (e_3) throw e_3.error; }
803
854
  return [7 /*endfinally*/];
804
855
  case 11: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
805
856
  case 12:
@@ -814,7 +865,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
814
865
  */
815
866
  PostgresQueryRunner.prototype.addColumn = function (tableOrName, column) {
816
867
  return __awaiter(this, void 0, void 0, function () {
817
- var table, _a, clonedTable, upQueries, downQueries, hasEnum, primaryColumns, pkName_1, columnNames_1, pkName, columnNames, columnIndex, uniqueConstraint;
868
+ var table, _a, clonedTable, upQueries, downQueries, hasEnum, primaryColumns, pkName_1, columnNames_1, pkName, columnNames, columnIndex, uniqueConstraint, tableNameWithSchema, tableName, schema, insertQuery, deleteQuery;
818
869
  return __generator(this, function (_b) {
819
870
  switch (_b.label) {
820
871
  case 0:
@@ -873,13 +924,39 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
873
924
  upQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " ADD CONSTRAINT \"" + uniqueConstraint.name + "\" UNIQUE (\"" + column.name + "\")"));
874
925
  downQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " DROP CONSTRAINT \"" + uniqueConstraint.name + "\""));
875
926
  }
927
+ if (!(column.generatedType === "STORED" && column.asExpression)) return [3 /*break*/, 7];
928
+ return [4 /*yield*/, this.getTableNameWithSchema(table.name)];
929
+ case 6:
930
+ tableNameWithSchema = (_b.sent()).split('.');
931
+ tableName = tableNameWithSchema[1];
932
+ schema = tableNameWithSchema[0];
933
+ insertQuery = this.insertTypeormMetadataSql({
934
+ database: this.driver.database,
935
+ schema: schema,
936
+ table: tableName,
937
+ type: MetadataTableType.GENERATED_COLUMN,
938
+ name: column.name,
939
+ value: column.asExpression
940
+ });
941
+ deleteQuery = this.deleteTypeormMetadataSql({
942
+ database: this.driver.database,
943
+ schema: schema,
944
+ table: tableName,
945
+ type: MetadataTableType.GENERATED_COLUMN,
946
+ name: column.name
947
+ });
948
+ upQueries.push(deleteQuery);
949
+ upQueries.push(insertQuery);
950
+ downQueries.push(deleteQuery);
951
+ _b.label = 7;
952
+ case 7:
876
953
  // create column's comment
877
954
  if (column.comment) {
878
955
  upQueries.push(new Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + column.name + "\" IS " + this.escapeComment(column.comment)));
879
956
  downQueries.push(new Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + column.name + "\" IS " + this.escapeComment(column.comment)));
880
957
  }
881
958
  return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
882
- case 6:
959
+ case 8:
883
960
  _b.sent();
884
961
  clonedTable.addColumn(column);
885
962
  this.replaceCachedTable(table, clonedTable);
@@ -893,8 +970,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
893
970
  */
894
971
  PostgresQueryRunner.prototype.addColumns = function (tableOrName, columns) {
895
972
  return __awaiter(this, void 0, void 0, function () {
896
- var columns_1, columns_1_1, column, e_3_1;
897
- var e_3, _a;
973
+ var columns_1, columns_1_1, column, e_4_1;
974
+ var e_4, _a;
898
975
  return __generator(this, function (_b) {
899
976
  switch (_b.label) {
900
977
  case 0:
@@ -913,14 +990,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
913
990
  return [3 /*break*/, 1];
914
991
  case 4: return [3 /*break*/, 7];
915
992
  case 5:
916
- e_3_1 = _b.sent();
917
- e_3 = { error: e_3_1 };
993
+ e_4_1 = _b.sent();
994
+ e_4 = { error: e_4_1 };
918
995
  return [3 /*break*/, 7];
919
996
  case 6:
920
997
  try {
921
998
  if (columns_1_1 && !columns_1_1.done && (_a = columns_1.return)) _a.call(columns_1);
922
999
  }
923
- finally { if (e_3) throw e_3.error; }
1000
+ finally { if (e_4) throw e_4.error; }
924
1001
  return [7 /*endfinally*/];
925
1002
  case 7: return [2 /*return*/];
926
1003
  }
@@ -965,7 +1042,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
965
1042
  */
966
1043
  PostgresQueryRunner.prototype.changeColumn = function (tableOrName, oldTableColumnOrName, newColumn) {
967
1044
  return __awaiter(this, void 0, void 0, function () {
968
- var table, _a, clonedTable, upQueries, downQueries, defaultValueChanged, oldColumn, oldEnumType, primaryColumns, columnNames, oldPkName, newPkName, sequencePath, sequenceName, newSequencePath, newSequenceName, up, down, oldTableColumn, arraySuffix, newEnumName, oldEnumName, oldEnumNameWithoutSchema, oldEnumNameWithSchema_old, oldEnumNameWithoutSchema_old, upType, downType, primaryColumns, pkName, columnNames, column, pkName, columnNames, primaryColumn, column, pkName, columnNames, uniqueConstraint, uniqueConstraint;
1045
+ var table, _a, clonedTable, upQueries, downQueries, defaultValueChanged, oldColumn, oldEnumType, primaryColumns, columnNames, oldPkName, newPkName, sequencePath, sequenceName, newSequencePath, newSequenceName, up, down, oldTableColumn, arraySuffix, newEnumName, oldEnumName, oldEnumNameWithoutSchema, oldEnumNameWithSchema_old, oldEnumNameWithoutSchema_old, upType, downType, primaryColumns, pkName, columnNames, column, pkName, columnNames, primaryColumn, column, pkName, columnNames, uniqueConstraint, uniqueConstraint, tableNameWithSchema, tableName, schema;
969
1046
  var _this = this;
970
1047
  return __generator(this, function (_b) {
971
1048
  switch (_b.label) {
@@ -988,7 +1065,11 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
988
1065
  : table.columns.find(function (column) { return column.name === oldTableColumnOrName; });
989
1066
  if (!oldColumn)
990
1067
  throw new TypeORMError("Column \"" + oldTableColumnOrName + "\" was not found in the \"" + table.name + "\" table.");
991
- if (!(oldColumn.type !== newColumn.type || oldColumn.length !== newColumn.length || newColumn.isArray !== oldColumn.isArray)) return [3 /*break*/, 6];
1068
+ if (!(oldColumn.type !== newColumn.type
1069
+ || oldColumn.length !== newColumn.length
1070
+ || newColumn.isArray !== oldColumn.isArray
1071
+ || (!oldColumn.generatedType && newColumn.generatedType === "STORED")
1072
+ || (oldColumn.asExpression !== newColumn.asExpression && newColumn.generatedType === "STORED"))) return [3 /*break*/, 6];
992
1073
  // To avoid data conversion, we just recreate column
993
1074
  return [4 /*yield*/, this.dropColumn(table, oldColumn)];
994
1075
  case 4:
@@ -999,7 +1080,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
999
1080
  _b.sent();
1000
1081
  // update cloned table
1001
1082
  clonedTable = table.clone();
1002
- return [3 /*break*/, 10];
1083
+ return [3 /*break*/, 11];
1003
1084
  case 6:
1004
1085
  if (!(oldColumn.name !== newColumn.name)) return [3 /*break*/, 9];
1005
1086
  // rename column
@@ -1185,7 +1266,9 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1185
1266
  downQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " ADD CONSTRAINT \"" + uniqueConstraint.name + "\" UNIQUE (\"" + newColumn.name + "\")"));
1186
1267
  }
1187
1268
  }
1188
- if (oldColumn.isGenerated !== newColumn.isGenerated && newColumn.generationStrategy !== "uuid") {
1269
+ if (oldColumn.isGenerated !== newColumn.isGenerated &&
1270
+ newColumn.generationStrategy !== "uuid" &&
1271
+ newColumn.generationStrategy !== "identity") {
1189
1272
  if (newColumn.isGenerated === true) {
1190
1273
  upQueries.push(new Query("CREATE SEQUENCE IF NOT EXISTS " + this.escapePath(this.buildSequencePath(table, newColumn)) + " OWNED BY " + this.escapePath(table) + ".\"" + newColumn.name + "\""));
1191
1274
  downQueries.push(new Query("DROP SEQUENCE " + this.escapePath(this.buildSequencePath(table, newColumn))));
@@ -1219,9 +1302,45 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1219
1302
  upQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " ALTER COLUMN \"" + newColumn.name + "\" TYPE " + this.driver.createFullType(newColumn)));
1220
1303
  downQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " ALTER COLUMN \"" + newColumn.name + "\" TYPE " + this.driver.createFullType(oldColumn)));
1221
1304
  }
1222
- _b.label = 10;
1223
- case 10: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
1224
- case 11:
1305
+ if (!(newColumn.generatedType !== oldColumn.generatedType)) return [3 /*break*/, 11];
1306
+ if (!(!newColumn.generatedType || newColumn.generatedType === "VIRTUAL")) return [3 /*break*/, 11];
1307
+ return [4 /*yield*/, this.getTableNameWithSchema(table.name)];
1308
+ case 10:
1309
+ tableNameWithSchema = (_b.sent()).split('.');
1310
+ tableName = tableNameWithSchema[1];
1311
+ schema = tableNameWithSchema[0];
1312
+ upQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " RENAME COLUMN \"" + oldColumn.name + "\" TO \"TEMP_OLD_" + oldColumn.name + "\""));
1313
+ upQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " ADD " + this.buildCreateColumnSql(table, newColumn)));
1314
+ upQueries.push(new Query("UPDATE " + this.escapePath(table) + " SET \"" + newColumn.name + "\" = \"TEMP_OLD_" + oldColumn.name + "\""));
1315
+ upQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " DROP COLUMN \"TEMP_OLD_" + oldColumn.name + "\""));
1316
+ upQueries.push(this.deleteTypeormMetadataSql({
1317
+ database: this.driver.database,
1318
+ schema: schema,
1319
+ table: tableName,
1320
+ type: MetadataTableType.GENERATED_COLUMN,
1321
+ name: oldColumn.name
1322
+ }));
1323
+ // However, we can't copy it back on downgrade. It needs to regenerate.
1324
+ downQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " DROP COLUMN \"" + newColumn.name + "\""));
1325
+ downQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " ADD " + this.buildCreateColumnSql(table, oldColumn)));
1326
+ downQueries.push(this.deleteTypeormMetadataSql({
1327
+ database: this.driver.database,
1328
+ schema: schema,
1329
+ table: tableName,
1330
+ type: MetadataTableType.GENERATED_COLUMN,
1331
+ name: newColumn.name
1332
+ }));
1333
+ downQueries.push(this.insertTypeormMetadataSql({
1334
+ database: this.driver.database,
1335
+ schema: schema,
1336
+ table: tableName,
1337
+ type: MetadataTableType.GENERATED_COLUMN,
1338
+ name: oldColumn.name,
1339
+ value: oldColumn.asExpression
1340
+ }));
1341
+ _b.label = 11;
1342
+ case 11: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
1343
+ case 12:
1225
1344
  _b.sent();
1226
1345
  this.replaceCachedTable(table, clonedTable);
1227
1346
  return [2 /*return*/];
@@ -1234,8 +1353,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1234
1353
  */
1235
1354
  PostgresQueryRunner.prototype.changeColumns = function (tableOrName, changedColumns) {
1236
1355
  return __awaiter(this, void 0, void 0, function () {
1237
- var changedColumns_1, changedColumns_1_1, _a, oldColumn, newColumn, e_4_1;
1238
- var e_4, _b;
1356
+ var changedColumns_1, changedColumns_1_1, _a, oldColumn, newColumn, e_5_1;
1357
+ var e_5, _b;
1239
1358
  return __generator(this, function (_c) {
1240
1359
  switch (_c.label) {
1241
1360
  case 0:
@@ -1254,14 +1373,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1254
1373
  return [3 /*break*/, 1];
1255
1374
  case 4: return [3 /*break*/, 7];
1256
1375
  case 5:
1257
- e_4_1 = _c.sent();
1258
- e_4 = { error: e_4_1 };
1376
+ e_5_1 = _c.sent();
1377
+ e_5 = { error: e_5_1 };
1259
1378
  return [3 /*break*/, 7];
1260
1379
  case 6:
1261
1380
  try {
1262
1381
  if (changedColumns_1_1 && !changedColumns_1_1.done && (_b = changedColumns_1.return)) _b.call(changedColumns_1);
1263
1382
  }
1264
- finally { if (e_4) throw e_4.error; }
1383
+ finally { if (e_5) throw e_5.error; }
1265
1384
  return [7 /*endfinally*/];
1266
1385
  case 7: return [2 /*return*/];
1267
1386
  }
@@ -1273,7 +1392,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1273
1392
  */
1274
1393
  PostgresQueryRunner.prototype.dropColumn = function (tableOrName, columnOrName) {
1275
1394
  return __awaiter(this, void 0, void 0, function () {
1276
- var table, _a, column, clonedTable, upQueries, downQueries, pkName, columnNames, tableColumn, pkName_2, columnNames_2, columnIndex, columnCheck, columnUnique, hasEnum, enumType, escapedEnumName;
1395
+ var table, _a, column, clonedTable, upQueries, downQueries, pkName, columnNames, tableColumn, pkName_2, columnNames_2, columnIndex, columnCheck, columnUnique, hasEnum, enumType, escapedEnumName, tableNameWithSchema, tableName, schema, insertQuery, deleteQuery;
1277
1396
  return __generator(this, function (_b) {
1278
1397
  switch (_b.label) {
1279
1398
  case 0:
@@ -1340,8 +1459,33 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1340
1459
  upQueries.push(this.dropEnumTypeSql(table, column, escapedEnumName));
1341
1460
  downQueries.push(this.createEnumTypeSql(table, column, escapedEnumName));
1342
1461
  _b.label = 6;
1343
- case 6: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
1462
+ case 6:
1463
+ if (!(column.generatedType === "STORED")) return [3 /*break*/, 8];
1464
+ return [4 /*yield*/, this.getTableNameWithSchema(table.name)];
1344
1465
  case 7:
1466
+ tableNameWithSchema = (_b.sent()).split('.');
1467
+ tableName = tableNameWithSchema[1];
1468
+ schema = tableNameWithSchema[0];
1469
+ insertQuery = this.deleteTypeormMetadataSql({
1470
+ database: this.driver.database,
1471
+ schema: schema,
1472
+ table: tableName,
1473
+ type: MetadataTableType.GENERATED_COLUMN,
1474
+ name: column.name
1475
+ });
1476
+ deleteQuery = this.insertTypeormMetadataSql({
1477
+ database: this.driver.database,
1478
+ schema: schema,
1479
+ table: tableName,
1480
+ type: MetadataTableType.GENERATED_COLUMN,
1481
+ name: column.name,
1482
+ value: column.asExpression
1483
+ });
1484
+ upQueries.push(insertQuery);
1485
+ downQueries.push(deleteQuery);
1486
+ _b.label = 8;
1487
+ case 8: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
1488
+ case 9:
1345
1489
  _b.sent();
1346
1490
  clonedTable.removeColumn(column);
1347
1491
  this.replaceCachedTable(table, clonedTable);
@@ -1355,8 +1499,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1355
1499
  */
1356
1500
  PostgresQueryRunner.prototype.dropColumns = function (tableOrName, columns) {
1357
1501
  return __awaiter(this, void 0, void 0, function () {
1358
- var columns_2, columns_2_1, column, e_5_1;
1359
- var e_5, _a;
1502
+ var columns_2, columns_2_1, column, e_6_1;
1503
+ var e_6, _a;
1360
1504
  return __generator(this, function (_b) {
1361
1505
  switch (_b.label) {
1362
1506
  case 0:
@@ -1375,14 +1519,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1375
1519
  return [3 /*break*/, 1];
1376
1520
  case 4: return [3 /*break*/, 7];
1377
1521
  case 5:
1378
- e_5_1 = _b.sent();
1379
- e_5 = { error: e_5_1 };
1522
+ e_6_1 = _b.sent();
1523
+ e_6 = { error: e_6_1 };
1380
1524
  return [3 /*break*/, 7];
1381
1525
  case 6:
1382
1526
  try {
1383
1527
  if (columns_2_1 && !columns_2_1.done && (_a = columns_2.return)) _a.call(columns_2);
1384
1528
  }
1385
- finally { if (e_5) throw e_5.error; }
1529
+ finally { if (e_6) throw e_6.error; }
1386
1530
  return [7 /*endfinally*/];
1387
1531
  case 7: return [2 /*return*/];
1388
1532
  }
@@ -1538,8 +1682,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1538
1682
  */
1539
1683
  PostgresQueryRunner.prototype.createUniqueConstraints = function (tableOrName, uniqueConstraints) {
1540
1684
  return __awaiter(this, void 0, void 0, function () {
1541
- var uniqueConstraints_1, uniqueConstraints_1_1, uniqueConstraint, e_6_1;
1542
- var e_6, _a;
1685
+ var uniqueConstraints_1, uniqueConstraints_1_1, uniqueConstraint, e_7_1;
1686
+ var e_7, _a;
1543
1687
  return __generator(this, function (_b) {
1544
1688
  switch (_b.label) {
1545
1689
  case 0:
@@ -1558,14 +1702,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1558
1702
  return [3 /*break*/, 1];
1559
1703
  case 4: return [3 /*break*/, 7];
1560
1704
  case 5:
1561
- e_6_1 = _b.sent();
1562
- e_6 = { error: e_6_1 };
1705
+ e_7_1 = _b.sent();
1706
+ e_7 = { error: e_7_1 };
1563
1707
  return [3 /*break*/, 7];
1564
1708
  case 6:
1565
1709
  try {
1566
1710
  if (uniqueConstraints_1_1 && !uniqueConstraints_1_1.done && (_a = uniqueConstraints_1.return)) _a.call(uniqueConstraints_1);
1567
1711
  }
1568
- finally { if (e_6) throw e_6.error; }
1712
+ finally { if (e_7) throw e_7.error; }
1569
1713
  return [7 /*endfinally*/];
1570
1714
  case 7: return [2 /*return*/];
1571
1715
  }
@@ -1609,8 +1753,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1609
1753
  */
1610
1754
  PostgresQueryRunner.prototype.dropUniqueConstraints = function (tableOrName, uniqueConstraints) {
1611
1755
  return __awaiter(this, void 0, void 0, function () {
1612
- var uniqueConstraints_2, uniqueConstraints_2_1, uniqueConstraint, e_7_1;
1613
- var e_7, _a;
1756
+ var uniqueConstraints_2, uniqueConstraints_2_1, uniqueConstraint, e_8_1;
1757
+ var e_8, _a;
1614
1758
  return __generator(this, function (_b) {
1615
1759
  switch (_b.label) {
1616
1760
  case 0:
@@ -1629,14 +1773,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1629
1773
  return [3 /*break*/, 1];
1630
1774
  case 4: return [3 /*break*/, 7];
1631
1775
  case 5:
1632
- e_7_1 = _b.sent();
1633
- e_7 = { error: e_7_1 };
1776
+ e_8_1 = _b.sent();
1777
+ e_8 = { error: e_8_1 };
1634
1778
  return [3 /*break*/, 7];
1635
1779
  case 6:
1636
1780
  try {
1637
1781
  if (uniqueConstraints_2_1 && !uniqueConstraints_2_1.done && (_a = uniqueConstraints_2.return)) _a.call(uniqueConstraints_2);
1638
1782
  }
1639
- finally { if (e_7) throw e_7.error; }
1783
+ finally { if (e_8) throw e_8.error; }
1640
1784
  return [7 /*endfinally*/];
1641
1785
  case 7: return [2 /*return*/];
1642
1786
  }
@@ -1884,8 +2028,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1884
2028
  */
1885
2029
  PostgresQueryRunner.prototype.createForeignKeys = function (tableOrName, foreignKeys) {
1886
2030
  return __awaiter(this, void 0, void 0, function () {
1887
- var foreignKeys_1, foreignKeys_1_1, foreignKey, e_8_1;
1888
- var e_8, _a;
2031
+ var foreignKeys_1, foreignKeys_1_1, foreignKey, e_9_1;
2032
+ var e_9, _a;
1889
2033
  return __generator(this, function (_b) {
1890
2034
  switch (_b.label) {
1891
2035
  case 0:
@@ -1904,14 +2048,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1904
2048
  return [3 /*break*/, 1];
1905
2049
  case 4: return [3 /*break*/, 7];
1906
2050
  case 5:
1907
- e_8_1 = _b.sent();
1908
- e_8 = { error: e_8_1 };
2051
+ e_9_1 = _b.sent();
2052
+ e_9 = { error: e_9_1 };
1909
2053
  return [3 /*break*/, 7];
1910
2054
  case 6:
1911
2055
  try {
1912
2056
  if (foreignKeys_1_1 && !foreignKeys_1_1.done && (_a = foreignKeys_1.return)) _a.call(foreignKeys_1);
1913
2057
  }
1914
- finally { if (e_8) throw e_8.error; }
2058
+ finally { if (e_9) throw e_9.error; }
1915
2059
  return [7 /*endfinally*/];
1916
2060
  case 7: return [2 /*return*/];
1917
2061
  }
@@ -1955,8 +2099,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1955
2099
  */
1956
2100
  PostgresQueryRunner.prototype.dropForeignKeys = function (tableOrName, foreignKeys) {
1957
2101
  return __awaiter(this, void 0, void 0, function () {
1958
- var foreignKeys_2, foreignKeys_2_1, foreignKey, e_9_1;
1959
- var e_9, _a;
2102
+ var foreignKeys_2, foreignKeys_2_1, foreignKey, e_10_1;
2103
+ var e_10, _a;
1960
2104
  return __generator(this, function (_b) {
1961
2105
  switch (_b.label) {
1962
2106
  case 0:
@@ -1975,14 +2119,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1975
2119
  return [3 /*break*/, 1];
1976
2120
  case 4: return [3 /*break*/, 7];
1977
2121
  case 5:
1978
- e_9_1 = _b.sent();
1979
- e_9 = { error: e_9_1 };
2122
+ e_10_1 = _b.sent();
2123
+ e_10 = { error: e_10_1 };
1980
2124
  return [3 /*break*/, 7];
1981
2125
  case 6:
1982
2126
  try {
1983
2127
  if (foreignKeys_2_1 && !foreignKeys_2_1.done && (_a = foreignKeys_2.return)) _a.call(foreignKeys_2);
1984
2128
  }
1985
- finally { if (e_9) throw e_9.error; }
2129
+ finally { if (e_10) throw e_10.error; }
1986
2130
  return [7 /*endfinally*/];
1987
2131
  case 7: return [2 /*return*/];
1988
2132
  }
@@ -2026,8 +2170,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2026
2170
  */
2027
2171
  PostgresQueryRunner.prototype.createIndices = function (tableOrName, indices) {
2028
2172
  return __awaiter(this, void 0, void 0, function () {
2029
- var indices_1, indices_1_1, index, e_10_1;
2030
- var e_10, _a;
2173
+ var indices_1, indices_1_1, index, e_11_1;
2174
+ var e_11, _a;
2031
2175
  return __generator(this, function (_b) {
2032
2176
  switch (_b.label) {
2033
2177
  case 0:
@@ -2046,14 +2190,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2046
2190
  return [3 /*break*/, 1];
2047
2191
  case 4: return [3 /*break*/, 7];
2048
2192
  case 5:
2049
- e_10_1 = _b.sent();
2050
- e_10 = { error: e_10_1 };
2193
+ e_11_1 = _b.sent();
2194
+ e_11 = { error: e_11_1 };
2051
2195
  return [3 /*break*/, 7];
2052
2196
  case 6:
2053
2197
  try {
2054
2198
  if (indices_1_1 && !indices_1_1.done && (_a = indices_1.return)) _a.call(indices_1);
2055
2199
  }
2056
- finally { if (e_10) throw e_10.error; }
2200
+ finally { if (e_11) throw e_11.error; }
2057
2201
  return [7 /*endfinally*/];
2058
2202
  case 7: return [2 /*return*/];
2059
2203
  }
@@ -2097,8 +2241,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2097
2241
  */
2098
2242
  PostgresQueryRunner.prototype.dropIndices = function (tableOrName, indices) {
2099
2243
  return __awaiter(this, void 0, void 0, function () {
2100
- var indices_2, indices_2_1, index, e_11_1;
2101
- var e_11, _a;
2244
+ var indices_2, indices_2_1, index, e_12_1;
2245
+ var e_12, _a;
2102
2246
  return __generator(this, function (_b) {
2103
2247
  switch (_b.label) {
2104
2248
  case 0:
@@ -2117,14 +2261,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2117
2261
  return [3 /*break*/, 1];
2118
2262
  case 4: return [3 /*break*/, 7];
2119
2263
  case 5:
2120
- e_11_1 = _b.sent();
2121
- e_11 = { error: e_11_1 };
2264
+ e_12_1 = _b.sent();
2265
+ e_12 = { error: e_12_1 };
2122
2266
  return [3 /*break*/, 7];
2123
2267
  case 6:
2124
2268
  try {
2125
2269
  if (indices_2_1 && !indices_2_1.done && (_a = indices_2.return)) _a.call(indices_2);
2126
2270
  }
2127
- finally { if (e_11) throw e_11.error; }
2271
+ finally { if (e_12) throw e_12.error; }
2128
2272
  return [7 /*endfinally*/];
2129
2273
  case 7: return [2 /*return*/];
2130
2274
  }
@@ -2268,7 +2412,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2268
2412
  query = "SELECT \"t\".* FROM " + this.escapePath(this.getTypeormMetadataTableName()) + " \"t\" " +
2269
2413
  "INNER JOIN \"pg_catalog\".\"pg_class\" \"c\" ON \"c\".\"relname\" = \"t\".\"name\" " +
2270
2414
  "INNER JOIN \"pg_namespace\" \"n\" ON \"n\".\"oid\" = \"c\".\"relnamespace\" AND \"n\".\"nspname\" = \"t\".\"schema\" " +
2271
- ("WHERE \"t\".\"type\" IN ('VIEW', 'MATERIALIZED_VIEW') " + (viewsCondition ? "AND (" + viewsCondition + ")" : ""));
2415
+ ("WHERE \"t\".\"type\" IN ('" + MetadataTableType.VIEW + "', '" + MetadataTableType.MATERIALIZED_VIEW + "') " + (viewsCondition ? "AND (" + viewsCondition + ")" : ""));
2272
2416
  return [4 /*yield*/, this.query(query)];
2273
2417
  case 4:
2274
2418
  dbViews = _a.sent();
@@ -2279,7 +2423,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2279
2423
  view.schema = dbView["schema"];
2280
2424
  view.name = _this.driver.buildTableName(dbView["name"], schema);
2281
2425
  view.expression = dbView["value"];
2282
- view.materialized = dbView["type"] === "MATERIALIZED_VIEW";
2426
+ view.materialized = dbView["type"] === MetadataTableType.MATERIALIZED_VIEW;
2283
2427
  return view;
2284
2428
  })];
2285
2429
  }
@@ -2430,7 +2574,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2430
2574
  return [4 /*yield*/, Promise.all(dbColumns
2431
2575
  .filter(function (dbColumn) { return (dbColumn["table_name"] === dbTable["table_name"] && dbColumn["table_schema"] === dbTable["table_schema"]); })
2432
2576
  .map(function (dbColumn) { return __awaiter(_this, void 0, void 0, function () {
2433
- var columnConstraints, tableColumn, name_1, builtEnumName, enumName, sql, results, type, geometryColumnSql, results, geographyColumnSql, results, length_1, match, uniqueConstraint, isConstraintComposite, serialDefaultName, serialDefaultPath, defaultWithoutQuotes;
2577
+ var columnConstraints, tableColumn, name_1, builtEnumName, enumName, sql, results, type, geometryColumnSql, results, geographyColumnSql, results, length_1, match, uniqueConstraints, isConstraintComposite, serialDefaultName, serialDefaultPath, defaultWithoutQuotes, asExpressionQuery, results;
2434
2578
  return __generator(this, function (_a) {
2435
2579
  switch (_a.label) {
2436
2580
  case 0:
@@ -2529,14 +2673,18 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2529
2673
  }
2530
2674
  tableColumn.isNullable = dbColumn["is_nullable"] === "YES";
2531
2675
  tableColumn.isPrimary = !!columnConstraints.find(function (constraint) { return constraint["constraint_type"] === "PRIMARY"; });
2532
- uniqueConstraint = columnConstraints.find(function (constraint) { return constraint["constraint_type"] === "UNIQUE"; });
2533
- isConstraintComposite = uniqueConstraint
2534
- ? !!dbConstraints.find(function (dbConstraint) { return dbConstraint["constraint_type"] === "UNIQUE"
2676
+ uniqueConstraints = columnConstraints.filter(function (constraint) { return constraint["constraint_type"] === "UNIQUE"; });
2677
+ isConstraintComposite = uniqueConstraints.every(function (uniqueConstraint) {
2678
+ return dbConstraints.some(function (dbConstraint) { return dbConstraint["constraint_type"] === "UNIQUE"
2535
2679
  && dbConstraint["constraint_name"] === uniqueConstraint["constraint_name"]
2536
- && dbConstraint["column_name"] !== dbColumn["column_name"]; })
2537
- : false;
2538
- tableColumn.isUnique = !!uniqueConstraint && !isConstraintComposite;
2539
- if (dbColumn["column_default"] !== null && dbColumn["column_default"] !== undefined) {
2680
+ && dbConstraint["column_name"] !== dbColumn["column_name"]; });
2681
+ });
2682
+ tableColumn.isUnique = uniqueConstraints.length > 0 && !isConstraintComposite;
2683
+ if (dbColumn.is_identity === "YES") { // Postgres 10+ Identity column
2684
+ tableColumn.isGenerated = true;
2685
+ tableColumn.generationStrategy = "identity";
2686
+ }
2687
+ else if (dbColumn["column_default"] !== null && dbColumn["column_default"] !== undefined) {
2540
2688
  serialDefaultName = "nextval('" + this.buildSequenceName(table, dbColumn["column_name"]) + "'::regclass)";
2541
2689
  serialDefaultPath = "nextval('" + this.buildSequencePath(table, dbColumn["column_name"]) + "'::regclass)";
2542
2690
  defaultWithoutQuotes = dbColumn["column_default"].replace(/"/g, "");
@@ -2552,10 +2700,30 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2552
2700
  tableColumn.default = dbColumn["column_default"];
2553
2701
  }
2554
2702
  else {
2555
- tableColumn.default = dbColumn["column_default"].replace(/::[\w\s\[\]\"]+/g, "");
2703
+ tableColumn.default = dbColumn["column_default"].replace(/::[\w\s\.\[\]\"]+/g, "");
2556
2704
  tableColumn.default = tableColumn.default.replace(/^(-?\d+)$/, "'$1'");
2557
2705
  }
2558
2706
  }
2707
+ if (!(dbColumn["is_generated"] === "ALWAYS" && dbColumn["generation_expression"])) return [3 /*break*/, 9];
2708
+ // In postgres there is no VIRTUAL generated column type
2709
+ tableColumn.generatedType = "STORED";
2710
+ asExpressionQuery = "SELECT * FROM \"typeorm_metadata\" "
2711
+ + (" WHERE \"table\" = '" + dbTable["table_name"] + "'")
2712
+ + (" AND \"name\" = '" + tableColumn.name + "'")
2713
+ + (" AND \"schema\" = '" + dbTable["table_schema"] + "'")
2714
+ + (" AND \"database\" = '" + this.driver.database + "'")
2715
+ + (" AND \"type\" = '" + MetadataTableType.GENERATED_COLUMN + "'");
2716
+ return [4 /*yield*/, this.query(asExpressionQuery)];
2717
+ case 8:
2718
+ results = _a.sent();
2719
+ if (results[0] && results[0].value) {
2720
+ tableColumn.asExpression = results[0].value;
2721
+ }
2722
+ else {
2723
+ tableColumn.asExpression = "";
2724
+ }
2725
+ _a.label = 9;
2726
+ case 9:
2559
2727
  tableColumn.comment = dbColumn["description"] ? dbColumn["description"] : undefined;
2560
2728
  if (dbColumn["character_set_name"])
2561
2729
  tableColumn.charset = dbColumn["character_set_name"];
@@ -2753,24 +2921,19 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2753
2921
  };
2754
2922
  PostgresQueryRunner.prototype.insertViewDefinitionSql = function (view) {
2755
2923
  return __awaiter(this, void 0, void 0, function () {
2756
- var currentSchema, _a, schema, name, type, expression, _b, query, parameters;
2757
- return __generator(this, function (_c) {
2758
- switch (_c.label) {
2924
+ var currentSchema, _a, schema, name, type, expression;
2925
+ return __generator(this, function (_b) {
2926
+ switch (_b.label) {
2759
2927
  case 0: return [4 /*yield*/, this.getCurrentSchema()];
2760
2928
  case 1:
2761
- currentSchema = _c.sent();
2929
+ currentSchema = _b.sent();
2762
2930
  _a = this.driver.parseTableName(view), schema = _a.schema, name = _a.tableName;
2763
2931
  if (!schema) {
2764
2932
  schema = currentSchema;
2765
2933
  }
2766
- type = view.materialized ? "MATERIALIZED_VIEW" : "VIEW";
2934
+ type = view.materialized ? MetadataTableType.MATERIALIZED_VIEW : MetadataTableType.VIEW;
2767
2935
  expression = typeof view.expression === "string" ? view.expression.trim() : view.expression(this.connection).getQuery();
2768
- _b = __read(this.connection.createQueryBuilder()
2769
- .insert()
2770
- .into(this.getTypeormMetadataTableName())
2771
- .values({ type: type, schema: schema, name: name, value: expression })
2772
- .getQueryAndParameters(), 2), query = _b[0], parameters = _b[1];
2773
- return [2 /*return*/, new Query(query, parameters)];
2936
+ return [2 /*return*/, this.insertTypeormMetadataSql({ type: type, schema: schema, name: name, value: expression })];
2774
2937
  }
2775
2938
  });
2776
2939
  });
@@ -2787,25 +2950,18 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2787
2950
  */
2788
2951
  PostgresQueryRunner.prototype.deleteViewDefinitionSql = function (view) {
2789
2952
  return __awaiter(this, void 0, void 0, function () {
2790
- var currentSchema, _a, schema, name, type, qb, _b, query, parameters;
2791
- return __generator(this, function (_c) {
2792
- switch (_c.label) {
2953
+ var currentSchema, _a, schema, name, type;
2954
+ return __generator(this, function (_b) {
2955
+ switch (_b.label) {
2793
2956
  case 0: return [4 /*yield*/, this.getCurrentSchema()];
2794
2957
  case 1:
2795
- currentSchema = _c.sent();
2958
+ currentSchema = _b.sent();
2796
2959
  _a = this.driver.parseTableName(view), schema = _a.schema, name = _a.tableName;
2797
2960
  if (!schema) {
2798
2961
  schema = currentSchema;
2799
2962
  }
2800
- type = view.materialized ? "MATERIALIZED_VIEW" : "VIEW";
2801
- qb = this.connection.createQueryBuilder();
2802
- _b = __read(qb.delete()
2803
- .from(this.getTypeormMetadataTableName())
2804
- .where(qb.escape("type") + " = :type", { type: type })
2805
- .andWhere(qb.escape("schema") + " = :schema", { schema: schema })
2806
- .andWhere(qb.escape("name") + " = :name", { name: name })
2807
- .getQueryAndParameters(), 2), query = _b[0], parameters = _b[1];
2808
- return [2 /*return*/, new Query(query, parameters)];
2963
+ type = view.materialized ? MetadataTableType.MATERIALIZED_VIEW : MetadataTableType.VIEW;
2964
+ return [2 /*return*/, this.deleteTypeormMetadataSql({ type: type, schema: schema, name: name })];
2809
2965
  }
2810
2966
  });
2811
2967
  });
@@ -3056,18 +3212,45 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
3056
3212
  }
3057
3213
  return "\"" + tableName + "\"";
3058
3214
  };
3215
+ /**
3216
+ * Get the table name with table schema
3217
+ * Note: Without ' or "
3218
+ */
3219
+ PostgresQueryRunner.prototype.getTableNameWithSchema = function (target) {
3220
+ return __awaiter(this, void 0, void 0, function () {
3221
+ var tableName, schemaResult, schema;
3222
+ return __generator(this, function (_a) {
3223
+ switch (_a.label) {
3224
+ case 0:
3225
+ tableName = target instanceof Table ? target.name : target;
3226
+ if (!(tableName.indexOf(".") === -1)) return [3 /*break*/, 2];
3227
+ return [4 /*yield*/, this.query("SELECT current_schema()")];
3228
+ case 1:
3229
+ schemaResult = _a.sent();
3230
+ schema = schemaResult[0]["current_schema"];
3231
+ return [2 /*return*/, schema + "." + tableName];
3232
+ case 2: return [2 /*return*/, tableName.split(".")[0] + "." + tableName.split(".")[1]];
3233
+ }
3234
+ });
3235
+ });
3236
+ };
3059
3237
  /**
3060
3238
  * Builds a query for create column.
3061
3239
  */
3062
3240
  PostgresQueryRunner.prototype.buildCreateColumnSql = function (table, column) {
3063
3241
  var c = "\"" + column.name + "\"";
3064
3242
  if (column.isGenerated === true && column.generationStrategy !== "uuid") {
3065
- if (column.type === "integer" || column.type === "int" || column.type === "int4")
3066
- c += " SERIAL";
3067
- if (column.type === "smallint" || column.type === "int2")
3068
- c += " SMALLSERIAL";
3069
- if (column.type === "bigint" || column.type === "int8")
3070
- c += " BIGSERIAL";
3243
+ if (column.generationStrategy === "identity") { // Postgres 10+ Identity generated column
3244
+ c += " " + column.type + " GENERATED BY DEFAULT AS IDENTITY";
3245
+ }
3246
+ else { // classic SERIAL primary column
3247
+ if (column.type === "integer" || column.type === "int" || column.type === "int4")
3248
+ c += " SERIAL";
3249
+ if (column.type === "smallint" || column.type === "int2")
3250
+ c += " SMALLSERIAL";
3251
+ if (column.type === "bigint" || column.type === "int8")
3252
+ c += " BIGSERIAL";
3253
+ }
3071
3254
  }
3072
3255
  if (column.type === "enum" || column.type === "simple-enum") {
3073
3256
  c += " " + this.buildEnumName(table, column);
@@ -3077,16 +3260,23 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
3077
3260
  else if (!column.isGenerated || column.type === "uuid") {
3078
3261
  c += " " + this.connection.driver.createFullType(column);
3079
3262
  }
3080
- if (column.charset)
3081
- c += " CHARACTER SET \"" + column.charset + "\"";
3082
- if (column.collation)
3083
- c += " COLLATE \"" + column.collation + "\"";
3084
- if (column.isNullable !== true)
3085
- c += " NOT NULL";
3086
- if (column.default !== undefined && column.default !== null)
3087
- c += " DEFAULT " + column.default;
3088
- if (column.isGenerated && column.generationStrategy === "uuid" && !column.default)
3089
- c += " DEFAULT " + this.driver.uuidGenerator;
3263
+ // CHARACTER SET, COLLATE, NOT NULL and DEFAULT do not exist on generated (virtual) columns
3264
+ // Also, postgres only supports the stored generated column type
3265
+ if (column.generatedType === "STORED" && column.asExpression) {
3266
+ c += " GENERATED ALWAYS AS (" + column.asExpression + ") STORED";
3267
+ }
3268
+ else {
3269
+ if (column.charset)
3270
+ c += " CHARACTER SET \"" + column.charset + "\"";
3271
+ if (column.collation)
3272
+ c += " COLLATE \"" + column.collation + "\"";
3273
+ if (column.isNullable !== true)
3274
+ c += " NOT NULL";
3275
+ if (column.default !== undefined && column.default !== null)
3276
+ c += " DEFAULT " + column.default;
3277
+ if (column.isGenerated && column.generationStrategy === "uuid" && !column.default)
3278
+ c += " DEFAULT " + this.driver.uuidGenerator;
3279
+ }
3090
3280
  return c;
3091
3281
  };
3092
3282
  /**