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
@@ -17,6 +17,7 @@ var BaseQueryRunner_1 = require("../../query-runner/BaseQueryRunner");
17
17
  var OrmUtils_1 = require("../../util/OrmUtils");
18
18
  var TableCheck_1 = require("../../schema-builder/table/TableCheck");
19
19
  var TableExclusion_1 = require("../../schema-builder/table/TableExclusion");
20
+ var BroadcasterResult_1 = require("../../subscriber/BroadcasterResult");
20
21
  /**
21
22
  * Runs queries on a single postgres database connection.
22
23
  */
@@ -92,26 +93,42 @@ var CockroachQueryRunner = /** @class */ (function (_super) {
92
93
  */
93
94
  CockroachQueryRunner.prototype.startTransaction = function (isolationLevel) {
94
95
  return tslib_1.__awaiter(this, void 0, void 0, function () {
96
+ var beforeBroadcastResult, afterBroadcastResult;
95
97
  return tslib_1.__generator(this, function (_a) {
96
98
  switch (_a.label) {
97
99
  case 0:
98
100
  if (this.isTransactionActive)
99
101
  throw new TransactionAlreadyStartedError_1.TransactionAlreadyStartedError();
102
+ beforeBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
103
+ this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);
104
+ if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];
105
+ return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];
106
+ case 1:
107
+ _a.sent();
108
+ _a.label = 2;
109
+ case 2:
100
110
  this.isTransactionActive = true;
101
111
  return [4 /*yield*/, this.query("START TRANSACTION")];
102
- case 1:
112
+ case 3:
103
113
  _a.sent();
104
114
  return [4 /*yield*/, this.query("SAVEPOINT cockroach_restart")];
105
- case 2:
115
+ case 4:
106
116
  _a.sent();
107
- if (!isolationLevel) return [3 /*break*/, 4];
117
+ if (!isolationLevel) return [3 /*break*/, 6];
108
118
  return [4 /*yield*/, this.query("SET TRANSACTION ISOLATION LEVEL " + isolationLevel)];
109
- case 3:
119
+ case 5:
110
120
  _a.sent();
111
- _a.label = 4;
112
- case 4:
121
+ _a.label = 6;
122
+ case 6:
113
123
  this.storeQueries = true;
114
- return [2 /*return*/];
124
+ afterBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
125
+ this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);
126
+ if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 8];
127
+ return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];
128
+ case 7:
129
+ _a.sent();
130
+ _a.label = 8;
131
+ case 8: return [2 /*return*/];
115
132
  }
116
133
  });
117
134
  });
@@ -122,64 +139,80 @@ var CockroachQueryRunner = /** @class */ (function (_super) {
122
139
  */
123
140
  CockroachQueryRunner.prototype.commitTransaction = function () {
124
141
  return tslib_1.__awaiter(this, void 0, void 0, function () {
125
- var e_1, _a, _b, q, e_2_1;
142
+ var beforeBroadcastResult, e_1, _a, _b, q, e_2_1, afterBroadcastResult;
126
143
  var e_2, _c;
127
144
  return tslib_1.__generator(this, function (_d) {
128
145
  switch (_d.label) {
129
146
  case 0:
130
147
  if (!this.isTransactionActive)
131
148
  throw new TransactionNotStartedError_1.TransactionNotStartedError();
132
- this.storeQueries = false;
133
- _d.label = 1;
149
+ beforeBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
150
+ this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);
151
+ if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];
152
+ return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];
134
153
  case 1:
135
- _d.trys.push([1, 4, , 16]);
136
- return [4 /*yield*/, this.query("RELEASE SAVEPOINT cockroach_restart")];
154
+ _d.sent();
155
+ _d.label = 2;
137
156
  case 2:
157
+ this.storeQueries = false;
158
+ _d.label = 3;
159
+ case 3:
160
+ _d.trys.push([3, 6, , 18]);
161
+ return [4 /*yield*/, this.query("RELEASE SAVEPOINT cockroach_restart")];
162
+ case 4:
138
163
  _d.sent();
139
164
  return [4 /*yield*/, this.query("COMMIT")];
140
- case 3:
165
+ case 5:
141
166
  _d.sent();
142
167
  this.queries = [];
143
168
  this.isTransactionActive = false;
144
- return [3 /*break*/, 16];
145
- case 4:
169
+ return [3 /*break*/, 18];
170
+ case 6:
146
171
  e_1 = _d.sent();
147
- if (!(e_1.code === "40001")) return [3 /*break*/, 15];
172
+ if (!(e_1.code === "40001")) return [3 /*break*/, 17];
148
173
  return [4 /*yield*/, this.query("ROLLBACK TO SAVEPOINT cockroach_restart")];
149
- case 5:
174
+ case 7:
150
175
  _d.sent();
151
- _d.label = 6;
152
- case 6:
153
- _d.trys.push([6, 11, 12, 13]);
176
+ _d.label = 8;
177
+ case 8:
178
+ _d.trys.push([8, 13, 14, 15]);
154
179
  _a = tslib_1.__values(this.queries), _b = _a.next();
155
- _d.label = 7;
156
- case 7:
157
- if (!!_b.done) return [3 /*break*/, 10];
180
+ _d.label = 9;
181
+ case 9:
182
+ if (!!_b.done) return [3 /*break*/, 12];
158
183
  q = _b.value;
159
184
  return [4 /*yield*/, this.query(q.query, q.parameters)];
160
- case 8:
185
+ case 10:
161
186
  _d.sent();
162
- _d.label = 9;
163
- case 9:
164
- _b = _a.next();
165
- return [3 /*break*/, 7];
166
- case 10: return [3 /*break*/, 13];
187
+ _d.label = 11;
167
188
  case 11:
189
+ _b = _a.next();
190
+ return [3 /*break*/, 9];
191
+ case 12: return [3 /*break*/, 15];
192
+ case 13:
168
193
  e_2_1 = _d.sent();
169
194
  e_2 = { error: e_2_1 };
170
- return [3 /*break*/, 13];
171
- case 12:
195
+ return [3 /*break*/, 15];
196
+ case 14:
172
197
  try {
173
198
  if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
174
199
  }
175
200
  finally { if (e_2) throw e_2.error; }
176
201
  return [7 /*endfinally*/];
177
- case 13: return [4 /*yield*/, this.commitTransaction()];
178
- case 14:
202
+ case 15: return [4 /*yield*/, this.commitTransaction()];
203
+ case 16:
204
+ _d.sent();
205
+ _d.label = 17;
206
+ case 17: return [3 /*break*/, 18];
207
+ case 18:
208
+ afterBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
209
+ this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);
210
+ if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 20];
211
+ return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];
212
+ case 19:
179
213
  _d.sent();
180
- _d.label = 15;
181
- case 15: return [3 /*break*/, 16];
182
- case 16: return [2 /*return*/];
214
+ _d.label = 20;
215
+ case 20: return [2 /*return*/];
183
216
  }
184
217
  });
185
218
  });
@@ -190,18 +223,34 @@ var CockroachQueryRunner = /** @class */ (function (_super) {
190
223
  */
191
224
  CockroachQueryRunner.prototype.rollbackTransaction = function () {
192
225
  return tslib_1.__awaiter(this, void 0, void 0, function () {
226
+ var beforeBroadcastResult, afterBroadcastResult;
193
227
  return tslib_1.__generator(this, function (_a) {
194
228
  switch (_a.label) {
195
229
  case 0:
196
230
  if (!this.isTransactionActive)
197
231
  throw new TransactionNotStartedError_1.TransactionNotStartedError();
232
+ beforeBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
233
+ this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);
234
+ if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];
235
+ return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];
236
+ case 1:
237
+ _a.sent();
238
+ _a.label = 2;
239
+ case 2:
198
240
  this.storeQueries = false;
199
241
  return [4 /*yield*/, this.query("ROLLBACK")];
200
- case 1:
242
+ case 3:
201
243
  _a.sent();
202
244
  this.queries = [];
203
245
  this.isTransactionActive = false;
204
- return [2 /*return*/];
246
+ afterBroadcastResult = new BroadcasterResult_1.BroadcasterResult();
247
+ this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);
248
+ if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];
249
+ return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];
250
+ case 4:
251
+ _a.sent();
252
+ _a.label = 5;
253
+ case 5: return [2 /*return*/];
205
254
  }
206
255
  });
207
256
  });
@@ -776,6 +825,11 @@ var CockroachQueryRunner = /** @class */ (function (_super) {
776
825
  upQueries.push(this.createUniqueConstraintSql(table, uniqueConstraint));
777
826
  downQueries.push(this.dropIndexSql(table, uniqueConstraint.name)); // CockroachDB creates indices for unique constraints
778
827
  }
828
+ // create column's comment
829
+ if (column.comment) {
830
+ upQueries.push(new Query_1.Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + column.name + "\" IS " + this.escapeComment(column.comment)));
831
+ downQueries.push(new Query_1.Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + column.name + "\" IS " + this.escapeComment(column.comment)));
832
+ }
779
833
  return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
780
834
  case 4:
781
835
  _b.sent();
@@ -972,8 +1026,8 @@ var CockroachQueryRunner = /** @class */ (function (_super) {
972
1026
  }
973
1027
  }
974
1028
  if (oldColumn.comment !== newColumn.comment) {
975
- upQueries.push(new Query_1.Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + oldColumn.name + "\" IS '" + newColumn.comment + "'"));
976
- downQueries.push(new Query_1.Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + newColumn.name + "\" IS '" + oldColumn.comment + "'"));
1029
+ upQueries.push(new Query_1.Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + oldColumn.name + "\" IS " + this.escapeComment(newColumn.comment)));
1030
+ downQueries.push(new Query_1.Query("COMMENT ON COLUMN " + this.escapePath(table) + ".\"" + newColumn.name + "\" IS " + this.escapeComment(oldColumn.comment)));
977
1031
  }
978
1032
  if (newColumn.isPrimary !== oldColumn.isPrimary) {
979
1033
  primaryColumns = clonedTable.primaryColumns;
@@ -2073,7 +2127,7 @@ var CockroachQueryRunner = /** @class */ (function (_super) {
2073
2127
  return "(\"table_schema\" = '" + schema + "' AND \"table_name\" = '" + name + "')";
2074
2128
  }).join(" OR ");
2075
2129
  tablesSql = "SELECT * FROM \"information_schema\".\"tables\" WHERE " + tablesCondition;
2076
- columnsSql = "SELECT * FROM \"information_schema\".\"columns\" WHERE \"is_hidden\" = 'NO' AND " + tablesCondition;
2130
+ columnsSql = "\n SELECT\n *,\n pg_catalog.col_description(('\"' || table_catalog || '\".\"' || table_schema || '\".\"' || table_name || '\"')::regclass::oid, ordinal_position) as description\n FROM \"information_schema\".\"columns\"\n WHERE \"is_hidden\" = 'NO' AND " + tablesCondition;
2077
2131
  constraintsCondition = tableNames.map(function (tableName) {
2078
2132
  var _a = tslib_1.__read(tableName.split("."), 2), schema = _a[0], name = _a[1];
2079
2133
  if (!name) {
@@ -2215,9 +2269,10 @@ var CockroachQueryRunner = /** @class */ (function (_super) {
2215
2269
  }
2216
2270
  else {
2217
2271
  tableColumn.default = dbColumn["column_default"].replace(/:::.*/, "");
2272
+ tableColumn.default = tableColumn.default.replace(/^(-?[\d\.]+)$/, "($1)");
2218
2273
  }
2219
2274
  }
2220
- tableColumn.comment = ""; // dbColumn["COLUMN_COMMENT"];
2275
+ tableColumn.comment = dbColumn["description"] == null ? undefined : dbColumn["description"];
2221
2276
  if (dbColumn["character_set_name"])
2222
2277
  tableColumn.charset = dbColumn["character_set_name"];
2223
2278
  return [2 /*return*/, tableColumn];
@@ -2361,6 +2416,9 @@ var CockroachQueryRunner = /** @class */ (function (_super) {
2361
2416
  sql += ", CONSTRAINT \"" + primaryKeyName + "\" PRIMARY KEY (" + columnNames + ")";
2362
2417
  }
2363
2418
  sql += ")";
2419
+ table.columns
2420
+ .filter(function (it) { return it.comment; })
2421
+ .forEach(function (it) { return sql += "; COMMENT ON COLUMN " + _this.escapePath(table) + ".\"" + it.name + "\" IS " + _this.escapeComment(it.comment); });
2364
2422
  return new Query_1.Query(sql);
2365
2423
  };
2366
2424
  /**
@@ -2535,6 +2593,18 @@ var CockroachQueryRunner = /** @class */ (function (_super) {
2535
2593
  var columnName = columnOrName instanceof TableColumn_1.TableColumn ? columnOrName.name : columnOrName;
2536
2594
  return disableEscape ? table.name + "_" + columnName + "_seq" : "\"" + table.name + "_" + columnName + "_seq\"";
2537
2595
  };
2596
+ /**
2597
+ * Escapes a given comment so it's safe to include in a query.
2598
+ */
2599
+ CockroachQueryRunner.prototype.escapeComment = function (comment) {
2600
+ if (comment === undefined || comment.length === 0) {
2601
+ return 'NULL';
2602
+ }
2603
+ comment = comment
2604
+ .replace("'", "''")
2605
+ .replace("\0", ""); // Null bytes aren't allowed in comments
2606
+ return "'" + comment + "'";
2607
+ };
2538
2608
  /**
2539
2609
  * Escapes given table or view path.
2540
2610
  */