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
@@ -21,6 +21,7 @@ var Query_1 = require("../Query");
21
21
  var VersionUtils_1 = require("../../util/VersionUtils");
22
22
  var error_1 = require("../../error");
23
23
  var QueryResult_1 = require("../../query-runner/QueryResult");
24
+ var MetadataTableType_1 = require("../types/MetadataTableType");
24
25
  /**
25
26
  * Runs queries on a single postgres database connection.
26
27
  */
@@ -222,23 +223,25 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
222
223
  if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)
223
224
  this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);
224
225
  result = new QueryResult_1.QueryResult();
225
- if (raw === null || raw === void 0 ? void 0 : raw.hasOwnProperty('rows')) {
226
- result.records = raw.rows;
227
- }
228
- if (raw === null || raw === void 0 ? void 0 : raw.hasOwnProperty('rowCount')) {
229
- result.affected = raw.rowCount;
230
- }
231
- switch (raw.command) {
232
- case "DELETE":
233
- case "UPDATE":
234
- // for UPDATE and DELETE query additionally return number of affected rows
235
- result.raw = [raw.rows, raw.rowCount];
236
- break;
237
- default:
238
- result.raw = raw.rows;
239
- }
240
- if (!useStructuredResult) {
241
- return [2 /*return*/, result.raw];
226
+ if (raw) {
227
+ if (raw.hasOwnProperty('rows')) {
228
+ result.records = raw.rows;
229
+ }
230
+ if (raw.hasOwnProperty('rowCount')) {
231
+ result.affected = raw.rowCount;
232
+ }
233
+ switch (raw.command) {
234
+ case "DELETE":
235
+ case "UPDATE":
236
+ // for UPDATE and DELETE query additionally return number of affected rows
237
+ result.raw = [raw.rows, raw.rowCount];
238
+ break;
239
+ default:
240
+ result.raw = raw.rows;
241
+ }
242
+ if (!useStructuredResult) {
243
+ return [2 /*return*/, result.raw];
244
+ }
242
245
  }
243
246
  return [2 /*return*/, result];
244
247
  case 4:
@@ -509,35 +512,35 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
509
512
  if (createForeignKeys === void 0) { createForeignKeys = true; }
510
513
  if (createIndices === void 0) { createIndices = true; }
511
514
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
512
- var isTableExist, upQueries, downQueries, enumColumns, createdEnumTypes, enumColumns_1, enumColumns_1_1, column, hasEnum, enumName, e_1_1;
513
- var e_1, _a;
515
+ 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;
516
+ var e_1, _a, e_2, _b;
514
517
  var _this = this;
515
- return (0, tslib_1.__generator)(this, function (_b) {
516
- switch (_b.label) {
518
+ return (0, tslib_1.__generator)(this, function (_c) {
519
+ switch (_c.label) {
517
520
  case 0:
518
521
  if (!ifNotExist) return [3 /*break*/, 2];
519
522
  return [4 /*yield*/, this.hasTable(table)];
520
523
  case 1:
521
- isTableExist = _b.sent();
524
+ isTableExist = _c.sent();
522
525
  if (isTableExist)
523
526
  return [2 /*return*/, Promise.resolve()];
524
- _b.label = 2;
527
+ _c.label = 2;
525
528
  case 2:
526
529
  upQueries = [];
527
530
  downQueries = [];
528
531
  enumColumns = table.columns.filter(function (column) { return column.type === "enum" || column.type === "simple-enum"; });
529
532
  createdEnumTypes = [];
530
- _b.label = 3;
533
+ _c.label = 3;
531
534
  case 3:
532
- _b.trys.push([3, 8, 9, 10]);
535
+ _c.trys.push([3, 8, 9, 10]);
533
536
  enumColumns_1 = (0, tslib_1.__values)(enumColumns), enumColumns_1_1 = enumColumns_1.next();
534
- _b.label = 4;
537
+ _c.label = 4;
535
538
  case 4:
536
539
  if (!!enumColumns_1_1.done) return [3 /*break*/, 7];
537
540
  column = enumColumns_1_1.value;
538
541
  return [4 /*yield*/, this.hasEnumType(table, column)];
539
542
  case 5:
540
- hasEnum = _b.sent();
543
+ hasEnum = _c.sent();
541
544
  enumName = this.buildEnumName(table, column);
542
545
  // if enum with the same "enumName" is defined more then once, me must prevent double creation
543
546
  if (!hasEnum && createdEnumTypes.indexOf(enumName) === -1) {
@@ -545,13 +548,13 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
545
548
  upQueries.push(this.createEnumTypeSql(table, column, enumName));
546
549
  downQueries.push(this.dropEnumTypeSql(table, column, enumName));
547
550
  }
548
- _b.label = 6;
551
+ _c.label = 6;
549
552
  case 6:
550
553
  enumColumns_1_1 = enumColumns_1.next();
551
554
  return [3 /*break*/, 4];
552
555
  case 7: return [3 /*break*/, 10];
553
556
  case 8:
554
- e_1_1 = _b.sent();
557
+ e_1_1 = _c.sent();
555
558
  e_1 = { error: e_1_1 };
556
559
  return [3 /*break*/, 10];
557
560
  case 9:
@@ -561,6 +564,54 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
561
564
  finally { if (e_1) throw e_1.error; }
562
565
  return [7 /*endfinally*/];
563
566
  case 10:
567
+ generatedColumns = table.columns.filter(function (column) { return column.generatedType === "STORED" && column.asExpression; });
568
+ _c.label = 11;
569
+ case 11:
570
+ _c.trys.push([11, 16, 17, 18]);
571
+ generatedColumns_1 = (0, tslib_1.__values)(generatedColumns), generatedColumns_1_1 = generatedColumns_1.next();
572
+ _c.label = 12;
573
+ case 12:
574
+ if (!!generatedColumns_1_1.done) return [3 /*break*/, 15];
575
+ column = generatedColumns_1_1.value;
576
+ return [4 /*yield*/, this.getTableNameWithSchema(table.name)];
577
+ case 13:
578
+ tableNameWithSchema = (_c.sent()).split('.');
579
+ tableName = tableNameWithSchema[1];
580
+ schema = tableNameWithSchema[0];
581
+ insertQuery = this.insertTypeormMetadataSql({
582
+ database: this.driver.database,
583
+ schema: schema,
584
+ table: tableName,
585
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
586
+ name: column.name,
587
+ value: column.asExpression
588
+ });
589
+ deleteQuery = this.deleteTypeormMetadataSql({
590
+ database: this.driver.database,
591
+ schema: schema,
592
+ table: tableName,
593
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
594
+ name: column.name
595
+ });
596
+ upQueries.push(deleteQuery);
597
+ upQueries.push(insertQuery);
598
+ downQueries.push(deleteQuery);
599
+ _c.label = 14;
600
+ case 14:
601
+ generatedColumns_1_1 = generatedColumns_1.next();
602
+ return [3 /*break*/, 12];
603
+ case 15: return [3 /*break*/, 18];
604
+ case 16:
605
+ e_2_1 = _c.sent();
606
+ e_2 = { error: e_2_1 };
607
+ return [3 /*break*/, 18];
608
+ case 17:
609
+ try {
610
+ if (generatedColumns_1_1 && !generatedColumns_1_1.done && (_b = generatedColumns_1.return)) _b.call(generatedColumns_1);
611
+ }
612
+ finally { if (e_2) throw e_2.error; }
613
+ return [7 /*endfinally*/];
614
+ case 18:
564
615
  upQueries.push(this.createTableSql(table, createForeignKeys));
565
616
  downQueries.push(this.dropTableSql(table));
566
617
  // if createForeignKeys is true, we must drop created foreign keys in down query.
@@ -577,8 +628,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
577
628
  });
578
629
  }
579
630
  return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
580
- case 11:
581
- _b.sent();
631
+ case 19:
632
+ _c.sent();
582
633
  return [2 /*return*/];
583
634
  }
584
635
  });
@@ -696,8 +747,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
696
747
  */
697
748
  PostgresQueryRunner.prototype.renameTable = function (oldTableOrName, newTableName) {
698
749
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
699
- var upQueries, downQueries, oldTable, _a, newTable, _b, schemaName, oldTableName, columnNames, oldPkName, newPkName, enumColumns, enumColumns_2, enumColumns_2_1, column, oldEnumType, e_2_1;
700
- var e_2, _c;
750
+ var upQueries, downQueries, oldTable, _a, newTable, _b, schemaName, oldTableName, columnNames, oldPkName, newPkName, enumColumns, enumColumns_2, enumColumns_2_1, column, oldEnumType, e_3_1;
751
+ var e_3, _c;
701
752
  var _this = this;
702
753
  return (0, tslib_1.__generator)(this, function (_d) {
703
754
  switch (_d.label) {
@@ -795,14 +846,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
795
846
  return [3 /*break*/, 5];
796
847
  case 8: return [3 /*break*/, 11];
797
848
  case 9:
798
- e_2_1 = _d.sent();
799
- e_2 = { error: e_2_1 };
849
+ e_3_1 = _d.sent();
850
+ e_3 = { error: e_3_1 };
800
851
  return [3 /*break*/, 11];
801
852
  case 10:
802
853
  try {
803
854
  if (enumColumns_2_1 && !enumColumns_2_1.done && (_c = enumColumns_2.return)) _c.call(enumColumns_2);
804
855
  }
805
- finally { if (e_2) throw e_2.error; }
856
+ finally { if (e_3) throw e_3.error; }
806
857
  return [7 /*endfinally*/];
807
858
  case 11: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
808
859
  case 12:
@@ -817,7 +868,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
817
868
  */
818
869
  PostgresQueryRunner.prototype.addColumn = function (tableOrName, column) {
819
870
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
820
- var table, _a, clonedTable, upQueries, downQueries, hasEnum, primaryColumns, pkName_1, columnNames_1, pkName, columnNames, columnIndex, uniqueConstraint;
871
+ var table, _a, clonedTable, upQueries, downQueries, hasEnum, primaryColumns, pkName_1, columnNames_1, pkName, columnNames, columnIndex, uniqueConstraint, tableNameWithSchema, tableName, schema, insertQuery, deleteQuery;
821
872
  return (0, tslib_1.__generator)(this, function (_b) {
822
873
  switch (_b.label) {
823
874
  case 0:
@@ -876,13 +927,39 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
876
927
  upQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(table) + " ADD CONSTRAINT \"" + uniqueConstraint.name + "\" UNIQUE (\"" + column.name + "\")"));
877
928
  downQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(table) + " DROP CONSTRAINT \"" + uniqueConstraint.name + "\""));
878
929
  }
930
+ if (!(column.generatedType === "STORED" && column.asExpression)) return [3 /*break*/, 7];
931
+ return [4 /*yield*/, this.getTableNameWithSchema(table.name)];
932
+ case 6:
933
+ tableNameWithSchema = (_b.sent()).split('.');
934
+ tableName = tableNameWithSchema[1];
935
+ schema = tableNameWithSchema[0];
936
+ insertQuery = this.insertTypeormMetadataSql({
937
+ database: this.driver.database,
938
+ schema: schema,
939
+ table: tableName,
940
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
941
+ name: column.name,
942
+ value: column.asExpression
943
+ });
944
+ deleteQuery = this.deleteTypeormMetadataSql({
945
+ database: this.driver.database,
946
+ schema: schema,
947
+ table: tableName,
948
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
949
+ name: column.name
950
+ });
951
+ upQueries.push(deleteQuery);
952
+ upQueries.push(insertQuery);
953
+ downQueries.push(deleteQuery);
954
+ _b.label = 7;
955
+ case 7:
879
956
  // create column's comment
880
957
  if (column.comment) {
881
958
  upQueries.push(new Query_1.Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + column.name + "\" IS " + this.escapeComment(column.comment)));
882
959
  downQueries.push(new Query_1.Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + column.name + "\" IS " + this.escapeComment(column.comment)));
883
960
  }
884
961
  return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
885
- case 6:
962
+ case 8:
886
963
  _b.sent();
887
964
  clonedTable.addColumn(column);
888
965
  this.replaceCachedTable(table, clonedTable);
@@ -896,8 +973,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
896
973
  */
897
974
  PostgresQueryRunner.prototype.addColumns = function (tableOrName, columns) {
898
975
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
899
- var columns_1, columns_1_1, column, e_3_1;
900
- var e_3, _a;
976
+ var columns_1, columns_1_1, column, e_4_1;
977
+ var e_4, _a;
901
978
  return (0, tslib_1.__generator)(this, function (_b) {
902
979
  switch (_b.label) {
903
980
  case 0:
@@ -916,14 +993,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
916
993
  return [3 /*break*/, 1];
917
994
  case 4: return [3 /*break*/, 7];
918
995
  case 5:
919
- e_3_1 = _b.sent();
920
- e_3 = { error: e_3_1 };
996
+ e_4_1 = _b.sent();
997
+ e_4 = { error: e_4_1 };
921
998
  return [3 /*break*/, 7];
922
999
  case 6:
923
1000
  try {
924
1001
  if (columns_1_1 && !columns_1_1.done && (_a = columns_1.return)) _a.call(columns_1);
925
1002
  }
926
- finally { if (e_3) throw e_3.error; }
1003
+ finally { if (e_4) throw e_4.error; }
927
1004
  return [7 /*endfinally*/];
928
1005
  case 7: return [2 /*return*/];
929
1006
  }
@@ -968,7 +1045,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
968
1045
  */
969
1046
  PostgresQueryRunner.prototype.changeColumn = function (tableOrName, oldTableColumnOrName, newColumn) {
970
1047
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
971
- 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;
1048
+ 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;
972
1049
  var _this = this;
973
1050
  return (0, tslib_1.__generator)(this, function (_b) {
974
1051
  switch (_b.label) {
@@ -991,7 +1068,11 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
991
1068
  : table.columns.find(function (column) { return column.name === oldTableColumnOrName; });
992
1069
  if (!oldColumn)
993
1070
  throw new error_1.TypeORMError("Column \"" + oldTableColumnOrName + "\" was not found in the \"" + table.name + "\" table.");
994
- if (!(oldColumn.type !== newColumn.type || oldColumn.length !== newColumn.length || newColumn.isArray !== oldColumn.isArray)) return [3 /*break*/, 6];
1071
+ if (!(oldColumn.type !== newColumn.type
1072
+ || oldColumn.length !== newColumn.length
1073
+ || newColumn.isArray !== oldColumn.isArray
1074
+ || (!oldColumn.generatedType && newColumn.generatedType === "STORED")
1075
+ || (oldColumn.asExpression !== newColumn.asExpression && newColumn.generatedType === "STORED"))) return [3 /*break*/, 6];
995
1076
  // To avoid data conversion, we just recreate column
996
1077
  return [4 /*yield*/, this.dropColumn(table, oldColumn)];
997
1078
  case 4:
@@ -1002,7 +1083,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1002
1083
  _b.sent();
1003
1084
  // update cloned table
1004
1085
  clonedTable = table.clone();
1005
- return [3 /*break*/, 10];
1086
+ return [3 /*break*/, 11];
1006
1087
  case 6:
1007
1088
  if (!(oldColumn.name !== newColumn.name)) return [3 /*break*/, 9];
1008
1089
  // rename column
@@ -1188,7 +1269,9 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1188
1269
  downQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(table) + " ADD CONSTRAINT \"" + uniqueConstraint.name + "\" UNIQUE (\"" + newColumn.name + "\")"));
1189
1270
  }
1190
1271
  }
1191
- if (oldColumn.isGenerated !== newColumn.isGenerated && newColumn.generationStrategy !== "uuid") {
1272
+ if (oldColumn.isGenerated !== newColumn.isGenerated &&
1273
+ newColumn.generationStrategy !== "uuid" &&
1274
+ newColumn.generationStrategy !== "identity") {
1192
1275
  if (newColumn.isGenerated === true) {
1193
1276
  upQueries.push(new Query_1.Query("CREATE SEQUENCE IF NOT EXISTS " + this.escapePath(this.buildSequencePath(table, newColumn)) + " OWNED BY " + this.escapePath(table) + ".\"" + newColumn.name + "\""));
1194
1277
  downQueries.push(new Query_1.Query("DROP SEQUENCE " + this.escapePath(this.buildSequencePath(table, newColumn))));
@@ -1222,9 +1305,45 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1222
1305
  upQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(table) + " ALTER COLUMN \"" + newColumn.name + "\" TYPE " + this.driver.createFullType(newColumn)));
1223
1306
  downQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(table) + " ALTER COLUMN \"" + newColumn.name + "\" TYPE " + this.driver.createFullType(oldColumn)));
1224
1307
  }
1225
- _b.label = 10;
1226
- case 10: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
1227
- case 11:
1308
+ if (!(newColumn.generatedType !== oldColumn.generatedType)) return [3 /*break*/, 11];
1309
+ if (!(!newColumn.generatedType || newColumn.generatedType === "VIRTUAL")) return [3 /*break*/, 11];
1310
+ return [4 /*yield*/, this.getTableNameWithSchema(table.name)];
1311
+ case 10:
1312
+ tableNameWithSchema = (_b.sent()).split('.');
1313
+ tableName = tableNameWithSchema[1];
1314
+ schema = tableNameWithSchema[0];
1315
+ upQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(table) + " RENAME COLUMN \"" + oldColumn.name + "\" TO \"TEMP_OLD_" + oldColumn.name + "\""));
1316
+ upQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(table) + " ADD " + this.buildCreateColumnSql(table, newColumn)));
1317
+ upQueries.push(new Query_1.Query("UPDATE " + this.escapePath(table) + " SET \"" + newColumn.name + "\" = \"TEMP_OLD_" + oldColumn.name + "\""));
1318
+ upQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(table) + " DROP COLUMN \"TEMP_OLD_" + oldColumn.name + "\""));
1319
+ upQueries.push(this.deleteTypeormMetadataSql({
1320
+ database: this.driver.database,
1321
+ schema: schema,
1322
+ table: tableName,
1323
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1324
+ name: oldColumn.name
1325
+ }));
1326
+ // However, we can't copy it back on downgrade. It needs to regenerate.
1327
+ downQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(table) + " DROP COLUMN \"" + newColumn.name + "\""));
1328
+ downQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(table) + " ADD " + this.buildCreateColumnSql(table, oldColumn)));
1329
+ downQueries.push(this.deleteTypeormMetadataSql({
1330
+ database: this.driver.database,
1331
+ schema: schema,
1332
+ table: tableName,
1333
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1334
+ name: newColumn.name
1335
+ }));
1336
+ downQueries.push(this.insertTypeormMetadataSql({
1337
+ database: this.driver.database,
1338
+ schema: schema,
1339
+ table: tableName,
1340
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1341
+ name: oldColumn.name,
1342
+ value: oldColumn.asExpression
1343
+ }));
1344
+ _b.label = 11;
1345
+ case 11: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
1346
+ case 12:
1228
1347
  _b.sent();
1229
1348
  this.replaceCachedTable(table, clonedTable);
1230
1349
  return [2 /*return*/];
@@ -1237,8 +1356,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1237
1356
  */
1238
1357
  PostgresQueryRunner.prototype.changeColumns = function (tableOrName, changedColumns) {
1239
1358
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1240
- var changedColumns_1, changedColumns_1_1, _a, oldColumn, newColumn, e_4_1;
1241
- var e_4, _b;
1359
+ var changedColumns_1, changedColumns_1_1, _a, oldColumn, newColumn, e_5_1;
1360
+ var e_5, _b;
1242
1361
  return (0, tslib_1.__generator)(this, function (_c) {
1243
1362
  switch (_c.label) {
1244
1363
  case 0:
@@ -1257,14 +1376,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1257
1376
  return [3 /*break*/, 1];
1258
1377
  case 4: return [3 /*break*/, 7];
1259
1378
  case 5:
1260
- e_4_1 = _c.sent();
1261
- e_4 = { error: e_4_1 };
1379
+ e_5_1 = _c.sent();
1380
+ e_5 = { error: e_5_1 };
1262
1381
  return [3 /*break*/, 7];
1263
1382
  case 6:
1264
1383
  try {
1265
1384
  if (changedColumns_1_1 && !changedColumns_1_1.done && (_b = changedColumns_1.return)) _b.call(changedColumns_1);
1266
1385
  }
1267
- finally { if (e_4) throw e_4.error; }
1386
+ finally { if (e_5) throw e_5.error; }
1268
1387
  return [7 /*endfinally*/];
1269
1388
  case 7: return [2 /*return*/];
1270
1389
  }
@@ -1276,7 +1395,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1276
1395
  */
1277
1396
  PostgresQueryRunner.prototype.dropColumn = function (tableOrName, columnOrName) {
1278
1397
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1279
- var table, _a, column, clonedTable, upQueries, downQueries, pkName, columnNames, tableColumn, pkName_2, columnNames_2, columnIndex, columnCheck, columnUnique, hasEnum, enumType, escapedEnumName;
1398
+ 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;
1280
1399
  return (0, tslib_1.__generator)(this, function (_b) {
1281
1400
  switch (_b.label) {
1282
1401
  case 0:
@@ -1343,8 +1462,33 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1343
1462
  upQueries.push(this.dropEnumTypeSql(table, column, escapedEnumName));
1344
1463
  downQueries.push(this.createEnumTypeSql(table, column, escapedEnumName));
1345
1464
  _b.label = 6;
1346
- case 6: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
1465
+ case 6:
1466
+ if (!(column.generatedType === "STORED")) return [3 /*break*/, 8];
1467
+ return [4 /*yield*/, this.getTableNameWithSchema(table.name)];
1347
1468
  case 7:
1469
+ tableNameWithSchema = (_b.sent()).split('.');
1470
+ tableName = tableNameWithSchema[1];
1471
+ schema = tableNameWithSchema[0];
1472
+ insertQuery = this.deleteTypeormMetadataSql({
1473
+ database: this.driver.database,
1474
+ schema: schema,
1475
+ table: tableName,
1476
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1477
+ name: column.name
1478
+ });
1479
+ deleteQuery = this.insertTypeormMetadataSql({
1480
+ database: this.driver.database,
1481
+ schema: schema,
1482
+ table: tableName,
1483
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1484
+ name: column.name,
1485
+ value: column.asExpression
1486
+ });
1487
+ upQueries.push(insertQuery);
1488
+ downQueries.push(deleteQuery);
1489
+ _b.label = 8;
1490
+ case 8: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
1491
+ case 9:
1348
1492
  _b.sent();
1349
1493
  clonedTable.removeColumn(column);
1350
1494
  this.replaceCachedTable(table, clonedTable);
@@ -1358,8 +1502,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1358
1502
  */
1359
1503
  PostgresQueryRunner.prototype.dropColumns = function (tableOrName, columns) {
1360
1504
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1361
- var columns_2, columns_2_1, column, e_5_1;
1362
- var e_5, _a;
1505
+ var columns_2, columns_2_1, column, e_6_1;
1506
+ var e_6, _a;
1363
1507
  return (0, tslib_1.__generator)(this, function (_b) {
1364
1508
  switch (_b.label) {
1365
1509
  case 0:
@@ -1378,14 +1522,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1378
1522
  return [3 /*break*/, 1];
1379
1523
  case 4: return [3 /*break*/, 7];
1380
1524
  case 5:
1381
- e_5_1 = _b.sent();
1382
- e_5 = { error: e_5_1 };
1525
+ e_6_1 = _b.sent();
1526
+ e_6 = { error: e_6_1 };
1383
1527
  return [3 /*break*/, 7];
1384
1528
  case 6:
1385
1529
  try {
1386
1530
  if (columns_2_1 && !columns_2_1.done && (_a = columns_2.return)) _a.call(columns_2);
1387
1531
  }
1388
- finally { if (e_5) throw e_5.error; }
1532
+ finally { if (e_6) throw e_6.error; }
1389
1533
  return [7 /*endfinally*/];
1390
1534
  case 7: return [2 /*return*/];
1391
1535
  }
@@ -1541,8 +1685,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1541
1685
  */
1542
1686
  PostgresQueryRunner.prototype.createUniqueConstraints = function (tableOrName, uniqueConstraints) {
1543
1687
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1544
- var uniqueConstraints_1, uniqueConstraints_1_1, uniqueConstraint, e_6_1;
1545
- var e_6, _a;
1688
+ var uniqueConstraints_1, uniqueConstraints_1_1, uniqueConstraint, e_7_1;
1689
+ var e_7, _a;
1546
1690
  return (0, tslib_1.__generator)(this, function (_b) {
1547
1691
  switch (_b.label) {
1548
1692
  case 0:
@@ -1561,14 +1705,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1561
1705
  return [3 /*break*/, 1];
1562
1706
  case 4: return [3 /*break*/, 7];
1563
1707
  case 5:
1564
- e_6_1 = _b.sent();
1565
- e_6 = { error: e_6_1 };
1708
+ e_7_1 = _b.sent();
1709
+ e_7 = { error: e_7_1 };
1566
1710
  return [3 /*break*/, 7];
1567
1711
  case 6:
1568
1712
  try {
1569
1713
  if (uniqueConstraints_1_1 && !uniqueConstraints_1_1.done && (_a = uniqueConstraints_1.return)) _a.call(uniqueConstraints_1);
1570
1714
  }
1571
- finally { if (e_6) throw e_6.error; }
1715
+ finally { if (e_7) throw e_7.error; }
1572
1716
  return [7 /*endfinally*/];
1573
1717
  case 7: return [2 /*return*/];
1574
1718
  }
@@ -1612,8 +1756,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1612
1756
  */
1613
1757
  PostgresQueryRunner.prototype.dropUniqueConstraints = function (tableOrName, uniqueConstraints) {
1614
1758
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1615
- var uniqueConstraints_2, uniqueConstraints_2_1, uniqueConstraint, e_7_1;
1616
- var e_7, _a;
1759
+ var uniqueConstraints_2, uniqueConstraints_2_1, uniqueConstraint, e_8_1;
1760
+ var e_8, _a;
1617
1761
  return (0, tslib_1.__generator)(this, function (_b) {
1618
1762
  switch (_b.label) {
1619
1763
  case 0:
@@ -1632,14 +1776,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1632
1776
  return [3 /*break*/, 1];
1633
1777
  case 4: return [3 /*break*/, 7];
1634
1778
  case 5:
1635
- e_7_1 = _b.sent();
1636
- e_7 = { error: e_7_1 };
1779
+ e_8_1 = _b.sent();
1780
+ e_8 = { error: e_8_1 };
1637
1781
  return [3 /*break*/, 7];
1638
1782
  case 6:
1639
1783
  try {
1640
1784
  if (uniqueConstraints_2_1 && !uniqueConstraints_2_1.done && (_a = uniqueConstraints_2.return)) _a.call(uniqueConstraints_2);
1641
1785
  }
1642
- finally { if (e_7) throw e_7.error; }
1786
+ finally { if (e_8) throw e_8.error; }
1643
1787
  return [7 /*endfinally*/];
1644
1788
  case 7: return [2 /*return*/];
1645
1789
  }
@@ -1887,8 +2031,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1887
2031
  */
1888
2032
  PostgresQueryRunner.prototype.createForeignKeys = function (tableOrName, foreignKeys) {
1889
2033
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1890
- var foreignKeys_1, foreignKeys_1_1, foreignKey, e_8_1;
1891
- var e_8, _a;
2034
+ var foreignKeys_1, foreignKeys_1_1, foreignKey, e_9_1;
2035
+ var e_9, _a;
1892
2036
  return (0, tslib_1.__generator)(this, function (_b) {
1893
2037
  switch (_b.label) {
1894
2038
  case 0:
@@ -1907,14 +2051,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1907
2051
  return [3 /*break*/, 1];
1908
2052
  case 4: return [3 /*break*/, 7];
1909
2053
  case 5:
1910
- e_8_1 = _b.sent();
1911
- e_8 = { error: e_8_1 };
2054
+ e_9_1 = _b.sent();
2055
+ e_9 = { error: e_9_1 };
1912
2056
  return [3 /*break*/, 7];
1913
2057
  case 6:
1914
2058
  try {
1915
2059
  if (foreignKeys_1_1 && !foreignKeys_1_1.done && (_a = foreignKeys_1.return)) _a.call(foreignKeys_1);
1916
2060
  }
1917
- finally { if (e_8) throw e_8.error; }
2061
+ finally { if (e_9) throw e_9.error; }
1918
2062
  return [7 /*endfinally*/];
1919
2063
  case 7: return [2 /*return*/];
1920
2064
  }
@@ -1958,8 +2102,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1958
2102
  */
1959
2103
  PostgresQueryRunner.prototype.dropForeignKeys = function (tableOrName, foreignKeys) {
1960
2104
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1961
- var foreignKeys_2, foreignKeys_2_1, foreignKey, e_9_1;
1962
- var e_9, _a;
2105
+ var foreignKeys_2, foreignKeys_2_1, foreignKey, e_10_1;
2106
+ var e_10, _a;
1963
2107
  return (0, tslib_1.__generator)(this, function (_b) {
1964
2108
  switch (_b.label) {
1965
2109
  case 0:
@@ -1978,14 +2122,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
1978
2122
  return [3 /*break*/, 1];
1979
2123
  case 4: return [3 /*break*/, 7];
1980
2124
  case 5:
1981
- e_9_1 = _b.sent();
1982
- e_9 = { error: e_9_1 };
2125
+ e_10_1 = _b.sent();
2126
+ e_10 = { error: e_10_1 };
1983
2127
  return [3 /*break*/, 7];
1984
2128
  case 6:
1985
2129
  try {
1986
2130
  if (foreignKeys_2_1 && !foreignKeys_2_1.done && (_a = foreignKeys_2.return)) _a.call(foreignKeys_2);
1987
2131
  }
1988
- finally { if (e_9) throw e_9.error; }
2132
+ finally { if (e_10) throw e_10.error; }
1989
2133
  return [7 /*endfinally*/];
1990
2134
  case 7: return [2 /*return*/];
1991
2135
  }
@@ -2029,8 +2173,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2029
2173
  */
2030
2174
  PostgresQueryRunner.prototype.createIndices = function (tableOrName, indices) {
2031
2175
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
2032
- var indices_1, indices_1_1, index, e_10_1;
2033
- var e_10, _a;
2176
+ var indices_1, indices_1_1, index, e_11_1;
2177
+ var e_11, _a;
2034
2178
  return (0, tslib_1.__generator)(this, function (_b) {
2035
2179
  switch (_b.label) {
2036
2180
  case 0:
@@ -2049,14 +2193,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2049
2193
  return [3 /*break*/, 1];
2050
2194
  case 4: return [3 /*break*/, 7];
2051
2195
  case 5:
2052
- e_10_1 = _b.sent();
2053
- e_10 = { error: e_10_1 };
2196
+ e_11_1 = _b.sent();
2197
+ e_11 = { error: e_11_1 };
2054
2198
  return [3 /*break*/, 7];
2055
2199
  case 6:
2056
2200
  try {
2057
2201
  if (indices_1_1 && !indices_1_1.done && (_a = indices_1.return)) _a.call(indices_1);
2058
2202
  }
2059
- finally { if (e_10) throw e_10.error; }
2203
+ finally { if (e_11) throw e_11.error; }
2060
2204
  return [7 /*endfinally*/];
2061
2205
  case 7: return [2 /*return*/];
2062
2206
  }
@@ -2100,8 +2244,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2100
2244
  */
2101
2245
  PostgresQueryRunner.prototype.dropIndices = function (tableOrName, indices) {
2102
2246
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
2103
- var indices_2, indices_2_1, index, e_11_1;
2104
- var e_11, _a;
2247
+ var indices_2, indices_2_1, index, e_12_1;
2248
+ var e_12, _a;
2105
2249
  return (0, tslib_1.__generator)(this, function (_b) {
2106
2250
  switch (_b.label) {
2107
2251
  case 0:
@@ -2120,14 +2264,14 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2120
2264
  return [3 /*break*/, 1];
2121
2265
  case 4: return [3 /*break*/, 7];
2122
2266
  case 5:
2123
- e_11_1 = _b.sent();
2124
- e_11 = { error: e_11_1 };
2267
+ e_12_1 = _b.sent();
2268
+ e_12 = { error: e_12_1 };
2125
2269
  return [3 /*break*/, 7];
2126
2270
  case 6:
2127
2271
  try {
2128
2272
  if (indices_2_1 && !indices_2_1.done && (_a = indices_2.return)) _a.call(indices_2);
2129
2273
  }
2130
- finally { if (e_11) throw e_11.error; }
2274
+ finally { if (e_12) throw e_12.error; }
2131
2275
  return [7 /*endfinally*/];
2132
2276
  case 7: return [2 /*return*/];
2133
2277
  }
@@ -2271,7 +2415,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2271
2415
  query = "SELECT \"t\".* FROM " + this.escapePath(this.getTypeormMetadataTableName()) + " \"t\" " +
2272
2416
  "INNER JOIN \"pg_catalog\".\"pg_class\" \"c\" ON \"c\".\"relname\" = \"t\".\"name\" " +
2273
2417
  "INNER JOIN \"pg_namespace\" \"n\" ON \"n\".\"oid\" = \"c\".\"relnamespace\" AND \"n\".\"nspname\" = \"t\".\"schema\" " +
2274
- ("WHERE \"t\".\"type\" IN ('VIEW', 'MATERIALIZED_VIEW') " + (viewsCondition ? "AND (" + viewsCondition + ")" : ""));
2418
+ ("WHERE \"t\".\"type\" IN ('" + MetadataTableType_1.MetadataTableType.VIEW + "', '" + MetadataTableType_1.MetadataTableType.MATERIALIZED_VIEW + "') " + (viewsCondition ? "AND (" + viewsCondition + ")" : ""));
2275
2419
  return [4 /*yield*/, this.query(query)];
2276
2420
  case 4:
2277
2421
  dbViews = _a.sent();
@@ -2282,7 +2426,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2282
2426
  view.schema = dbView["schema"];
2283
2427
  view.name = _this.driver.buildTableName(dbView["name"], schema);
2284
2428
  view.expression = dbView["value"];
2285
- view.materialized = dbView["type"] === "MATERIALIZED_VIEW";
2429
+ view.materialized = dbView["type"] === MetadataTableType_1.MetadataTableType.MATERIALIZED_VIEW;
2286
2430
  return view;
2287
2431
  })];
2288
2432
  }
@@ -2433,7 +2577,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2433
2577
  return [4 /*yield*/, Promise.all(dbColumns
2434
2578
  .filter(function (dbColumn) { return (dbColumn["table_name"] === dbTable["table_name"] && dbColumn["table_schema"] === dbTable["table_schema"]); })
2435
2579
  .map(function (dbColumn) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
2436
- var columnConstraints, tableColumn, name, builtEnumName, enumName, sql, results, type, geometryColumnSql, results, geographyColumnSql, results, length, match, uniqueConstraint, isConstraintComposite, serialDefaultName, serialDefaultPath, defaultWithoutQuotes;
2580
+ var columnConstraints, tableColumn, name, builtEnumName, enumName, sql, results, type, geometryColumnSql, results, geographyColumnSql, results, length, match, uniqueConstraints, isConstraintComposite, serialDefaultName, serialDefaultPath, defaultWithoutQuotes, asExpressionQuery, results;
2437
2581
  return (0, tslib_1.__generator)(this, function (_a) {
2438
2582
  switch (_a.label) {
2439
2583
  case 0:
@@ -2533,14 +2677,18 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2533
2677
  }
2534
2678
  tableColumn.isNullable = dbColumn["is_nullable"] === "YES";
2535
2679
  tableColumn.isPrimary = !!columnConstraints.find(function (constraint) { return constraint["constraint_type"] === "PRIMARY"; });
2536
- uniqueConstraint = columnConstraints.find(function (constraint) { return constraint["constraint_type"] === "UNIQUE"; });
2537
- isConstraintComposite = uniqueConstraint
2538
- ? !!dbConstraints.find(function (dbConstraint) { return dbConstraint["constraint_type"] === "UNIQUE"
2680
+ uniqueConstraints = columnConstraints.filter(function (constraint) { return constraint["constraint_type"] === "UNIQUE"; });
2681
+ isConstraintComposite = uniqueConstraints.every(function (uniqueConstraint) {
2682
+ return dbConstraints.some(function (dbConstraint) { return dbConstraint["constraint_type"] === "UNIQUE"
2539
2683
  && dbConstraint["constraint_name"] === uniqueConstraint["constraint_name"]
2540
- && dbConstraint["column_name"] !== dbColumn["column_name"]; })
2541
- : false;
2542
- tableColumn.isUnique = !!uniqueConstraint && !isConstraintComposite;
2543
- if (dbColumn["column_default"] !== null && dbColumn["column_default"] !== undefined) {
2684
+ && dbConstraint["column_name"] !== dbColumn["column_name"]; });
2685
+ });
2686
+ tableColumn.isUnique = uniqueConstraints.length > 0 && !isConstraintComposite;
2687
+ if (dbColumn.is_identity === "YES") { // Postgres 10+ Identity column
2688
+ tableColumn.isGenerated = true;
2689
+ tableColumn.generationStrategy = "identity";
2690
+ }
2691
+ else if (dbColumn["column_default"] !== null && dbColumn["column_default"] !== undefined) {
2544
2692
  serialDefaultName = "nextval('" + this.buildSequenceName(table, dbColumn["column_name"]) + "'::regclass)";
2545
2693
  serialDefaultPath = "nextval('" + this.buildSequencePath(table, dbColumn["column_name"]) + "'::regclass)";
2546
2694
  defaultWithoutQuotes = dbColumn["column_default"].replace(/"/g, "");
@@ -2556,10 +2704,30 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2556
2704
  tableColumn.default = dbColumn["column_default"];
2557
2705
  }
2558
2706
  else {
2559
- tableColumn.default = dbColumn["column_default"].replace(/::[\w\s\[\]\"]+/g, "");
2707
+ tableColumn.default = dbColumn["column_default"].replace(/::[\w\s\.\[\]\"]+/g, "");
2560
2708
  tableColumn.default = tableColumn.default.replace(/^(-?\d+)$/, "'$1'");
2561
2709
  }
2562
2710
  }
2711
+ if (!(dbColumn["is_generated"] === "ALWAYS" && dbColumn["generation_expression"])) return [3 /*break*/, 9];
2712
+ // In postgres there is no VIRTUAL generated column type
2713
+ tableColumn.generatedType = "STORED";
2714
+ asExpressionQuery = "SELECT * FROM \"typeorm_metadata\" "
2715
+ + (" WHERE \"table\" = '" + dbTable["table_name"] + "'")
2716
+ + (" AND \"name\" = '" + tableColumn.name + "'")
2717
+ + (" AND \"schema\" = '" + dbTable["table_schema"] + "'")
2718
+ + (" AND \"database\" = '" + this.driver.database + "'")
2719
+ + (" AND \"type\" = '" + MetadataTableType_1.MetadataTableType.GENERATED_COLUMN + "'");
2720
+ return [4 /*yield*/, this.query(asExpressionQuery)];
2721
+ case 8:
2722
+ results = _a.sent();
2723
+ if (results[0] && results[0].value) {
2724
+ tableColumn.asExpression = results[0].value;
2725
+ }
2726
+ else {
2727
+ tableColumn.asExpression = "";
2728
+ }
2729
+ _a.label = 9;
2730
+ case 9:
2563
2731
  tableColumn.comment = dbColumn["description"] ? dbColumn["description"] : undefined;
2564
2732
  if (dbColumn["character_set_name"])
2565
2733
  tableColumn.charset = dbColumn["character_set_name"];
@@ -2757,24 +2925,19 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2757
2925
  };
2758
2926
  PostgresQueryRunner.prototype.insertViewDefinitionSql = function (view) {
2759
2927
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
2760
- var currentSchema, _a, schema, name, type, expression, _b, query, parameters;
2761
- return (0, tslib_1.__generator)(this, function (_c) {
2762
- switch (_c.label) {
2928
+ var currentSchema, _a, schema, name, type, expression;
2929
+ return (0, tslib_1.__generator)(this, function (_b) {
2930
+ switch (_b.label) {
2763
2931
  case 0: return [4 /*yield*/, this.getCurrentSchema()];
2764
2932
  case 1:
2765
- currentSchema = _c.sent();
2933
+ currentSchema = _b.sent();
2766
2934
  _a = this.driver.parseTableName(view), schema = _a.schema, name = _a.tableName;
2767
2935
  if (!schema) {
2768
2936
  schema = currentSchema;
2769
2937
  }
2770
- type = view.materialized ? "MATERIALIZED_VIEW" : "VIEW";
2938
+ type = view.materialized ? MetadataTableType_1.MetadataTableType.MATERIALIZED_VIEW : MetadataTableType_1.MetadataTableType.VIEW;
2771
2939
  expression = typeof view.expression === "string" ? view.expression.trim() : view.expression(this.connection).getQuery();
2772
- _b = (0, tslib_1.__read)(this.connection.createQueryBuilder()
2773
- .insert()
2774
- .into(this.getTypeormMetadataTableName())
2775
- .values({ type: type, schema: schema, name: name, value: expression })
2776
- .getQueryAndParameters(), 2), query = _b[0], parameters = _b[1];
2777
- return [2 /*return*/, new Query_1.Query(query, parameters)];
2940
+ return [2 /*return*/, this.insertTypeormMetadataSql({ type: type, schema: schema, name: name, value: expression })];
2778
2941
  }
2779
2942
  });
2780
2943
  });
@@ -2791,25 +2954,18 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2791
2954
  */
2792
2955
  PostgresQueryRunner.prototype.deleteViewDefinitionSql = function (view) {
2793
2956
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
2794
- var currentSchema, _a, schema, name, type, qb, _b, query, parameters;
2795
- return (0, tslib_1.__generator)(this, function (_c) {
2796
- switch (_c.label) {
2957
+ var currentSchema, _a, schema, name, type;
2958
+ return (0, tslib_1.__generator)(this, function (_b) {
2959
+ switch (_b.label) {
2797
2960
  case 0: return [4 /*yield*/, this.getCurrentSchema()];
2798
2961
  case 1:
2799
- currentSchema = _c.sent();
2962
+ currentSchema = _b.sent();
2800
2963
  _a = this.driver.parseTableName(view), schema = _a.schema, name = _a.tableName;
2801
2964
  if (!schema) {
2802
2965
  schema = currentSchema;
2803
2966
  }
2804
- type = view.materialized ? "MATERIALIZED_VIEW" : "VIEW";
2805
- qb = this.connection.createQueryBuilder();
2806
- _b = (0, tslib_1.__read)(qb.delete()
2807
- .from(this.getTypeormMetadataTableName())
2808
- .where(qb.escape("type") + " = :type", { type: type })
2809
- .andWhere(qb.escape("schema") + " = :schema", { schema: schema })
2810
- .andWhere(qb.escape("name") + " = :name", { name: name })
2811
- .getQueryAndParameters(), 2), query = _b[0], parameters = _b[1];
2812
- return [2 /*return*/, new Query_1.Query(query, parameters)];
2967
+ type = view.materialized ? MetadataTableType_1.MetadataTableType.MATERIALIZED_VIEW : MetadataTableType_1.MetadataTableType.VIEW;
2968
+ return [2 /*return*/, this.deleteTypeormMetadataSql({ type: type, schema: schema, name: name })];
2813
2969
  }
2814
2970
  });
2815
2971
  });
@@ -3060,18 +3216,45 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
3060
3216
  }
3061
3217
  return "\"" + tableName + "\"";
3062
3218
  };
3219
+ /**
3220
+ * Get the table name with table schema
3221
+ * Note: Without ' or "
3222
+ */
3223
+ PostgresQueryRunner.prototype.getTableNameWithSchema = function (target) {
3224
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
3225
+ var tableName, schemaResult, schema;
3226
+ return (0, tslib_1.__generator)(this, function (_a) {
3227
+ switch (_a.label) {
3228
+ case 0:
3229
+ tableName = target instanceof Table_1.Table ? target.name : target;
3230
+ if (!(tableName.indexOf(".") === -1)) return [3 /*break*/, 2];
3231
+ return [4 /*yield*/, this.query("SELECT current_schema()")];
3232
+ case 1:
3233
+ schemaResult = _a.sent();
3234
+ schema = schemaResult[0]["current_schema"];
3235
+ return [2 /*return*/, schema + "." + tableName];
3236
+ case 2: return [2 /*return*/, tableName.split(".")[0] + "." + tableName.split(".")[1]];
3237
+ }
3238
+ });
3239
+ });
3240
+ };
3063
3241
  /**
3064
3242
  * Builds a query for create column.
3065
3243
  */
3066
3244
  PostgresQueryRunner.prototype.buildCreateColumnSql = function (table, column) {
3067
3245
  var c = "\"" + column.name + "\"";
3068
3246
  if (column.isGenerated === true && column.generationStrategy !== "uuid") {
3069
- if (column.type === "integer" || column.type === "int" || column.type === "int4")
3070
- c += " SERIAL";
3071
- if (column.type === "smallint" || column.type === "int2")
3072
- c += " SMALLSERIAL";
3073
- if (column.type === "bigint" || column.type === "int8")
3074
- c += " BIGSERIAL";
3247
+ if (column.generationStrategy === "identity") { // Postgres 10+ Identity generated column
3248
+ c += " " + column.type + " GENERATED BY DEFAULT AS IDENTITY";
3249
+ }
3250
+ else { // classic SERIAL primary column
3251
+ if (column.type === "integer" || column.type === "int" || column.type === "int4")
3252
+ c += " SERIAL";
3253
+ if (column.type === "smallint" || column.type === "int2")
3254
+ c += " SMALLSERIAL";
3255
+ if (column.type === "bigint" || column.type === "int8")
3256
+ c += " BIGSERIAL";
3257
+ }
3075
3258
  }
3076
3259
  if (column.type === "enum" || column.type === "simple-enum") {
3077
3260
  c += " " + this.buildEnumName(table, column);
@@ -3081,16 +3264,23 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
3081
3264
  else if (!column.isGenerated || column.type === "uuid") {
3082
3265
  c += " " + this.connection.driver.createFullType(column);
3083
3266
  }
3084
- if (column.charset)
3085
- c += " CHARACTER SET \"" + column.charset + "\"";
3086
- if (column.collation)
3087
- c += " COLLATE \"" + column.collation + "\"";
3088
- if (column.isNullable !== true)
3089
- c += " NOT NULL";
3090
- if (column.default !== undefined && column.default !== null)
3091
- c += " DEFAULT " + column.default;
3092
- if (column.isGenerated && column.generationStrategy === "uuid" && !column.default)
3093
- c += " DEFAULT " + this.driver.uuidGenerator;
3267
+ // CHARACTER SET, COLLATE, NOT NULL and DEFAULT do not exist on generated (virtual) columns
3268
+ // Also, postgres only supports the stored generated column type
3269
+ if (column.generatedType === "STORED" && column.asExpression) {
3270
+ c += " GENERATED ALWAYS AS (" + column.asExpression + ") STORED";
3271
+ }
3272
+ else {
3273
+ if (column.charset)
3274
+ c += " CHARACTER SET \"" + column.charset + "\"";
3275
+ if (column.collation)
3276
+ c += " COLLATE \"" + column.collation + "\"";
3277
+ if (column.isNullable !== true)
3278
+ c += " NOT NULL";
3279
+ if (column.default !== undefined && column.default !== null)
3280
+ c += " DEFAULT " + column.default;
3281
+ if (column.isGenerated && column.generationStrategy === "uuid" && !column.default)
3282
+ c += " DEFAULT " + this.driver.uuidGenerator;
3283
+ }
3094
3284
  return c;
3095
3285
  };
3096
3286
  /**