typeorm 0.3.18-dev.ad5bf11 → 0.3.18-dev.b5ec088

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 (304) hide show
  1. package/browser/cache/DbQueryResultCache.js +3 -0
  2. package/browser/cache/DbQueryResultCache.js.map +1 -1
  3. package/browser/data-source/BaseDataSourceOptions.d.ts +4 -0
  4. package/browser/data-source/BaseDataSourceOptions.js.map +1 -1
  5. package/browser/data-source/DataSource.d.ts +4 -0
  6. package/browser/data-source/DataSource.js +14 -0
  7. package/browser/data-source/DataSource.js.map +1 -1
  8. package/browser/decorator/Index.js +1 -0
  9. package/browser/decorator/Index.js.map +1 -1
  10. package/browser/decorator/options/IndexOptions.d.ts +5 -0
  11. package/browser/decorator/options/IndexOptions.js.map +1 -1
  12. package/browser/driver/Driver.d.ts +4 -0
  13. package/browser/driver/Driver.js.map +1 -1
  14. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +9 -6
  15. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  16. package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js +9 -6
  17. package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
  18. package/browser/driver/cockroachdb/CockroachConnectionOptions.d.ts +6 -0
  19. package/browser/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
  20. package/browser/driver/cockroachdb/CockroachDriver.d.ts +4 -0
  21. package/browser/driver/cockroachdb/CockroachDriver.js +10 -1
  22. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  23. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +6 -1
  24. package/browser/driver/cockroachdb/CockroachQueryRunner.js +46 -17
  25. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  26. package/browser/driver/cordova/CordovaDriver.js +2 -2
  27. package/browser/driver/cordova/CordovaDriver.js.map +1 -1
  28. package/browser/driver/cordova/CordovaQueryRunner.js +8 -0
  29. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  30. package/browser/driver/expo/ExpoQueryRunner.js +9 -2
  31. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  32. package/browser/driver/mysql/MysqlConnectionOptions.d.ts +6 -0
  33. package/browser/driver/mysql/MysqlConnectionOptions.js.map +1 -1
  34. package/browser/driver/mysql/MysqlQueryRunner.js +18 -7
  35. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  36. package/browser/driver/oracle/OracleConnectionOptions.d.ts +14 -0
  37. package/browser/driver/oracle/OracleConnectionOptions.js.map +1 -1
  38. package/browser/driver/oracle/OracleDriver.d.ts +4 -0
  39. package/browser/driver/oracle/OracleDriver.js +17 -2
  40. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  41. package/browser/driver/oracle/OracleQueryRunner.js +14 -4
  42. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  43. package/browser/driver/postgres/PostgresConnectionCredentialsOptions.d.ts +5 -0
  44. package/browser/driver/postgres/PostgresConnectionCredentialsOptions.js.map +1 -1
  45. package/browser/driver/postgres/PostgresConnectionOptions.d.ts +6 -5
  46. package/browser/driver/postgres/PostgresConnectionOptions.js.map +1 -1
  47. package/browser/driver/postgres/PostgresDriver.d.ts +4 -0
  48. package/browser/driver/postgres/PostgresDriver.js +13 -4
  49. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  50. package/browser/driver/postgres/PostgresQueryRunner.js +26 -11
  51. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  52. package/browser/driver/react-native/ReactNativeQueryRunner.js +10 -2
  53. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  54. package/browser/driver/sap/SapQueryRunner.js +22 -10
  55. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  56. package/browser/driver/spanner/SpannerConnectionOptions.d.ts +6 -0
  57. package/browser/driver/spanner/SpannerConnectionOptions.js.map +1 -1
  58. package/browser/driver/spanner/SpannerDriver.d.ts +4 -0
  59. package/browser/driver/spanner/SpannerDriver.js +10 -1
  60. package/browser/driver/spanner/SpannerDriver.js.map +1 -1
  61. package/browser/driver/spanner/SpannerQueryRunner.js +6 -0
  62. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
  63. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  64. package/browser/driver/sqlite/SqliteQueryRunner.js +61 -46
  65. package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  66. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +10 -16
  67. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  68. package/browser/driver/sqljs/SqljsQueryRunner.js +11 -3
  69. package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  70. package/browser/driver/sqlserver/SqlServerConnectionOptions.d.ts +6 -5
  71. package/browser/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
  72. package/browser/driver/sqlserver/SqlServerDriver.d.ts +4 -0
  73. package/browser/driver/sqlserver/SqlServerDriver.js +10 -1
  74. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  75. package/browser/driver/sqlserver/SqlServerQueryRunner.js +12 -5
  76. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  77. package/browser/entity-manager/EntityManager.d.ts +5 -1
  78. package/browser/entity-manager/EntityManager.js +10 -1
  79. package/browser/entity-manager/EntityManager.js.map +1 -1
  80. package/browser/entity-manager/MongoEntityManager.js +4 -8
  81. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  82. package/browser/error/EntityNotFoundError.d.ts +2 -0
  83. package/browser/error/EntityNotFoundError.js +2 -0
  84. package/browser/error/EntityNotFoundError.js.map +1 -1
  85. package/browser/find-options/FindOperatorType.d.ts +1 -1
  86. package/browser/find-options/FindOperatorType.js.map +1 -1
  87. package/browser/find-options/operator/Or.d.ts +2 -0
  88. package/browser/find-options/operator/Or.js +6 -0
  89. package/browser/find-options/operator/Or.js.map +1 -0
  90. package/browser/index.d.ts +1 -0
  91. package/browser/index.js +1 -0
  92. package/browser/index.js.map +1 -1
  93. package/browser/logger/AbstractLogger.js +1 -1
  94. package/browser/logger/AbstractLogger.js.map +1 -1
  95. package/browser/metadata/ColumnMetadata.js +4 -0
  96. package/browser/metadata/ColumnMetadata.js.map +1 -1
  97. package/browser/metadata/EntityMetadata.d.ts +3 -3
  98. package/browser/metadata/EntityMetadata.js +7 -3
  99. package/browser/metadata/EntityMetadata.js.map +1 -1
  100. package/browser/metadata/IndexMetadata.d.ts +5 -0
  101. package/browser/metadata/IndexMetadata.js +1 -0
  102. package/browser/metadata/IndexMetadata.js.map +1 -1
  103. package/browser/metadata-args/IndexMetadataArgs.d.ts +5 -0
  104. package/browser/metadata-args/IndexMetadataArgs.js.map +1 -1
  105. package/browser/persistence/EntityPersistExecutor.js +1 -1
  106. package/browser/persistence/EntityPersistExecutor.js.map +1 -1
  107. package/browser/persistence/SubjectExecutor.js +3 -0
  108. package/browser/persistence/SubjectExecutor.js.map +1 -1
  109. package/browser/platform/BrowserPlatformTools.js +3 -2
  110. package/browser/platform/BrowserPlatformTools.js.map +1 -1
  111. package/browser/query-builder/InsertQueryBuilder.js +19 -6
  112. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  113. package/browser/query-builder/QueryBuilder.d.ts +5 -0
  114. package/browser/query-builder/QueryBuilder.js +35 -23
  115. package/browser/query-builder/QueryBuilder.js.map +1 -1
  116. package/browser/query-builder/QueryExpressionMap.d.ts +2 -1
  117. package/browser/query-builder/QueryExpressionMap.js +0 -4
  118. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  119. package/browser/query-builder/SelectQueryBuilder.js +10 -3
  120. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  121. package/browser/query-builder/WhereClause.d.ts +1 -1
  122. package/browser/query-builder/WhereClause.js.map +1 -1
  123. package/browser/query-builder/index.d.ts +1 -0
  124. package/browser/query-builder/index.js +17 -0
  125. package/browser/query-builder/index.js.map +1 -0
  126. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +9 -0
  127. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +28 -0
  128. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  129. package/browser/repository/BaseEntity.d.ts +12 -0
  130. package/browser/repository/BaseEntity.js +12 -0
  131. package/browser/repository/BaseEntity.js.map +1 -1
  132. package/browser/repository/Repository.d.ts +13 -1
  133. package/browser/repository/Repository.js +17 -1
  134. package/browser/repository/Repository.js.map +1 -1
  135. package/browser/schema-builder/options/TableIndexOptions.d.ts +5 -0
  136. package/browser/schema-builder/options/TableIndexOptions.js.map +1 -1
  137. package/browser/schema-builder/table/TableIndex.d.ts +5 -0
  138. package/browser/schema-builder/table/TableIndex.js +3 -0
  139. package/browser/schema-builder/table/TableIndex.js.map +1 -1
  140. package/browser/subscriber/Broadcaster.d.ts +10 -0
  141. package/browser/subscriber/Broadcaster.js +46 -0
  142. package/browser/subscriber/Broadcaster.js.map +1 -1
  143. package/browser/subscriber/EntitySubscriberInterface.d.ts +9 -0
  144. package/browser/subscriber/EntitySubscriberInterface.js.map +1 -1
  145. package/browser/subscriber/event/QueryEvent.d.ts +50 -0
  146. package/browser/subscriber/event/QueryEvent.js +3 -0
  147. package/browser/subscriber/event/QueryEvent.js.map +1 -0
  148. package/browser/util/DateUtils.js +4 -2
  149. package/browser/util/DateUtils.js.map +1 -1
  150. package/browser/util/OrmUtils.d.ts +6 -0
  151. package/browser/util/OrmUtils.js +66 -0
  152. package/browser/util/OrmUtils.js.map +1 -1
  153. package/cache/DbQueryResultCache.js +3 -0
  154. package/cache/DbQueryResultCache.js.map +1 -1
  155. package/data-source/BaseDataSourceOptions.d.ts +4 -0
  156. package/data-source/BaseDataSourceOptions.js.map +1 -1
  157. package/data-source/DataSource.d.ts +4 -0
  158. package/data-source/DataSource.js +14 -0
  159. package/data-source/DataSource.js.map +1 -1
  160. package/decorator/Index.js +1 -0
  161. package/decorator/Index.js.map +1 -1
  162. package/decorator/options/IndexOptions.d.ts +5 -0
  163. package/decorator/options/IndexOptions.js.map +1 -1
  164. package/driver/Driver.d.ts +4 -0
  165. package/driver/Driver.js.map +1 -1
  166. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +9 -6
  167. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  168. package/driver/aurora-postgres/AuroraPostgresQueryRunner.js +9 -6
  169. package/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
  170. package/driver/cockroachdb/CockroachConnectionOptions.d.ts +6 -0
  171. package/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
  172. package/driver/cockroachdb/CockroachDriver.d.ts +4 -0
  173. package/driver/cockroachdb/CockroachDriver.js +10 -1
  174. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  175. package/driver/cockroachdb/CockroachQueryRunner.d.ts +6 -1
  176. package/driver/cockroachdb/CockroachQueryRunner.js +46 -17
  177. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  178. package/driver/cordova/CordovaDriver.js +2 -2
  179. package/driver/cordova/CordovaDriver.js.map +1 -1
  180. package/driver/cordova/CordovaQueryRunner.js +8 -0
  181. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  182. package/driver/expo/ExpoQueryRunner.js +9 -2
  183. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  184. package/driver/mysql/MysqlConnectionOptions.d.ts +6 -0
  185. package/driver/mysql/MysqlConnectionOptions.js.map +1 -1
  186. package/driver/mysql/MysqlQueryRunner.js +18 -7
  187. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  188. package/driver/oracle/OracleConnectionOptions.d.ts +14 -0
  189. package/driver/oracle/OracleConnectionOptions.js.map +1 -1
  190. package/driver/oracle/OracleDriver.d.ts +4 -0
  191. package/driver/oracle/OracleDriver.js +17 -2
  192. package/driver/oracle/OracleDriver.js.map +1 -1
  193. package/driver/oracle/OracleQueryRunner.js +14 -4
  194. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  195. package/driver/postgres/PostgresConnectionCredentialsOptions.d.ts +5 -0
  196. package/driver/postgres/PostgresConnectionCredentialsOptions.js.map +1 -1
  197. package/driver/postgres/PostgresConnectionOptions.d.ts +6 -5
  198. package/driver/postgres/PostgresConnectionOptions.js.map +1 -1
  199. package/driver/postgres/PostgresDriver.d.ts +4 -0
  200. package/driver/postgres/PostgresDriver.js +13 -4
  201. package/driver/postgres/PostgresDriver.js.map +1 -1
  202. package/driver/postgres/PostgresQueryRunner.js +26 -11
  203. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  204. package/driver/react-native/ReactNativeQueryRunner.js +10 -2
  205. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  206. package/driver/sap/SapQueryRunner.js +22 -10
  207. package/driver/sap/SapQueryRunner.js.map +1 -1
  208. package/driver/spanner/SpannerConnectionOptions.d.ts +6 -0
  209. package/driver/spanner/SpannerConnectionOptions.js.map +1 -1
  210. package/driver/spanner/SpannerDriver.d.ts +4 -0
  211. package/driver/spanner/SpannerDriver.js +10 -1
  212. package/driver/spanner/SpannerDriver.js.map +1 -1
  213. package/driver/spanner/SpannerQueryRunner.js +6 -0
  214. package/driver/spanner/SpannerQueryRunner.js.map +1 -1
  215. package/driver/sqlite/SqliteDriver.js.map +1 -1
  216. package/driver/sqlite/SqliteQueryRunner.js +61 -46
  217. package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  218. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +10 -16
  219. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  220. package/driver/sqljs/SqljsQueryRunner.js +11 -3
  221. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  222. package/driver/sqlserver/SqlServerConnectionOptions.d.ts +6 -5
  223. package/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
  224. package/driver/sqlserver/SqlServerDriver.d.ts +4 -0
  225. package/driver/sqlserver/SqlServerDriver.js +10 -1
  226. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  227. package/driver/sqlserver/SqlServerQueryRunner.js +12 -5
  228. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  229. package/entity-manager/EntityManager.d.ts +5 -1
  230. package/entity-manager/EntityManager.js +10 -1
  231. package/entity-manager/EntityManager.js.map +1 -1
  232. package/entity-manager/MongoEntityManager.js +4 -8
  233. package/entity-manager/MongoEntityManager.js.map +1 -1
  234. package/error/EntityNotFoundError.d.ts +2 -0
  235. package/error/EntityNotFoundError.js +2 -0
  236. package/error/EntityNotFoundError.js.map +1 -1
  237. package/find-options/FindOperatorType.d.ts +1 -1
  238. package/find-options/FindOperatorType.js.map +1 -1
  239. package/find-options/operator/Or.d.ts +2 -0
  240. package/find-options/operator/Or.js +10 -0
  241. package/find-options/operator/Or.js.map +1 -0
  242. package/index.d.ts +1 -0
  243. package/index.js +1 -0
  244. package/index.js.map +1 -1
  245. package/index.mjs +2 -0
  246. package/logger/AbstractLogger.js +1 -1
  247. package/logger/AbstractLogger.js.map +1 -1
  248. package/metadata/ColumnMetadata.js +4 -0
  249. package/metadata/ColumnMetadata.js.map +1 -1
  250. package/metadata/EntityMetadata.d.ts +3 -3
  251. package/metadata/EntityMetadata.js +7 -3
  252. package/metadata/EntityMetadata.js.map +1 -1
  253. package/metadata/IndexMetadata.d.ts +5 -0
  254. package/metadata/IndexMetadata.js +1 -0
  255. package/metadata/IndexMetadata.js.map +1 -1
  256. package/metadata-args/IndexMetadataArgs.d.ts +5 -0
  257. package/metadata-args/IndexMetadataArgs.js.map +1 -1
  258. package/package.json +1 -1
  259. package/persistence/EntityPersistExecutor.js +1 -1
  260. package/persistence/EntityPersistExecutor.js.map +1 -1
  261. package/persistence/SubjectExecutor.js +3 -0
  262. package/persistence/SubjectExecutor.js.map +1 -1
  263. package/query-builder/InsertQueryBuilder.js +19 -6
  264. package/query-builder/InsertQueryBuilder.js.map +1 -1
  265. package/query-builder/QueryBuilder.d.ts +5 -0
  266. package/query-builder/QueryBuilder.js +35 -23
  267. package/query-builder/QueryBuilder.js.map +1 -1
  268. package/query-builder/QueryExpressionMap.d.ts +2 -1
  269. package/query-builder/QueryExpressionMap.js +0 -4
  270. package/query-builder/QueryExpressionMap.js.map +1 -1
  271. package/query-builder/SelectQueryBuilder.js +10 -3
  272. package/query-builder/SelectQueryBuilder.js.map +1 -1
  273. package/query-builder/WhereClause.d.ts +1 -1
  274. package/query-builder/WhereClause.js.map +1 -1
  275. package/query-builder/index.d.ts +1 -0
  276. package/query-builder/index.js +21 -0
  277. package/query-builder/index.js.map +1 -0
  278. package/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +9 -0
  279. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +28 -0
  280. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  281. package/repository/BaseEntity.d.ts +12 -0
  282. package/repository/BaseEntity.js +12 -0
  283. package/repository/BaseEntity.js.map +1 -1
  284. package/repository/Repository.d.ts +13 -1
  285. package/repository/Repository.js +17 -1
  286. package/repository/Repository.js.map +1 -1
  287. package/schema-builder/options/TableIndexOptions.d.ts +5 -0
  288. package/schema-builder/options/TableIndexOptions.js.map +1 -1
  289. package/schema-builder/table/TableIndex.d.ts +5 -0
  290. package/schema-builder/table/TableIndex.js +3 -0
  291. package/schema-builder/table/TableIndex.js.map +1 -1
  292. package/subscriber/Broadcaster.d.ts +10 -0
  293. package/subscriber/Broadcaster.js +46 -0
  294. package/subscriber/Broadcaster.js.map +1 -1
  295. package/subscriber/EntitySubscriberInterface.d.ts +9 -0
  296. package/subscriber/EntitySubscriberInterface.js.map +1 -1
  297. package/subscriber/event/QueryEvent.d.ts +50 -0
  298. package/subscriber/event/QueryEvent.js +4 -0
  299. package/subscriber/event/QueryEvent.js.map +1 -0
  300. package/util/DateUtils.js +5 -2
  301. package/util/DateUtils.js.map +1 -1
  302. package/util/OrmUtils.d.ts +6 -0
  303. package/util/OrmUtils.js +66 -0
  304. package/util/OrmUtils.js.map +1 -1
@@ -48,8 +48,8 @@ class CordovaDriver extends AbstractSqliteDriver_1.AbstractSqliteDriver {
48
48
  name: this.options.database,
49
49
  location: this.options.location,
50
50
  }, this.options.extra || {});
51
- const connection = await new Promise((resolve) => {
52
- this.sqlite.openDatabase(options, (db) => resolve(db));
51
+ const connection = await new Promise((resolve, fail) => {
52
+ this.sqlite.openDatabase(options, (db) => resolve(db), (err) => fail(err));
53
53
  });
54
54
  await new Promise((ok, fail) => {
55
55
  // we need to enable foreign keys in sqlite to make sure all foreign key related features
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/driver/cordova/CordovaDriver.ts"],"names":[],"mappings":";;;AAAA,kFAA8E;AAE9E,6DAAyD;AAGzD,+FAA2F;AAU3F,MAAa,aAAc,SAAQ,2CAAoB;IAKnD,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAY,UAAsB;QAC9B,KAAK,CAAC,UAAU,CAAC,CAAA;QAPrB,uBAAkB,GAAG,MAAe,CAAA;QAShC,gCAAgC;QAChC,iEAAiE;QACjE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;QAErC,sBAAsB;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAA;IAC3B,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;QAE5B,OAAO,IAAI,OAAO,CAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YAClC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,IAAqB;QACnC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,uCAAkB,CAAC,IAAI,CAAC,CAAA;QAEtE,OAAO,IAAI,CAAC,WAAW,CAAA;IAC3B,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;OAEG;IACO,KAAK,CAAC,wBAAwB;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CACzB,EAAE,EACF;YACI,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC3B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;SAClC,EACD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAC3B,CAAA;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,EAAE;YAClD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;QAEF,MAAM,IAAI,OAAO,CAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YACjC,yFAAyF;YACzF,kEAAkE;YAClE,UAAU,CAAC,UAAU,CACjB,0BAA0B,EAC1B,EAAE,EACF,GAAG,EAAE,CAAC,EAAE,EAAE,EACV,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAC1B,CAAA;QACL,CAAC,CAAC,CAAA;QAEF,OAAO,UAAU,CAAA;IACrB,CAAC;IAED;;OAEG;IACO,gBAAgB;QACtB,IAAI;YACA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAA;YACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;SACvB;QAAC,OAAO,CAAC,EAAE;YACR,MAAM,IAAI,+DAA8B,CACpC,gBAAgB,EAChB,wBAAwB,CAC3B,CAAA;SACJ;IACL,CAAC;CACJ;AA7FD,sCA6FC","file":"CordovaDriver.js","sourcesContent":["import { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\"\nimport { CordovaConnectionOptions } from \"./CordovaConnectionOptions\"\nimport { CordovaQueryRunner } from \"./CordovaQueryRunner\"\nimport { QueryRunner } from \"../../query-runner/QueryRunner\"\nimport { DataSource } from \"../../data-source/DataSource\"\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\"\nimport { ReplicationMode } from \"../types/ReplicationMode\"\n\n// needed for typescript compiler\ninterface Window {\n sqlitePlugin: any\n}\n\ndeclare let window: Window\n\nexport class CordovaDriver extends AbstractSqliteDriver {\n options: CordovaConnectionOptions\n\n transactionSupport = \"none\" as const\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource) {\n super(connection)\n\n // this.connection = connection;\n // this.options = connection.options as CordovaConnectionOptions;\n this.database = this.options.database\n\n // load sqlite package\n this.loadDependencies()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Closes connection with database.\n */\n async disconnect(): Promise<void> {\n this.queryRunner = undefined\n\n return new Promise<void>((ok, fail) => {\n this.databaseConnection.close(ok, fail)\n })\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner) this.queryRunner = new CordovaQueryRunner(this)\n\n return this.queryRunner\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n */\n protected async createDatabaseConnection() {\n const options = Object.assign(\n {},\n {\n name: this.options.database,\n location: this.options.location,\n },\n this.options.extra || {},\n )\n\n const connection = await new Promise<any>((resolve) => {\n this.sqlite.openDatabase(options, (db: any) => resolve(db))\n })\n\n await new Promise<void>((ok, fail) => {\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n connection.executeSql(\n `PRAGMA foreign_keys = ON`,\n [],\n () => ok(),\n (err: any) => fail(err),\n )\n })\n\n return connection\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n try {\n const sqlite = this.options.driver || window.sqlitePlugin\n this.sqlite = sqlite\n } catch (e) {\n throw new DriverPackageNotInstalledError(\n \"Cordova-SQLite\",\n \"cordova-sqlite-storage\",\n )\n }\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../src/driver/cordova/CordovaDriver.ts"],"names":[],"mappings":";;;AAAA,kFAA8E;AAE9E,6DAAyD;AAGzD,+FAA2F;AAU3F,MAAa,aAAc,SAAQ,2CAAoB;IAKnD,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAY,UAAsB;QAC9B,KAAK,CAAC,UAAU,CAAC,CAAA;QAPrB,uBAAkB,GAAG,MAAe,CAAA;QAShC,gCAAgC;QAChC,iEAAiE;QACjE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;QAErC,sBAAsB;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAA;IAC3B,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;QAE5B,OAAO,IAAI,OAAO,CAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YAClC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,IAAqB;QACnC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,uCAAkB,CAAC,IAAI,CAAC,CAAA;QAEtE,OAAO,IAAI,CAAC,WAAW,CAAA;IAC3B,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;OAEG;IACO,KAAK,CAAC,wBAAwB;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CACzB,EAAE,EACF;YACI,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC3B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;SAClC,EACD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAC3B,CAAA;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;YACxD,IAAI,CAAC,MAAM,CAAC,YAAY,CACpB,OAAO,EACP,CAAC,EAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EACxB,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAC1B,CAAA;QACL,CAAC,CAAC,CAAA;QAEF,MAAM,IAAI,OAAO,CAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YACjC,yFAAyF;YACzF,kEAAkE;YAClE,UAAU,CAAC,UAAU,CACjB,0BAA0B,EAC1B,EAAE,EACF,GAAG,EAAE,CAAC,EAAE,EAAE,EACV,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAC1B,CAAA;QACL,CAAC,CAAC,CAAA;QAEF,OAAO,UAAU,CAAA;IACrB,CAAC;IAED;;OAEG;IACO,gBAAgB;QACtB,IAAI;YACA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAA;YACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;SACvB;QAAC,OAAO,CAAC,EAAE;YACR,MAAM,IAAI,+DAA8B,CACpC,gBAAgB,EAChB,wBAAwB,CAC3B,CAAA;SACJ;IACL,CAAC;CACJ;AAjGD,sCAiGC","file":"CordovaDriver.js","sourcesContent":["import { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\"\nimport { CordovaConnectionOptions } from \"./CordovaConnectionOptions\"\nimport { CordovaQueryRunner } from \"./CordovaQueryRunner\"\nimport { QueryRunner } from \"../../query-runner/QueryRunner\"\nimport { DataSource } from \"../../data-source/DataSource\"\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\"\nimport { ReplicationMode } from \"../types/ReplicationMode\"\n\n// needed for typescript compiler\ninterface Window {\n sqlitePlugin: any\n}\n\ndeclare let window: Window\n\nexport class CordovaDriver extends AbstractSqliteDriver {\n options: CordovaConnectionOptions\n\n transactionSupport = \"none\" as const\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource) {\n super(connection)\n\n // this.connection = connection;\n // this.options = connection.options as CordovaConnectionOptions;\n this.database = this.options.database\n\n // load sqlite package\n this.loadDependencies()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Closes connection with database.\n */\n async disconnect(): Promise<void> {\n this.queryRunner = undefined\n\n return new Promise<void>((ok, fail) => {\n this.databaseConnection.close(ok, fail)\n })\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner) this.queryRunner = new CordovaQueryRunner(this)\n\n return this.queryRunner\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n */\n protected async createDatabaseConnection() {\n const options = Object.assign(\n {},\n {\n name: this.options.database,\n location: this.options.location,\n },\n this.options.extra || {},\n )\n\n const connection = await new Promise<any>((resolve, fail) => {\n this.sqlite.openDatabase(\n options,\n (db: any) => resolve(db),\n (err: any) => fail(err),\n )\n })\n\n await new Promise<void>((ok, fail) => {\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n connection.executeSql(\n `PRAGMA foreign_keys = ON`,\n [],\n () => ok(),\n (err: any) => fail(err),\n )\n })\n\n return connection\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n try {\n const sqlite = this.options.driver || window.sqlitePlugin\n this.sqlite = sqlite\n } catch (e) {\n throw new DriverPackageNotInstalledError(\n \"Cordova-SQLite\",\n \"cordova-sqlite-storage\",\n )\n }\n }\n}\n"],"sourceRoot":"../.."}
@@ -7,6 +7,7 @@ const AbstractSqliteQueryRunner_1 = require("../sqlite-abstract/AbstractSqliteQu
7
7
  const Broadcaster_1 = require("../../subscriber/Broadcaster");
8
8
  const error_1 = require("../../error");
9
9
  const QueryResult_1 = require("../../query-runner/QueryResult");
10
+ const BroadcasterResult_1 = require("../../subscriber/BroadcasterResult");
10
11
  /**
11
12
  * Runs queries on a single sqlite database connection.
12
13
  */
@@ -39,7 +40,9 @@ class CordovaQueryRunner extends AbstractSqliteQueryRunner_1.AbstractSqliteQuery
39
40
  if (this.isReleased)
40
41
  throw new QueryRunnerAlreadyReleasedError_1.QueryRunnerAlreadyReleasedError();
41
42
  const databaseConnection = await this.connect();
43
+ const broadcasterResult = new BroadcasterResult_1.BroadcasterResult();
42
44
  this.driver.connection.logger.logQuery(query, parameters, this);
45
+ this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters);
43
46
  const queryStartTime = +new Date();
44
47
  try {
45
48
  const raw = await new Promise(async (ok, fail) => {
@@ -49,6 +52,7 @@ class CordovaQueryRunner extends AbstractSqliteQueryRunner_1.AbstractSqliteQuery
49
52
  const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;
50
53
  const queryEndTime = +new Date();
51
54
  const queryExecutionTime = queryEndTime - queryStartTime;
55
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined);
52
56
  if (maxQueryExecutionTime &&
53
57
  queryExecutionTime > maxQueryExecutionTime) {
54
58
  this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);
@@ -74,8 +78,12 @@ class CordovaQueryRunner extends AbstractSqliteQueryRunner_1.AbstractSqliteQuery
74
78
  }
75
79
  catch (err) {
76
80
  this.driver.connection.logger.logQueryError(err, query, parameters, this);
81
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, false, undefined, undefined, err);
77
82
  throw new QueryFailedError_1.QueryFailedError(query, parameters, err);
78
83
  }
84
+ finally {
85
+ await broadcasterResult.wait();
86
+ }
79
87
  }
80
88
  /**
81
89
  * Insert a new row with given values into the given table.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/driver/cordova/CordovaQueryRunner.ts"],"names":[],"mappings":"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","file":"CordovaQueryRunner.js","sourcesContent":["import { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { CordovaDriver } from \"./CordovaDriver\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { TypeORMError } from \"../../error\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class CordovaQueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n driver: CordovaDriver\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: CordovaDriver) {\n super()\n this.driver = driver\n this.connection = driver.connection\n this.broadcaster = new Broadcaster(this)\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF`)\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = ON`)\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n const databaseConnection = await this.connect()\n this.driver.connection.logger.logQuery(query, parameters, this)\n const queryStartTime = +new Date()\n\n try {\n const raw = await new Promise<any>(async (ok, fail) => {\n databaseConnection.executeSql(\n query,\n parameters,\n (raw: any) => ok(raw),\n (err: any) => fail(err),\n )\n })\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime =\n this.driver.options.maxQueryExecutionTime\n const queryEndTime = +new Date()\n const queryExecutionTime = queryEndTime - queryStartTime\n if (\n maxQueryExecutionTime &&\n queryExecutionTime > maxQueryExecutionTime\n ) {\n this.driver.connection.logger.logQuerySlow(\n queryExecutionTime,\n query,\n parameters,\n this,\n )\n }\n\n const result = new QueryResult()\n\n if (query.substr(0, 11) === \"INSERT INTO\") {\n result.raw = raw.insertId\n } else {\n let resultSet = []\n for (let i = 0; i < raw.rows.length; i++) {\n resultSet.push(raw.rows.item(i))\n }\n\n result.records = resultSet\n result.raw = resultSet\n }\n\n if (useStructuredResult) {\n return result\n } else {\n return result.raw\n }\n } catch (err) {\n this.driver.connection.logger.logQueryError(\n err,\n query,\n parameters,\n this,\n )\n throw new QueryFailedError(query, parameters, err)\n }\n }\n\n /**\n * Insert a new row with given values into the given table.\n * Returns value of the generated column if given and generate column exist in the table.\n // todo: implement new syntax\n async insert(tableName: string, keyValues: ObjectLiteral): Promise<InsertResult> {\n const keys = Object.keys(keyValues);\n const columns = keys.map(key => `\"${key}\"`).join(\", \");\n const values = keys.map(key => \"?\").join(\",\");\n const generatedColumns = this.connection.hasMetadata(tableName) ? this.connection.getMetadata(tableName).generatedColumns : [];\n const sql = columns.length > 0 ? (`INSERT INTO \"${tableName}\"(${columns}) VALUES (${values})`) : `INSERT INTO \"${tableName}\" DEFAULT VALUES`;\n const parameters = keys.map(key => keyValues[key]);\n\n return new Promise<InsertResult>(async (ok, fail) => {\n this.driver.connection.logger.logQuery(sql, parameters, this);\n const __this = this;\n const databaseConnection = await this.connect();\n databaseConnection.executeSql(sql, parameters, (resultSet: any) => {\n const generatedMap = generatedColumns.reduce((map, generatedColumn) => {\n const value = generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\" && resultSet.insertId ? resultSet.insertId : keyValues[generatedColumn.databaseName];\n if (!value) return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\n\n ok({\n result: undefined,\n generatedMap: Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n });\n }, (err: any) => {\n __this.driver.connection.logger.logQueryError(err, sql, parameters, this);\n fail(err);\n });\n });\n }*/\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async startTransaction(): Promise<void> {\n throw new TypeORMError(\n \"Transactions are not supported by the Cordova driver\",\n )\n }\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async commitTransaction(): Promise<void> {\n throw new TypeORMError(\n \"Transactions are not supported by the Cordova driver\",\n )\n }\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async rollbackTransaction(): Promise<void> {\n throw new TypeORMError(\n \"Transactions are not supported by the Cordova driver\",\n )\n }\n\n /**\n * Removes all tables from the currently connected database.\n * Be careful with using this method and avoid using it in production or migrations\n * (because it can clear all your database).\n */\n async clearDatabase(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF`)\n try {\n const selectViewDropsQuery = `SELECT 'DROP VIEW \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'view'`\n const dropViewQueries: ObjectLiteral[] = await this.query(\n selectViewDropsQuery,\n )\n\n const selectTableDropsQuery = `SELECT 'DROP TABLE \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'table' AND \"name\" != 'sqlite_sequence'`\n const dropTableQueries: ObjectLiteral[] = await this.query(\n selectTableDropsQuery,\n )\n\n await Promise.all(\n dropViewQueries.map((q) => this.query(q[\"query\"])),\n )\n await Promise.all(\n dropTableQueries.map((q) => this.query(q[\"query\"])),\n )\n } finally {\n await this.query(`PRAGMA foreign_keys = ON`)\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n protected parametrize(\n objectLiteral: ObjectLiteral,\n startIndex: number = 0,\n ): string[] {\n return Object.keys(objectLiteral).map((key, index) => `\"${key}\"` + \"=?\")\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../src/driver/cordova/CordovaQueryRunner.ts"],"names":[],"mappings":"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","file":"CordovaQueryRunner.js","sourcesContent":["import { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { CordovaDriver } from \"./CordovaDriver\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { TypeORMError } from \"../../error\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\"\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class CordovaQueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n driver: CordovaDriver\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: CordovaDriver) {\n super()\n this.driver = driver\n this.connection = driver.connection\n this.broadcaster = new Broadcaster(this)\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF`)\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = ON`)\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n const databaseConnection = await this.connect()\n const broadcasterResult = new BroadcasterResult()\n\n this.driver.connection.logger.logQuery(query, parameters, this)\n this.broadcaster.broadcastBeforeQueryEvent(\n broadcasterResult,\n query,\n parameters,\n )\n\n const queryStartTime = +new Date()\n\n try {\n const raw = await new Promise<any>(async (ok, fail) => {\n databaseConnection.executeSql(\n query,\n parameters,\n (raw: any) => ok(raw),\n (err: any) => fail(err),\n )\n })\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime =\n this.driver.options.maxQueryExecutionTime\n const queryEndTime = +new Date()\n const queryExecutionTime = queryEndTime - queryStartTime\n\n this.broadcaster.broadcastAfterQueryEvent(\n broadcasterResult,\n query,\n parameters,\n true,\n queryExecutionTime,\n raw,\n undefined,\n )\n\n if (\n maxQueryExecutionTime &&\n queryExecutionTime > maxQueryExecutionTime\n ) {\n this.driver.connection.logger.logQuerySlow(\n queryExecutionTime,\n query,\n parameters,\n this,\n )\n }\n\n const result = new QueryResult()\n\n if (query.substr(0, 11) === \"INSERT INTO\") {\n result.raw = raw.insertId\n } else {\n let resultSet = []\n for (let i = 0; i < raw.rows.length; i++) {\n resultSet.push(raw.rows.item(i))\n }\n\n result.records = resultSet\n result.raw = resultSet\n }\n\n if (useStructuredResult) {\n return result\n } else {\n return result.raw\n }\n } catch (err) {\n this.driver.connection.logger.logQueryError(\n err,\n query,\n parameters,\n this,\n )\n this.broadcaster.broadcastAfterQueryEvent(\n broadcasterResult,\n query,\n parameters,\n false,\n undefined,\n undefined,\n err,\n )\n\n throw new QueryFailedError(query, parameters, err)\n } finally {\n await broadcasterResult.wait()\n }\n }\n\n /**\n * Insert a new row with given values into the given table.\n * Returns value of the generated column if given and generate column exist in the table.\n // todo: implement new syntax\n async insert(tableName: string, keyValues: ObjectLiteral): Promise<InsertResult> {\n const keys = Object.keys(keyValues);\n const columns = keys.map(key => `\"${key}\"`).join(\", \");\n const values = keys.map(key => \"?\").join(\",\");\n const generatedColumns = this.connection.hasMetadata(tableName) ? this.connection.getMetadata(tableName).generatedColumns : [];\n const sql = columns.length > 0 ? (`INSERT INTO \"${tableName}\"(${columns}) VALUES (${values})`) : `INSERT INTO \"${tableName}\" DEFAULT VALUES`;\n const parameters = keys.map(key => keyValues[key]);\n\n return new Promise<InsertResult>(async (ok, fail) => {\n this.driver.connection.logger.logQuery(sql, parameters, this);\n const __this = this;\n const databaseConnection = await this.connect();\n databaseConnection.executeSql(sql, parameters, (resultSet: any) => {\n const generatedMap = generatedColumns.reduce((map, generatedColumn) => {\n const value = generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\" && resultSet.insertId ? resultSet.insertId : keyValues[generatedColumn.databaseName];\n if (!value) return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\n\n ok({\n result: undefined,\n generatedMap: Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n });\n }, (err: any) => {\n __this.driver.connection.logger.logQueryError(err, sql, parameters, this);\n fail(err);\n });\n });\n }*/\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async startTransaction(): Promise<void> {\n throw new TypeORMError(\n \"Transactions are not supported by the Cordova driver\",\n )\n }\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async commitTransaction(): Promise<void> {\n throw new TypeORMError(\n \"Transactions are not supported by the Cordova driver\",\n )\n }\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async rollbackTransaction(): Promise<void> {\n throw new TypeORMError(\n \"Transactions are not supported by the Cordova driver\",\n )\n }\n\n /**\n * Removes all tables from the currently connected database.\n * Be careful with using this method and avoid using it in production or migrations\n * (because it can clear all your database).\n */\n async clearDatabase(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF`)\n try {\n const selectViewDropsQuery = `SELECT 'DROP VIEW \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'view'`\n const dropViewQueries: ObjectLiteral[] = await this.query(\n selectViewDropsQuery,\n )\n\n const selectTableDropsQuery = `SELECT 'DROP TABLE \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'table' AND \"name\" != 'sqlite_sequence'`\n const dropTableQueries: ObjectLiteral[] = await this.query(\n selectTableDropsQuery,\n )\n\n await Promise.all(\n dropViewQueries.map((q) => this.query(q[\"query\"])),\n )\n await Promise.all(\n dropTableQueries.map((q) => this.query(q[\"query\"])),\n )\n } finally {\n await this.query(`PRAGMA foreign_keys = ON`)\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n protected parametrize(\n objectLiteral: ObjectLiteral,\n startIndex: number = 0,\n ): string[] {\n return Object.keys(objectLiteral).map((key, index) => `\"${key}\"` + \"=?\")\n }\n}\n"],"sourceRoot":"../.."}
@@ -7,6 +7,7 @@ const AbstractSqliteQueryRunner_1 = require("../sqlite-abstract/AbstractSqliteQu
7
7
  const TransactionNotStartedError_1 = require("../../error/TransactionNotStartedError");
8
8
  const Broadcaster_1 = require("../../subscriber/Broadcaster");
9
9
  const QueryResult_1 = require("../../query-runner/QueryResult");
10
+ const BroadcasterResult_1 = require("../../subscriber/BroadcasterResult");
10
11
  /**
11
12
  * Runs queries on a single sqlite database connection.
12
13
  */
@@ -104,7 +105,9 @@ class ExpoQueryRunner extends AbstractSqliteQueryRunner_1.AbstractSqliteQueryRun
104
105
  throw new QueryRunnerAlreadyReleasedError_1.QueryRunnerAlreadyReleasedError();
105
106
  return new Promise(async (ok, fail) => {
106
107
  const databaseConnection = await this.connect();
108
+ const broadcasterResult = new BroadcasterResult_1.BroadcasterResult();
107
109
  this.driver.connection.logger.logQuery(query, parameters, this);
110
+ this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters);
108
111
  const queryStartTime = +new Date();
109
112
  // All Expo SQL queries are executed in a transaction context
110
113
  databaseConnection.transaction(async (transaction) => {
@@ -112,11 +115,13 @@ class ExpoQueryRunner extends AbstractSqliteQueryRunner_1.AbstractSqliteQueryRun
112
115
  await this.startTransaction();
113
116
  this.transaction = transaction;
114
117
  }
115
- this.transaction.executeSql(query, parameters, (t, raw) => {
118
+ this.transaction.executeSql(query, parameters, async (t, raw) => {
116
119
  // log slow queries if maxQueryExecution time is set
117
120
  const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;
118
121
  const queryEndTime = +new Date();
119
122
  const queryExecutionTime = queryEndTime - queryStartTime;
123
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined);
124
+ await broadcasterResult.wait();
120
125
  if (maxQueryExecutionTime &&
121
126
  queryExecutionTime > maxQueryExecutionTime) {
122
127
  this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);
@@ -143,8 +148,10 @@ class ExpoQueryRunner extends AbstractSqliteQueryRunner_1.AbstractSqliteQueryRun
143
148
  else {
144
149
  ok(result.raw);
145
150
  }
146
- }, (t, err) => {
151
+ }, async (t, err) => {
147
152
  this.driver.connection.logger.logQueryError(err, query, parameters, this);
153
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, false, undefined, undefined, err);
154
+ await broadcasterResult.wait();
148
155
  fail(new QueryFailedError_1.QueryFailedError(query, parameters, err));
149
156
  });
150
157
  }, async (err) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/driver/expo/ExpoQueryRunner.ts"],"names":[],"mappings":"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","file":"ExpoQueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\"\nimport { ExpoDriver } from \"./ExpoDriver\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\n\n// Needed to satisfy the Typescript compiler\ninterface IResultSet {\n insertId: number | undefined\n rowsAffected: number\n rows: {\n length: number\n item: (idx: number) => any\n _array: any[]\n }\n}\ninterface ITransaction {\n executeSql: (\n sql: string,\n args: any[] | undefined,\n ok: (tsx: ITransaction, resultSet: IResultSet) => void,\n fail: (tsx: ITransaction, err: any) => void,\n ) => void\n}\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class ExpoQueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n driver: ExpoDriver\n\n /**\n * Database transaction object\n */\n private transaction?: ITransaction\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: ExpoDriver) {\n super()\n this.driver = driver\n this.connection = driver.connection\n this.broadcaster = new Broadcaster(this)\n }\n\n /**\n * Starts transaction. Within Expo, all database operations happen in a\n * transaction context, so issuing a `BEGIN TRANSACTION` command is\n * redundant and will result in the following error:\n *\n * `Error: Error code 1: cannot start a transaction within a transaction`\n *\n * Instead, we keep track of a `Transaction` object in `this.transaction`\n * and continue using the same object until we wish to commit the\n * transaction.\n */\n async startTransaction(): Promise<void> {\n this.isTransactionActive = true\n try {\n await this.broadcaster.broadcast(\"BeforeTransactionStart\")\n } catch (err) {\n this.isTransactionActive = false\n throw err\n }\n\n this.transactionDepth += 1\n\n await this.broadcaster.broadcast(\"AfterTransactionStart\")\n }\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n * Since Expo will automatically commit the transaction once all the\n * callbacks of the transaction object have been completed, \"committing\" a\n * transaction in this driver's context means that we delete the transaction\n * object and set the stage for the next transaction.\n */\n async commitTransaction(): Promise<void> {\n if (\n !this.isTransactionActive &&\n typeof this.transaction === \"undefined\"\n )\n throw new TransactionNotStartedError()\n\n await this.broadcaster.broadcast(\"BeforeTransactionCommit\")\n\n this.transaction = undefined\n this.isTransactionActive = false\n\n this.transactionDepth -= 1\n\n await this.broadcaster.broadcast(\"AfterTransactionCommit\")\n }\n\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n * This method's functionality is identical to `commitTransaction()` because\n * the transaction lifecycle is handled within the Expo transaction object.\n * Issuing separate statements for `COMMIT` or `ROLLBACK` aren't necessary.\n */\n async rollbackTransaction(): Promise<void> {\n if (\n !this.isTransactionActive &&\n typeof this.transaction === \"undefined\"\n )\n throw new TransactionNotStartedError()\n\n await this.broadcaster.broadcast(\"BeforeTransactionRollback\")\n\n this.transaction = undefined\n this.isTransactionActive = false\n\n this.transactionDepth -= 1\n\n await this.broadcaster.broadcast(\"AfterTransactionRollback\")\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n const databaseConnection = await this.connect()\n return new Promise((ok, fail) => {\n databaseConnection.exec(\n [{ sql: \"PRAGMA foreign_keys = OFF\", args: [] }],\n false,\n (err: any) => (err ? fail(err) : ok()),\n )\n })\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n const databaseConnection = await this.connect()\n return new Promise((ok, fail) => {\n databaseConnection.exec(\n [{ sql: \"PRAGMA foreign_keys = ON\", args: [] }],\n false,\n (err: any) => (err ? fail(err) : ok()),\n )\n })\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n return new Promise<any>(async (ok, fail) => {\n const databaseConnection = await this.connect()\n this.driver.connection.logger.logQuery(query, parameters, this)\n const queryStartTime = +new Date()\n // All Expo SQL queries are executed in a transaction context\n databaseConnection.transaction(\n async (transaction: ITransaction) => {\n if (typeof this.transaction === \"undefined\") {\n await this.startTransaction()\n this.transaction = transaction\n }\n this.transaction.executeSql(\n query,\n parameters,\n (t: ITransaction, raw: IResultSet) => {\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime =\n this.driver.options.maxQueryExecutionTime\n const queryEndTime = +new Date()\n const queryExecutionTime =\n queryEndTime - queryStartTime\n if (\n maxQueryExecutionTime &&\n queryExecutionTime > maxQueryExecutionTime\n ) {\n this.driver.connection.logger.logQuerySlow(\n queryExecutionTime,\n query,\n parameters,\n this,\n )\n }\n\n const result = new QueryResult()\n\n if (raw?.hasOwnProperty(\"rowsAffected\")) {\n result.affected = raw.rowsAffected\n }\n\n if (raw?.hasOwnProperty(\"rows\")) {\n let resultSet = []\n for (let i = 0; i < raw.rows.length; i++) {\n resultSet.push(raw.rows.item(i))\n }\n\n result.raw = resultSet\n result.records = resultSet\n }\n\n // return id of inserted row, if query was insert statement.\n if (query.startsWith(\"INSERT INTO\")) {\n result.raw = raw.insertId\n }\n\n if (useStructuredResult) {\n ok(result)\n } else {\n ok(result.raw)\n }\n },\n (t: ITransaction, err: any) => {\n this.driver.connection.logger.logQueryError(\n err,\n query,\n parameters,\n this,\n )\n fail(new QueryFailedError(query, parameters, err))\n },\n )\n },\n async (err: any) => {\n await this.rollbackTransaction()\n fail(err)\n },\n () => {\n this.isTransactionActive = false\n this.transaction = undefined\n },\n )\n })\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../src/driver/expo/ExpoQueryRunner.ts"],"names":[],"mappings":"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","file":"ExpoQueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\"\nimport { ExpoDriver } from \"./ExpoDriver\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\"\n\n// Needed to satisfy the Typescript compiler\ninterface IResultSet {\n insertId: number | undefined\n rowsAffected: number\n rows: {\n length: number\n item: (idx: number) => any\n _array: any[]\n }\n}\ninterface ITransaction {\n executeSql: (\n sql: string,\n args: any[] | undefined,\n ok: (tsx: ITransaction, resultSet: IResultSet) => void,\n fail: (tsx: ITransaction, err: any) => void,\n ) => void\n}\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class ExpoQueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n driver: ExpoDriver\n\n /**\n * Database transaction object\n */\n private transaction?: ITransaction\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: ExpoDriver) {\n super()\n this.driver = driver\n this.connection = driver.connection\n this.broadcaster = new Broadcaster(this)\n }\n\n /**\n * Starts transaction. Within Expo, all database operations happen in a\n * transaction context, so issuing a `BEGIN TRANSACTION` command is\n * redundant and will result in the following error:\n *\n * `Error: Error code 1: cannot start a transaction within a transaction`\n *\n * Instead, we keep track of a `Transaction` object in `this.transaction`\n * and continue using the same object until we wish to commit the\n * transaction.\n */\n async startTransaction(): Promise<void> {\n this.isTransactionActive = true\n try {\n await this.broadcaster.broadcast(\"BeforeTransactionStart\")\n } catch (err) {\n this.isTransactionActive = false\n throw err\n }\n\n this.transactionDepth += 1\n\n await this.broadcaster.broadcast(\"AfterTransactionStart\")\n }\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n * Since Expo will automatically commit the transaction once all the\n * callbacks of the transaction object have been completed, \"committing\" a\n * transaction in this driver's context means that we delete the transaction\n * object and set the stage for the next transaction.\n */\n async commitTransaction(): Promise<void> {\n if (\n !this.isTransactionActive &&\n typeof this.transaction === \"undefined\"\n )\n throw new TransactionNotStartedError()\n\n await this.broadcaster.broadcast(\"BeforeTransactionCommit\")\n\n this.transaction = undefined\n this.isTransactionActive = false\n\n this.transactionDepth -= 1\n\n await this.broadcaster.broadcast(\"AfterTransactionCommit\")\n }\n\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n * This method's functionality is identical to `commitTransaction()` because\n * the transaction lifecycle is handled within the Expo transaction object.\n * Issuing separate statements for `COMMIT` or `ROLLBACK` aren't necessary.\n */\n async rollbackTransaction(): Promise<void> {\n if (\n !this.isTransactionActive &&\n typeof this.transaction === \"undefined\"\n )\n throw new TransactionNotStartedError()\n\n await this.broadcaster.broadcast(\"BeforeTransactionRollback\")\n\n this.transaction = undefined\n this.isTransactionActive = false\n\n this.transactionDepth -= 1\n\n await this.broadcaster.broadcast(\"AfterTransactionRollback\")\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n const databaseConnection = await this.connect()\n return new Promise((ok, fail) => {\n databaseConnection.exec(\n [{ sql: \"PRAGMA foreign_keys = OFF\", args: [] }],\n false,\n (err: any) => (err ? fail(err) : ok()),\n )\n })\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n const databaseConnection = await this.connect()\n return new Promise((ok, fail) => {\n databaseConnection.exec(\n [{ sql: \"PRAGMA foreign_keys = ON\", args: [] }],\n false,\n (err: any) => (err ? fail(err) : ok()),\n )\n })\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n return new Promise<any>(async (ok, fail) => {\n const databaseConnection = await this.connect()\n const broadcasterResult = new BroadcasterResult()\n\n this.driver.connection.logger.logQuery(query, parameters, this)\n this.broadcaster.broadcastBeforeQueryEvent(\n broadcasterResult,\n query,\n parameters,\n )\n\n const queryStartTime = +new Date()\n // All Expo SQL queries are executed in a transaction context\n databaseConnection.transaction(\n async (transaction: ITransaction) => {\n if (typeof this.transaction === \"undefined\") {\n await this.startTransaction()\n this.transaction = transaction\n }\n this.transaction.executeSql(\n query,\n parameters,\n async (t: ITransaction, raw: IResultSet) => {\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime =\n this.driver.options.maxQueryExecutionTime\n const queryEndTime = +new Date()\n const queryExecutionTime =\n queryEndTime - queryStartTime\n\n this.broadcaster.broadcastAfterQueryEvent(\n broadcasterResult,\n query,\n parameters,\n true,\n queryExecutionTime,\n raw,\n undefined,\n )\n await broadcasterResult.wait()\n\n if (\n maxQueryExecutionTime &&\n queryExecutionTime > maxQueryExecutionTime\n ) {\n this.driver.connection.logger.logQuerySlow(\n queryExecutionTime,\n query,\n parameters,\n this,\n )\n }\n\n const result = new QueryResult()\n\n if (raw?.hasOwnProperty(\"rowsAffected\")) {\n result.affected = raw.rowsAffected\n }\n\n if (raw?.hasOwnProperty(\"rows\")) {\n let resultSet = []\n for (let i = 0; i < raw.rows.length; i++) {\n resultSet.push(raw.rows.item(i))\n }\n\n result.raw = resultSet\n result.records = resultSet\n }\n\n // return id of inserted row, if query was insert statement.\n if (query.startsWith(\"INSERT INTO\")) {\n result.raw = raw.insertId\n }\n\n if (useStructuredResult) {\n ok(result)\n } else {\n ok(result.raw)\n }\n },\n async (t: ITransaction, err: any) => {\n this.driver.connection.logger.logQueryError(\n err,\n query,\n parameters,\n this,\n )\n this.broadcaster.broadcastAfterQueryEvent(\n broadcasterResult,\n query,\n parameters,\n false,\n undefined,\n undefined,\n err,\n )\n await broadcasterResult.wait()\n\n fail(new QueryFailedError(query, parameters, err))\n },\n )\n },\n async (err: any) => {\n await this.rollbackTransaction()\n fail(err)\n },\n () => {\n this.isTransactionActive = false\n this.transaction = undefined\n },\n )\n })\n }\n}\n"],"sourceRoot":"../.."}
@@ -1,4 +1,5 @@
1
1
  import { BaseDataSourceOptions } from "../../data-source/BaseDataSourceOptions";
2
+ import { ReplicationMode } from "../types/ReplicationMode";
2
3
  import { MysqlConnectionCredentialsOptions } from "./MysqlConnectionCredentialsOptions";
3
4
  /**
4
5
  * MySQL specific connection options.
@@ -122,5 +123,10 @@ export interface MysqlConnectionOptions extends BaseDataSourceOptions, MysqlConn
122
123
  * ORDER: Select the first node available unconditionally.
123
124
  */
124
125
  readonly selector?: "RR" | "RANDOM" | "ORDER";
126
+ /**
127
+ * Default connection pool to use for SELECT queries
128
+ * @default "slave"
129
+ */
130
+ readonly defaultMode?: ReplicationMode;
125
131
  };
126
132
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/driver/mysql/MysqlConnectionOptions.ts"],"names":[],"mappings":"","file":"MysqlConnectionOptions.js","sourcesContent":["import { BaseDataSourceOptions } from \"../../data-source/BaseDataSourceOptions\"\nimport { MysqlConnectionCredentialsOptions } from \"./MysqlConnectionCredentialsOptions\"\n\n/**\n * MySQL specific connection options.\n *\n * @see https://github.com/mysqljs/mysql#connection-options\n */\nexport interface MysqlConnectionOptions\n extends BaseDataSourceOptions,\n MysqlConnectionCredentialsOptions {\n /**\n * Database type.\n */\n readonly type: \"mysql\" | \"mariadb\"\n\n /**\n * The driver object\n * This defaults to require(\"mysql\").\n * Falls back to require(\"mysql2\")\n */\n readonly driver?: any\n\n /**\n * The charset for the connection. This is called \"collation\" in the SQL-level of MySQL (like utf8_general_ci).\n * If a SQL-level charset is specified (like utf8mb4) then the default collation for that charset is used.\n * Default: 'UTF8_GENERAL_CI'\n */\n readonly charset?: string\n\n /**\n * The timezone configured on the MySQL server.\n * This is used to type cast server date/time values to JavaScript Date object and vice versa.\n * This can be 'local', 'Z', or an offset in the form +HH:MM or -HH:MM. (Default: 'local')\n */\n readonly timezone?: string\n\n /**\n * The milliseconds before a timeout occurs during the initial connection to the MySQL server. (Default: 10000)\n */\n readonly connectTimeout?: number\n\n /**\n * The milliseconds before a timeout occurs during the initial connection to the MySQL server. (Default: 10000)\n * This difference between connectTimeout and acquireTimeout is subtle and is described in the mysqljs/mysql docs\n * https://github.com/mysqljs/mysql/tree/master#pool-options\n */\n readonly acquireTimeout?: number\n\n /**\n * Allow connecting to MySQL instances that ask for the old (insecure) authentication method. (Default: false)\n */\n readonly insecureAuth?: boolean\n\n /**\n * When dealing with big numbers (BIGINT and DECIMAL columns) in the database, you should enable this option (Default: false)\n */\n readonly supportBigNumbers?: boolean\n\n /**\n * Enabling both supportBigNumbers and bigNumberStrings forces big numbers (BIGINT and DECIMAL columns) to be always\n * returned as JavaScript String objects (Default: false). Enabling supportBigNumbers but leaving bigNumberStrings\n * disabled will return big numbers as String objects only when they cannot be accurately represented with\n * [JavaScript Number objects](http://ecma262-5.com/ELS5_HTML.htm#Section_8.5) (which happens when they exceed the [-2^53, +2^53] range),\n * otherwise they will be returned as Number objects. This option is ignored if supportBigNumbers is disabled.\n */\n readonly bigNumberStrings?: boolean\n\n /**\n * Force date types (TIMESTAMP, DATETIME, DATE) to be returned as strings rather then inflated into JavaScript Date objects.\n * Can be true/false or an array of type names to keep as strings.\n */\n readonly dateStrings?: boolean | string[]\n\n /**\n * Prints protocol details to stdout. Can be true/false or an array of packet type names that should be printed.\n * (Default: false)\n */\n readonly debug?: boolean | string[]\n\n /**\n * Generates stack traces on Error to include call site of library entrance (\"long stack traces\").\n * Slight performance penalty for most calls. (Default: true)\n */\n readonly trace?: boolean\n\n /**\n * Allow multiple mysql statements per query. Be careful with this, it could increase the scope of SQL injection attacks.\n * (Default: false)\n */\n readonly multipleStatements?: boolean\n\n /**\n * Use spatial functions like GeomFromText and AsText which are removed in MySQL 8.\n * (Default: true)\n */\n readonly legacySpatialSupport?: boolean\n\n /**\n * List of connection flags to use other than the default ones. It is also possible to blacklist default ones.\n * For more information, check https://github.com/mysqljs/mysql#connection-flags.\n */\n readonly flags?: string[]\n\n /**\n * TypeORM will automatically use package found in your node_modules, prioritizing mysql over mysql2,\n * but you can specify it manually\n */\n readonly connectorPackage?: \"mysql\" | \"mysql2\"\n\n /**\n * Replication setup.\n */\n readonly replication?: {\n /**\n * Master server used by orm to perform writes.\n */\n readonly master: MysqlConnectionCredentialsOptions\n\n /**\n * List of read-from severs (slaves).\n */\n readonly slaves: MysqlConnectionCredentialsOptions[]\n\n /**\n * If true, PoolCluster will attempt to reconnect when connection fails. (Default: true)\n */\n readonly canRetry?: boolean\n\n /**\n * If connection fails, node's errorCount increases.\n * When errorCount is greater than removeNodeErrorCount, remove a node in the PoolCluster. (Default: 5)\n */\n readonly removeNodeErrorCount?: number\n\n /**\n * If connection fails, specifies the number of milliseconds before another connection attempt will be made.\n * If set to 0, then node will be removed instead and never re-used. (Default: 0)\n */\n readonly restoreNodeTimeout?: number\n\n /**\n * Determines how slaves are selected:\n * RR: Select one alternately (Round-Robin).\n * RANDOM: Select the node by random function.\n * ORDER: Select the first node available unconditionally.\n */\n readonly selector?: \"RR\" | \"RANDOM\" | \"ORDER\"\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../src/driver/mysql/MysqlConnectionOptions.ts"],"names":[],"mappings":"","file":"MysqlConnectionOptions.js","sourcesContent":["import { BaseDataSourceOptions } from \"../../data-source/BaseDataSourceOptions\"\nimport { ReplicationMode } from \"../types/ReplicationMode\"\nimport { MysqlConnectionCredentialsOptions } from \"./MysqlConnectionCredentialsOptions\"\n\n/**\n * MySQL specific connection options.\n *\n * @see https://github.com/mysqljs/mysql#connection-options\n */\nexport interface MysqlConnectionOptions\n extends BaseDataSourceOptions,\n MysqlConnectionCredentialsOptions {\n /**\n * Database type.\n */\n readonly type: \"mysql\" | \"mariadb\"\n\n /**\n * The driver object\n * This defaults to require(\"mysql\").\n * Falls back to require(\"mysql2\")\n */\n readonly driver?: any\n\n /**\n * The charset for the connection. This is called \"collation\" in the SQL-level of MySQL (like utf8_general_ci).\n * If a SQL-level charset is specified (like utf8mb4) then the default collation for that charset is used.\n * Default: 'UTF8_GENERAL_CI'\n */\n readonly charset?: string\n\n /**\n * The timezone configured on the MySQL server.\n * This is used to type cast server date/time values to JavaScript Date object and vice versa.\n * This can be 'local', 'Z', or an offset in the form +HH:MM or -HH:MM. (Default: 'local')\n */\n readonly timezone?: string\n\n /**\n * The milliseconds before a timeout occurs during the initial connection to the MySQL server. (Default: 10000)\n */\n readonly connectTimeout?: number\n\n /**\n * The milliseconds before a timeout occurs during the initial connection to the MySQL server. (Default: 10000)\n * This difference between connectTimeout and acquireTimeout is subtle and is described in the mysqljs/mysql docs\n * https://github.com/mysqljs/mysql/tree/master#pool-options\n */\n readonly acquireTimeout?: number\n\n /**\n * Allow connecting to MySQL instances that ask for the old (insecure) authentication method. (Default: false)\n */\n readonly insecureAuth?: boolean\n\n /**\n * When dealing with big numbers (BIGINT and DECIMAL columns) in the database, you should enable this option (Default: false)\n */\n readonly supportBigNumbers?: boolean\n\n /**\n * Enabling both supportBigNumbers and bigNumberStrings forces big numbers (BIGINT and DECIMAL columns) to be always\n * returned as JavaScript String objects (Default: false). Enabling supportBigNumbers but leaving bigNumberStrings\n * disabled will return big numbers as String objects only when they cannot be accurately represented with\n * [JavaScript Number objects](http://ecma262-5.com/ELS5_HTML.htm#Section_8.5) (which happens when they exceed the [-2^53, +2^53] range),\n * otherwise they will be returned as Number objects. This option is ignored if supportBigNumbers is disabled.\n */\n readonly bigNumberStrings?: boolean\n\n /**\n * Force date types (TIMESTAMP, DATETIME, DATE) to be returned as strings rather then inflated into JavaScript Date objects.\n * Can be true/false or an array of type names to keep as strings.\n */\n readonly dateStrings?: boolean | string[]\n\n /**\n * Prints protocol details to stdout. Can be true/false or an array of packet type names that should be printed.\n * (Default: false)\n */\n readonly debug?: boolean | string[]\n\n /**\n * Generates stack traces on Error to include call site of library entrance (\"long stack traces\").\n * Slight performance penalty for most calls. (Default: true)\n */\n readonly trace?: boolean\n\n /**\n * Allow multiple mysql statements per query. Be careful with this, it could increase the scope of SQL injection attacks.\n * (Default: false)\n */\n readonly multipleStatements?: boolean\n\n /**\n * Use spatial functions like GeomFromText and AsText which are removed in MySQL 8.\n * (Default: true)\n */\n readonly legacySpatialSupport?: boolean\n\n /**\n * List of connection flags to use other than the default ones. It is also possible to blacklist default ones.\n * For more information, check https://github.com/mysqljs/mysql#connection-flags.\n */\n readonly flags?: string[]\n\n /**\n * TypeORM will automatically use package found in your node_modules, prioritizing mysql over mysql2,\n * but you can specify it manually\n */\n readonly connectorPackage?: \"mysql\" | \"mysql2\"\n\n /**\n * Replication setup.\n */\n readonly replication?: {\n /**\n * Master server used by orm to perform writes.\n */\n readonly master: MysqlConnectionCredentialsOptions\n\n /**\n * List of read-from severs (slaves).\n */\n readonly slaves: MysqlConnectionCredentialsOptions[]\n\n /**\n * If true, PoolCluster will attempt to reconnect when connection fails. (Default: true)\n */\n readonly canRetry?: boolean\n\n /**\n * If connection fails, node's errorCount increases.\n * When errorCount is greater than removeNodeErrorCount, remove a node in the PoolCluster. (Default: 5)\n */\n readonly removeNodeErrorCount?: number\n\n /**\n * If connection fails, specifies the number of milliseconds before another connection attempt will be made.\n * If set to 0, then node will be removed instead and never re-used. (Default: 0)\n */\n readonly restoreNodeTimeout?: number\n\n /**\n * Determines how slaves are selected:\n * RR: Select one alternately (Round-Robin).\n * RANDOM: Select the node by random function.\n * ORDER: Select the first node available unconditionally.\n */\n readonly selector?: \"RR\" | \"RANDOM\" | \"ORDER\"\n\n /**\n * Default connection pool to use for SELECT queries\n * @default \"slave\"\n */\n readonly defaultMode?: ReplicationMode\n }\n}\n"],"sourceRoot":"../.."}
@@ -19,6 +19,7 @@ const VersionUtils_1 = require("../../util/VersionUtils");
19
19
  const error_1 = require("../../error");
20
20
  const MetadataTableType_1 = require("../types/MetadataTableType");
21
21
  const InstanceChecker_1 = require("../../util/InstanceChecker");
22
+ const BroadcasterResult_1 = require("../../subscriber/BroadcasterResult");
22
23
  /**
23
24
  * Runs queries on a single mysql database connection.
24
25
  */
@@ -87,15 +88,16 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
87
88
  throw err;
88
89
  }
89
90
  if (this.transactionDepth === 0) {
91
+ this.transactionDepth += 1;
90
92
  if (isolationLevel) {
91
93
  await this.query("SET TRANSACTION ISOLATION LEVEL " + isolationLevel);
92
94
  }
93
95
  await this.query("START TRANSACTION");
94
96
  }
95
97
  else {
96
- await this.query(`SAVEPOINT typeorm_${this.transactionDepth}`);
98
+ this.transactionDepth += 1;
99
+ await this.query(`SAVEPOINT typeorm_${this.transactionDepth - 1}`);
97
100
  }
98
- this.transactionDepth += 1;
99
101
  await this.broadcaster.broadcast("AfterTransactionStart");
100
102
  }
101
103
  /**
@@ -107,13 +109,14 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
107
109
  throw new TransactionNotStartedError_1.TransactionNotStartedError();
108
110
  await this.broadcaster.broadcast("BeforeTransactionCommit");
109
111
  if (this.transactionDepth > 1) {
110
- await this.query(`RELEASE SAVEPOINT typeorm_${this.transactionDepth - 1}`);
112
+ this.transactionDepth -= 1;
113
+ await this.query(`RELEASE SAVEPOINT typeorm_${this.transactionDepth}`);
111
114
  }
112
115
  else {
116
+ this.transactionDepth -= 1;
113
117
  await this.query("COMMIT");
114
118
  this.isTransactionActive = false;
115
119
  }
116
- this.transactionDepth -= 1;
117
120
  await this.broadcaster.broadcast("AfterTransactionCommit");
118
121
  }
119
122
  /**
@@ -125,13 +128,14 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
125
128
  throw new TransactionNotStartedError_1.TransactionNotStartedError();
126
129
  await this.broadcaster.broadcast("BeforeTransactionRollback");
127
130
  if (this.transactionDepth > 1) {
128
- await this.query(`ROLLBACK TO SAVEPOINT typeorm_${this.transactionDepth - 1}`);
131
+ this.transactionDepth -= 1;
132
+ await this.query(`ROLLBACK TO SAVEPOINT typeorm_${this.transactionDepth}`);
129
133
  }
130
134
  else {
135
+ this.transactionDepth -= 1;
131
136
  await this.query("ROLLBACK");
132
137
  this.isTransactionActive = false;
133
138
  }
134
- this.transactionDepth -= 1;
135
139
  await this.broadcaster.broadcast("AfterTransactionRollback");
136
140
  }
137
141
  /**
@@ -141,11 +145,13 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
141
145
  if (this.isReleased)
142
146
  throw new QueryRunnerAlreadyReleasedError_1.QueryRunnerAlreadyReleasedError();
143
147
  return new Promise(async (ok, fail) => {
148
+ const broadcasterResult = new BroadcasterResult_1.BroadcasterResult();
144
149
  try {
145
150
  const databaseConnection = await this.connect();
146
151
  this.driver.connection.logger.logQuery(query, parameters, this);
152
+ this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters);
147
153
  const queryStartTime = +new Date();
148
- databaseConnection.query(query, parameters, (err, raw) => {
154
+ databaseConnection.query(query, parameters, async (err, raw) => {
149
155
  // log slow queries if maxQueryExecution time is set
150
156
  const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;
151
157
  const queryEndTime = +new Date();
@@ -155,8 +161,10 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
155
161
  this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);
156
162
  if (err) {
157
163
  this.driver.connection.logger.logQueryError(err, query, parameters, this);
164
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, false, undefined, undefined, err);
158
165
  return fail(new QueryFailedError_1.QueryFailedError(query, parameters, err));
159
166
  }
167
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined);
160
168
  const result = new QueryResult_1.QueryResult();
161
169
  result.raw = raw;
162
170
  try {
@@ -179,6 +187,9 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
179
187
  catch (err) {
180
188
  fail(err);
181
189
  }
190
+ finally {
191
+ await broadcasterResult.wait();
192
+ }
182
193
  });
183
194
  }
184
195
  /**