typeorm 0.2.28 → 0.2.29

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 (248) hide show
  1. package/README.md +7 -2
  2. package/browser/connection/ConnectionOptionsReader.js +27 -27
  3. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  4. package/browser/decorator/entity/ChildEntity.js +1 -1
  5. package/browser/decorator/entity/ChildEntity.js.map +1 -1
  6. package/browser/driver/DriverUtils.js +20 -12
  7. package/browser/driver/DriverUtils.js.map +1 -1
  8. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +53 -6
  9. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  10. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +53 -6
  11. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
  12. package/browser/driver/cockroachdb/CockroachDriver.js +3 -3
  13. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  14. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +4 -0
  15. package/browser/driver/cockroachdb/CockroachQueryRunner.js +112 -42
  16. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  17. package/browser/driver/expo/ExpoQueryRunner.js +72 -14
  18. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  19. package/browser/driver/mongodb/MongoConnectionOptions.d.ts +4 -0
  20. package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  21. package/browser/driver/mongodb/MongoDriver.d.ts +7 -3
  22. package/browser/driver/mongodb/MongoDriver.js +15 -14
  23. package/browser/driver/mongodb/MongoDriver.js.map +1 -1
  24. package/browser/driver/mongodb/MongoQueryRunner.d.ts +3 -3
  25. package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
  26. package/browser/driver/mysql/MysqlDriver.js +4 -4
  27. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  28. package/browser/driver/mysql/MysqlQueryRunner.d.ts +4 -0
  29. package/browser/driver/mysql/MysqlQueryRunner.js +107 -38
  30. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  31. package/browser/driver/oracle/OracleQueryRunner.js +52 -6
  32. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  33. package/browser/driver/postgres/PostgresDriver.js +7 -7
  34. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  35. package/browser/driver/postgres/PostgresQueryRunner.d.ts +8 -0
  36. package/browser/driver/postgres/PostgresQueryRunner.js +107 -18
  37. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  38. package/browser/driver/react-native/ReactNativeDriver.js +1 -2
  39. package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
  40. package/browser/driver/sap/SapQueryRunner.js +56 -8
  41. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  42. package/browser/driver/sqlite/SqliteQueryRunner.js +4 -0
  43. package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  44. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +55 -7
  45. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  46. package/browser/driver/sqlserver/SqlServerQueryRunner.js +133 -62
  47. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  48. package/browser/entity-manager/MongoEntityManager.js +14 -3
  49. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  50. package/browser/find-options/FindOneOptions.d.ts +4 -0
  51. package/browser/find-options/FindOneOptions.js.map +1 -1
  52. package/browser/find-options/FindOperator.d.ts +20 -1
  53. package/browser/find-options/FindOperator.js +27 -1
  54. package/browser/find-options/FindOperator.js.map +1 -1
  55. package/browser/find-options/FindOperatorType.d.ts +1 -1
  56. package/browser/find-options/FindOperatorType.js.map +1 -1
  57. package/browser/find-options/FindOptionsUtils.js +5 -1
  58. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  59. package/browser/find-options/operator/ILike.d.ts +6 -0
  60. package/browser/find-options/operator/ILike.js +10 -0
  61. package/browser/find-options/operator/ILike.js.map +1 -0
  62. package/browser/find-options/operator/Raw.d.ts +14 -2
  63. package/browser/find-options/operator/Raw.js +5 -6
  64. package/browser/find-options/operator/Raw.js.map +1 -1
  65. package/browser/index.d.ts +2 -0
  66. package/browser/index.js +1 -0
  67. package/browser/index.js.map +1 -1
  68. package/browser/logger/Logger.d.ts +1 -1
  69. package/browser/logger/Logger.js.map +1 -1
  70. package/browser/metadata/ColumnMetadata.js +14 -3
  71. package/browser/metadata/ColumnMetadata.js.map +1 -1
  72. package/browser/metadata/types/EventListenerTypes.d.ts +7 -7
  73. package/browser/metadata/types/EventListenerTypes.js.map +1 -1
  74. package/browser/metadata-builder/EntityMetadataBuilder.js +14 -8
  75. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  76. package/browser/metadata-builder/EntityMetadataValidator.js +8 -5
  77. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  78. package/browser/persistence/EntityPersistExecutor.js +1 -1
  79. package/browser/persistence/EntityPersistExecutor.js.map +1 -1
  80. package/browser/persistence/Subject.js +2 -1
  81. package/browser/persistence/Subject.js.map +1 -1
  82. package/browser/query-builder/DeleteQueryBuilder.js +2 -1
  83. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  84. package/browser/query-builder/InsertQueryBuilder.js +31 -8
  85. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  86. package/browser/query-builder/QueryBuilder.d.ts +7 -0
  87. package/browser/query-builder/QueryBuilder.js +125 -32
  88. package/browser/query-builder/QueryBuilder.js.map +1 -1
  89. package/browser/query-builder/QueryExpressionMap.d.ts +4 -0
  90. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  91. package/browser/query-builder/SelectQueryBuilder.d.ts +5 -0
  92. package/browser/query-builder/SelectQueryBuilder.js +73 -40
  93. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  94. package/browser/query-builder/UpdateQueryBuilder.js +2 -1
  95. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  96. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +6 -3
  97. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  98. package/browser/query-runner/QueryRunner.d.ts +1 -1
  99. package/browser/query-runner/QueryRunner.js.map +1 -1
  100. package/browser/repository/TreeRepository.js +2 -2
  101. package/browser/repository/TreeRepository.js.map +1 -1
  102. package/browser/subscriber/Broadcaster.d.ts +24 -0
  103. package/browser/subscriber/Broadcaster.js +120 -0
  104. package/browser/subscriber/Broadcaster.js.map +1 -1
  105. package/browser/subscriber/EntitySubscriberInterface.d.ts +27 -0
  106. package/browser/subscriber/EntitySubscriberInterface.js.map +1 -1
  107. package/browser/subscriber/event/TransactionCommitEvent.d.ts +22 -0
  108. package/browser/subscriber/event/TransactionCommitEvent.js +3 -0
  109. package/browser/subscriber/event/TransactionCommitEvent.js.map +1 -0
  110. package/browser/subscriber/event/TransactionRollbackEvent.d.ts +22 -0
  111. package/browser/subscriber/event/TransactionRollbackEvent.js +3 -0
  112. package/browser/subscriber/event/TransactionRollbackEvent.js.map +1 -0
  113. package/browser/subscriber/event/TransactionStartEvent.d.ts +22 -0
  114. package/browser/subscriber/event/TransactionStartEvent.js +3 -0
  115. package/browser/subscriber/event/TransactionStartEvent.js.map +1 -0
  116. package/browser/util/DateUtils.js +1 -7
  117. package/browser/util/DateUtils.js.map +1 -1
  118. package/commands/EntityCreateCommand.js +5 -2
  119. package/commands/EntityCreateCommand.js.map +1 -1
  120. package/commands/InitCommand.js +1 -1
  121. package/commands/InitCommand.js.map +1 -1
  122. package/commands/MigrationCreateCommand.js +4 -1
  123. package/commands/MigrationCreateCommand.js.map +1 -1
  124. package/commands/MigrationGenerateCommand.js +26 -28
  125. package/commands/MigrationGenerateCommand.js.map +1 -1
  126. package/commands/QueryCommand.d.ts +2 -0
  127. package/commands/QueryCommand.js +12 -3
  128. package/commands/QueryCommand.js.map +1 -1
  129. package/commands/SubscriberCreateCommand.js +5 -2
  130. package/commands/SubscriberCreateCommand.js.map +1 -1
  131. package/connection/ConnectionOptionsReader.js +27 -27
  132. package/connection/ConnectionOptionsReader.js.map +1 -1
  133. package/decorator/entity/ChildEntity.js +1 -1
  134. package/decorator/entity/ChildEntity.js.map +1 -1
  135. package/driver/DriverUtils.js +19 -11
  136. package/driver/DriverUtils.js.map +1 -1
  137. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +53 -6
  138. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  139. package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +53 -6
  140. package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
  141. package/driver/cockroachdb/CockroachDriver.js +3 -3
  142. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  143. package/driver/cockroachdb/CockroachQueryRunner.d.ts +4 -0
  144. package/driver/cockroachdb/CockroachQueryRunner.js +112 -42
  145. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  146. package/driver/expo/ExpoQueryRunner.js +72 -14
  147. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  148. package/driver/mongodb/MongoConnectionOptions.d.ts +4 -0
  149. package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  150. package/driver/mongodb/MongoDriver.d.ts +7 -3
  151. package/driver/mongodb/MongoDriver.js +15 -14
  152. package/driver/mongodb/MongoDriver.js.map +1 -1
  153. package/driver/mongodb/MongoQueryRunner.d.ts +3 -3
  154. package/driver/mongodb/MongoQueryRunner.js.map +1 -1
  155. package/driver/mysql/MysqlDriver.js +4 -4
  156. package/driver/mysql/MysqlDriver.js.map +1 -1
  157. package/driver/mysql/MysqlQueryRunner.d.ts +4 -0
  158. package/driver/mysql/MysqlQueryRunner.js +107 -38
  159. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  160. package/driver/oracle/OracleQueryRunner.js +52 -6
  161. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  162. package/driver/postgres/PostgresDriver.js +7 -7
  163. package/driver/postgres/PostgresDriver.js.map +1 -1
  164. package/driver/postgres/PostgresQueryRunner.d.ts +8 -0
  165. package/driver/postgres/PostgresQueryRunner.js +107 -18
  166. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  167. package/driver/react-native/ReactNativeDriver.js +1 -2
  168. package/driver/react-native/ReactNativeDriver.js.map +1 -1
  169. package/driver/sap/SapQueryRunner.js +56 -8
  170. package/driver/sap/SapQueryRunner.js.map +1 -1
  171. package/driver/sqlite/SqliteQueryRunner.js +4 -0
  172. package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  173. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +55 -7
  174. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  175. package/driver/sqlserver/SqlServerQueryRunner.js +133 -62
  176. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  177. package/entity-manager/MongoEntityManager.js +14 -3
  178. package/entity-manager/MongoEntityManager.js.map +1 -1
  179. package/find-options/FindOneOptions.d.ts +4 -0
  180. package/find-options/FindOneOptions.js.map +1 -1
  181. package/find-options/FindOperator.d.ts +20 -1
  182. package/find-options/FindOperator.js +27 -1
  183. package/find-options/FindOperator.js.map +1 -1
  184. package/find-options/FindOperatorType.d.ts +1 -1
  185. package/find-options/FindOperatorType.js.map +1 -1
  186. package/find-options/FindOptionsUtils.js +5 -1
  187. package/find-options/FindOptionsUtils.js.map +1 -1
  188. package/find-options/operator/ILike.d.ts +6 -0
  189. package/find-options/operator/ILike.js +13 -0
  190. package/find-options/operator/ILike.js.map +1 -0
  191. package/find-options/operator/Raw.d.ts +14 -2
  192. package/find-options/operator/Raw.js +5 -6
  193. package/find-options/operator/Raw.js.map +1 -1
  194. package/index.d.ts +2 -0
  195. package/index.js +1 -0
  196. package/index.js.map +1 -1
  197. package/logger/Logger.d.ts +1 -1
  198. package/logger/Logger.js.map +1 -1
  199. package/metadata/ColumnMetadata.js +14 -3
  200. package/metadata/ColumnMetadata.js.map +1 -1
  201. package/metadata/types/EventListenerTypes.d.ts +7 -7
  202. package/metadata/types/EventListenerTypes.js.map +1 -1
  203. package/metadata-builder/EntityMetadataBuilder.js +14 -8
  204. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  205. package/metadata-builder/EntityMetadataValidator.js +8 -5
  206. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  207. package/package.json +3 -2
  208. package/persistence/EntityPersistExecutor.js +1 -1
  209. package/persistence/EntityPersistExecutor.js.map +1 -1
  210. package/persistence/Subject.js +2 -1
  211. package/persistence/Subject.js.map +1 -1
  212. package/query-builder/DeleteQueryBuilder.js +2 -1
  213. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  214. package/query-builder/InsertQueryBuilder.js +31 -8
  215. package/query-builder/InsertQueryBuilder.js.map +1 -1
  216. package/query-builder/QueryBuilder.d.ts +7 -0
  217. package/query-builder/QueryBuilder.js +124 -31
  218. package/query-builder/QueryBuilder.js.map +1 -1
  219. package/query-builder/QueryExpressionMap.d.ts +4 -0
  220. package/query-builder/QueryExpressionMap.js.map +1 -1
  221. package/query-builder/SelectQueryBuilder.d.ts +5 -0
  222. package/query-builder/SelectQueryBuilder.js +73 -40
  223. package/query-builder/SelectQueryBuilder.js.map +1 -1
  224. package/query-builder/UpdateQueryBuilder.js +2 -1
  225. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  226. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +6 -3
  227. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  228. package/query-runner/QueryRunner.d.ts +1 -1
  229. package/query-runner/QueryRunner.js.map +1 -1
  230. package/repository/TreeRepository.js +2 -2
  231. package/repository/TreeRepository.js.map +1 -1
  232. package/subscriber/Broadcaster.d.ts +24 -0
  233. package/subscriber/Broadcaster.js +120 -0
  234. package/subscriber/Broadcaster.js.map +1 -1
  235. package/subscriber/EntitySubscriberInterface.d.ts +27 -0
  236. package/subscriber/EntitySubscriberInterface.js.map +1 -1
  237. package/subscriber/event/TransactionCommitEvent.d.ts +22 -0
  238. package/subscriber/event/TransactionCommitEvent.js +4 -0
  239. package/subscriber/event/TransactionCommitEvent.js.map +1 -0
  240. package/subscriber/event/TransactionRollbackEvent.d.ts +22 -0
  241. package/subscriber/event/TransactionRollbackEvent.js +4 -0
  242. package/subscriber/event/TransactionRollbackEvent.js.map +1 -0
  243. package/subscriber/event/TransactionStartEvent.d.ts +22 -0
  244. package/subscriber/event/TransactionStartEvent.js +4 -0
  245. package/subscriber/event/TransactionStartEvent.js.map +1 -0
  246. package/typeorm-model-shim.js +145 -128
  247. package/util/DateUtils.js +1 -7
  248. package/util/DateUtils.js.map +1 -1
@@ -15,6 +15,7 @@ import { View } from "../../schema-builder/view/View";
15
15
  import { Broadcaster } from "../../subscriber/Broadcaster";
16
16
  import { OrmUtils } from "../../util/OrmUtils";
17
17
  import { Query } from "../Query";
18
+ import { BroadcasterResult } from "../../subscriber/BroadcasterResult";
18
19
  /**
19
20
  * Runs queries on a single postgres database connection.
20
21
  */
@@ -95,21 +96,38 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
95
96
  */
96
97
  PostgresQueryRunner.prototype.startTransaction = function (isolationLevel) {
97
98
  return __awaiter(this, void 0, void 0, function () {
99
+ var beforeBroadcastResult, afterBroadcastResult;
98
100
  return __generator(this, function (_a) {
99
101
  switch (_a.label) {
100
102
  case 0:
101
103
  if (this.isTransactionActive)
102
104
  throw new TransactionAlreadyStartedError();
105
+ beforeBroadcastResult = new BroadcasterResult();
106
+ this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);
107
+ if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];
108
+ return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];
109
+ case 1:
110
+ _a.sent();
111
+ _a.label = 2;
112
+ case 2:
103
113
  this.isTransactionActive = true;
104
114
  return [4 /*yield*/, this.query("START TRANSACTION")];
105
- case 1:
115
+ case 3:
106
116
  _a.sent();
107
- if (!isolationLevel) return [3 /*break*/, 3];
117
+ if (!isolationLevel) return [3 /*break*/, 5];
108
118
  return [4 /*yield*/, this.query("SET TRANSACTION ISOLATION LEVEL " + isolationLevel)];
109
- case 2:
119
+ case 4:
110
120
  _a.sent();
111
- _a.label = 3;
112
- case 3: return [2 /*return*/];
121
+ _a.label = 5;
122
+ case 5:
123
+ afterBroadcastResult = new BroadcasterResult();
124
+ this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);
125
+ if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 7];
126
+ return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];
127
+ case 6:
128
+ _a.sent();
129
+ _a.label = 7;
130
+ case 7: return [2 /*return*/];
113
131
  }
114
132
  });
115
133
  });
@@ -120,16 +138,31 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
120
138
  */
121
139
  PostgresQueryRunner.prototype.commitTransaction = function () {
122
140
  return __awaiter(this, void 0, void 0, function () {
141
+ var beforeBroadcastResult, afterBroadcastResult;
123
142
  return __generator(this, function (_a) {
124
143
  switch (_a.label) {
125
144
  case 0:
126
145
  if (!this.isTransactionActive)
127
146
  throw new TransactionNotStartedError();
128
- return [4 /*yield*/, this.query("COMMIT")];
147
+ beforeBroadcastResult = new BroadcasterResult();
148
+ this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);
149
+ if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];
150
+ return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];
129
151
  case 1:
152
+ _a.sent();
153
+ _a.label = 2;
154
+ case 2: return [4 /*yield*/, this.query("COMMIT")];
155
+ case 3:
130
156
  _a.sent();
131
157
  this.isTransactionActive = false;
132
- return [2 /*return*/];
158
+ afterBroadcastResult = new BroadcasterResult();
159
+ this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);
160
+ if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];
161
+ return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];
162
+ case 4:
163
+ _a.sent();
164
+ _a.label = 5;
165
+ case 5: return [2 /*return*/];
133
166
  }
134
167
  });
135
168
  });
@@ -140,16 +173,31 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
140
173
  */
141
174
  PostgresQueryRunner.prototype.rollbackTransaction = function () {
142
175
  return __awaiter(this, void 0, void 0, function () {
176
+ var beforeBroadcastResult, afterBroadcastResult;
143
177
  return __generator(this, function (_a) {
144
178
  switch (_a.label) {
145
179
  case 0:
146
180
  if (!this.isTransactionActive)
147
181
  throw new TransactionNotStartedError();
148
- return [4 /*yield*/, this.query("ROLLBACK")];
182
+ beforeBroadcastResult = new BroadcasterResult();
183
+ this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);
184
+ if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];
185
+ return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];
149
186
  case 1:
187
+ _a.sent();
188
+ _a.label = 2;
189
+ case 2: return [4 /*yield*/, this.query("ROLLBACK")];
190
+ case 3:
150
191
  _a.sent();
151
192
  this.isTransactionActive = false;
152
- return [2 /*return*/];
193
+ afterBroadcastResult = new BroadcasterResult();
194
+ this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);
195
+ if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];
196
+ return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];
197
+ case 4:
198
+ _a.sent();
199
+ _a.label = 5;
200
+ case 5: return [2 /*return*/];
153
201
  }
154
202
  });
155
203
  });
@@ -736,6 +784,11 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
736
784
  upQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " ADD CONSTRAINT \"" + uniqueConstraint.name + "\" UNIQUE (\"" + column.name + "\")"));
737
785
  downQueries.push(new Query("ALTER TABLE " + this.escapePath(table) + " DROP CONSTRAINT \"" + uniqueConstraint.name + "\""));
738
786
  }
787
+ // create column's comment
788
+ if (column.comment) {
789
+ upQueries.push(new Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + column.name + "\" IS " + this.escapeComment(column.comment)));
790
+ downQueries.push(new Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + column.name + "\" IS " + this.escapeComment(column.comment)));
791
+ }
739
792
  return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
740
793
  case 6:
741
794
  _b.sent();
@@ -987,8 +1040,8 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
987
1040
  }
988
1041
  }
989
1042
  if (oldColumn.comment !== newColumn.comment) {
990
- upQueries.push(new Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + oldColumn.name + "\" IS '" + newColumn.comment + "'"));
991
- downQueries.push(new Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + newColumn.name + "\" IS '" + oldColumn.comment + "'"));
1043
+ upQueries.push(new Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + oldColumn.name + "\" IS " + this.escapeComment(newColumn.comment)));
1044
+ downQueries.push(new Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + newColumn.name + "\" IS " + this.escapeComment(oldColumn.comment)));
992
1045
  }
993
1046
  if (newColumn.isPrimary !== oldColumn.isPrimary) {
994
1047
  primaryColumns = clonedTable.primaryColumns;
@@ -2117,7 +2170,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2117
2170
  */
2118
2171
  PostgresQueryRunner.prototype.loadTables = function (tableNames) {
2119
2172
  return __awaiter(this, void 0, void 0, function () {
2120
- var currentSchemaQuery, currentSchema, tablesCondition, tablesSql, columnsSql, constraintsCondition, constraintsSql, indicesSql, foreignKeysCondition, foreignKeysSql, _a, dbTables, dbColumns, dbConstraints, dbIndices, dbForeignKeys;
2173
+ var currentSchemaQuery, currentSchema, tablesCondition, tablesSql, columnsSql, constraintsCondition, constraintsSql, indicesSql, foreignKeysCondition, hasRelispartitionColumn, isPartitionCondition, foreignKeysSql, _a, dbTables, dbColumns, dbConstraints, dbIndices, dbForeignKeys;
2121
2174
  var _this = this;
2122
2175
  return __generator(this, function (_b) {
2123
2176
  switch (_b.label) {
@@ -2138,7 +2191,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2138
2191
  return "(\"table_schema\" = '" + schema + "' AND \"table_name\" = '" + name + "')";
2139
2192
  }).join(" OR ");
2140
2193
  tablesSql = "SELECT * FROM \"information_schema\".\"tables\" WHERE " + tablesCondition;
2141
- columnsSql = "SELECT *, ('\"' || \"udt_schema\" || '\".\"' || \"udt_name\" || '\"')::\"regtype\" AS \"regtype\" FROM \"information_schema\".\"columns\" WHERE " + tablesCondition;
2194
+ columnsSql = "\n SELECT\n *,\n pg_catalog.col_description(('\"' || table_catalog || '\".\"' || table_schema || '\".\"' || table_name || '\"')::regclass::oid, ordinal_position) as description,\n ('\"' || \"udt_schema\" || '\".\"' || \"udt_name\" || '\"')::\"regtype\" AS \"regtype\"\n FROM \"information_schema\".\"columns\"\n WHERE\n " + tablesCondition;
2142
2195
  constraintsCondition = tableNames.map(function (tableName) {
2143
2196
  var _a = __read(tableName.split("."), 2), schema = _a[0], name = _a[1];
2144
2197
  if (!name) {
@@ -2154,7 +2207,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2154
2207
  "INNER JOIN \"pg_class\" \"t\" ON \"t\".\"oid\" = \"cnst\".\"conrelid\" " +
2155
2208
  "INNER JOIN \"pg_namespace\" \"ns\" ON \"ns\".\"oid\" = \"cnst\".\"connamespace\" " +
2156
2209
  "LEFT JOIN \"pg_attribute\" \"a\" ON \"a\".\"attrelid\" = \"cnst\".\"conrelid\" AND \"a\".\"attnum\" = ANY (\"cnst\".\"conkey\") " +
2157
- ("WHERE \"t\".\"relkind\" = 'r' AND (" + constraintsCondition + ")");
2210
+ ("WHERE \"t\".\"relkind\" IN ('r', 'p') AND (" + constraintsCondition + ")");
2158
2211
  indicesSql = "SELECT \"ns\".\"nspname\" AS \"table_schema\", \"t\".\"relname\" AS \"table_name\", \"i\".\"relname\" AS \"constraint_name\", \"a\".\"attname\" AS \"column_name\", " +
2159
2212
  "CASE \"ix\".\"indisunique\" WHEN 't' THEN 'TRUE' ELSE'FALSE' END AS \"is_unique\", pg_get_expr(\"ix\".\"indpred\", \"ix\".\"indrelid\") AS \"condition\", " +
2160
2213
  "\"types\".\"typname\" AS \"type_name\" " +
@@ -2165,7 +2218,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2165
2218
  "INNER JOIN \"pg_class\" \"i\" ON \"i\".\"oid\" = \"ix\".\"indexrelid\" " +
2166
2219
  "INNER JOIN \"pg_type\" \"types\" ON \"types\".\"oid\" = \"a\".\"atttypid\" " +
2167
2220
  "LEFT JOIN \"pg_constraint\" \"cnst\" ON \"cnst\".\"conname\" = \"i\".\"relname\" " +
2168
- ("WHERE \"t\".\"relkind\" = 'r' AND \"cnst\".\"contype\" IS NULL AND (" + constraintsCondition + ")");
2221
+ ("WHERE \"t\".\"relkind\" IN ('r', 'p') AND \"cnst\".\"contype\" IS NULL AND (" + constraintsCondition + ")");
2169
2222
  foreignKeysCondition = tableNames.map(function (tableName) {
2170
2223
  var _a = __read(tableName.split("."), 2), schema = _a[0], name = _a[1];
2171
2224
  if (!name) {
@@ -2174,6 +2227,10 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2174
2227
  }
2175
2228
  return "(\"ns\".\"nspname\" = '" + schema + "' AND \"cl\".\"relname\" = '" + name + "')";
2176
2229
  }).join(" OR ");
2230
+ return [4 /*yield*/, this.hasSupportForPartitionedTables()];
2231
+ case 2:
2232
+ hasRelispartitionColumn = _b.sent();
2233
+ isPartitionCondition = hasRelispartitionColumn ? " AND \"cl\".\"relispartition\" = 'f'" : "";
2177
2234
  foreignKeysSql = "SELECT \"con\".\"conname\" AS \"constraint_name\", \"con\".\"nspname\" AS \"table_schema\", \"con\".\"relname\" AS \"table_name\", \"att2\".\"attname\" AS \"column_name\", " +
2178
2235
  "\"ns\".\"nspname\" AS \"referenced_table_schema\", \"cl\".\"relname\" AS \"referenced_table_name\", \"att\".\"attname\" AS \"referenced_column_name\", \"con\".\"confdeltype\" AS \"on_delete\", " +
2179
2236
  "\"con\".\"confupdtype\" AS \"on_update\", \"con\".\"condeferrable\" AS \"deferrable\", \"con\".\"condeferred\" AS \"deferred\" " +
@@ -2189,7 +2246,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2189
2246
  ("WHERE \"con1\".\"contype\" = 'f' AND (" + foreignKeysCondition + ") ") +
2190
2247
  ") \"con\" " +
2191
2248
  "INNER JOIN \"pg_attribute\" \"att\" ON \"att\".\"attrelid\" = \"con\".\"confrelid\" AND \"att\".\"attnum\" = \"con\".\"child\" " +
2192
- "INNER JOIN \"pg_class\" \"cl\" ON \"cl\".\"oid\" = \"con\".\"confrelid\" " +
2249
+ ("INNER JOIN \"pg_class\" \"cl\" ON \"cl\".\"oid\" = \"con\".\"confrelid\" " + isPartitionCondition) +
2193
2250
  "INNER JOIN \"pg_namespace\" \"ns\" ON \"cl\".\"relnamespace\" = \"ns\".\"oid\" " +
2194
2251
  "INNER JOIN \"pg_attribute\" \"att2\" ON \"att2\".\"attrelid\" = \"con\".\"conrelid\" AND \"att2\".\"attnum\" = \"con\".\"parent\"";
2195
2252
  return [4 /*yield*/, Promise.all([
@@ -2199,7 +2256,7 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2199
2256
  this.query(indicesSql),
2200
2257
  this.query(foreignKeysSql),
2201
2258
  ])];
2202
- case 2:
2259
+ case 3:
2203
2260
  _a = __read.apply(void 0, [_b.sent(), 5]), dbTables = _a[0], dbColumns = _a[1], dbConstraints = _a[2], dbIndices = _a[3], dbForeignKeys = _a[4];
2204
2261
  // if tables were not found in the db, no need to proceed
2205
2262
  if (!dbTables.length)
@@ -2315,9 +2372,10 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2315
2372
  }
2316
2373
  else {
2317
2374
  tableColumn.default = dbColumn["column_default"].replace(/::.*/, "");
2375
+ tableColumn.default = tableColumn.default.replace(/^(-?\d+)$/, "'$1'");
2318
2376
  }
2319
2377
  }
2320
- tableColumn.comment = ""; // dbColumn["COLUMN_COMMENT"];
2378
+ tableColumn.comment = dbColumn["description"] == null ? undefined : dbColumn["description"];
2321
2379
  if (dbColumn["character_set_name"])
2322
2380
  tableColumn.charset = dbColumn["character_set_name"];
2323
2381
  if (dbColumn["collation_name"])
@@ -2470,6 +2528,9 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2470
2528
  sql += ", CONSTRAINT \"" + primaryKeyName + "\" PRIMARY KEY (" + columnNames + ")";
2471
2529
  }
2472
2530
  sql += ")";
2531
+ table.columns
2532
+ .filter(function (it) { return it.comment; })
2533
+ .forEach(function (it) { return sql += "; COMMENT ON COLUMN " + _this.escapePath(table) + ".\"" + it.name + "\" IS " + _this.escapeComment(it.comment); });
2473
2534
  return new Query(sql);
2474
2535
  };
2475
2536
  /**
@@ -2789,6 +2850,18 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2789
2850
  });
2790
2851
  });
2791
2852
  };
2853
+ /**
2854
+ * Escapes a given comment so it's safe to include in a query.
2855
+ */
2856
+ PostgresQueryRunner.prototype.escapeComment = function (comment) {
2857
+ if (comment === undefined || comment.length === 0) {
2858
+ return 'NULL';
2859
+ }
2860
+ comment = comment
2861
+ .replace("'", "''")
2862
+ .replace("\0", ""); // Null bytes aren't allowed in comments
2863
+ return "'" + comment + "'";
2864
+ };
2792
2865
  /**
2793
2866
  * Escapes given table or view path.
2794
2867
  */
@@ -2850,6 +2923,22 @@ var PostgresQueryRunner = /** @class */ (function (_super) {
2850
2923
  c += " DEFAULT " + this.driver.uuidGenerator;
2851
2924
  return c;
2852
2925
  };
2926
+ /**
2927
+ * Checks if the PostgreSQL server has support for partitioned tables
2928
+ */
2929
+ PostgresQueryRunner.prototype.hasSupportForPartitionedTables = function () {
2930
+ return __awaiter(this, void 0, void 0, function () {
2931
+ var result;
2932
+ return __generator(this, function (_a) {
2933
+ switch (_a.label) {
2934
+ case 0: return [4 /*yield*/, this.query("SELECT TRUE FROM information_schema.columns WHERE table_name = 'pg_class' and column_name = 'relispartition'")];
2935
+ case 1:
2936
+ result = _a.sent();
2937
+ return [2 /*return*/, result.length ? true : false];
2938
+ }
2939
+ });
2940
+ });
2941
+ };
2853
2942
  return PostgresQueryRunner;
2854
2943
  }(BaseQueryRunner));
2855
2944
  export { PostgresQueryRunner };