typeorm 0.2.39-dev.cf281ef → 0.2.39-dev.e4d4636

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 (112) hide show
  1. package/README.md +36 -36
  2. package/browser/decorator/entity-view/ViewEntity.js +1 -0
  3. package/browser/decorator/entity-view/ViewEntity.js.map +1 -1
  4. package/browser/decorator/options/ViewEntityOptions.d.ts +5 -0
  5. package/browser/decorator/options/ViewEntityOptions.js.map +1 -1
  6. package/browser/driver/cockroachdb/CockroachDriver.js +23 -14
  7. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  8. package/browser/driver/cockroachdb/CockroachQueryRunner.js +63 -69
  9. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  10. package/browser/driver/cordova/CordovaDriver.d.ts +1 -1
  11. package/browser/driver/cordova/CordovaDriver.js +25 -18
  12. package/browser/driver/cordova/CordovaDriver.js.map +1 -1
  13. package/browser/driver/cordova/CordovaQueryRunner.js +50 -43
  14. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  15. package/browser/driver/postgres/PostgresDriver.d.ts +2 -2
  16. package/browser/driver/postgres/PostgresDriver.js +31 -40
  17. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  18. package/browser/driver/postgres/PostgresQueryRunner.js +7 -15
  19. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  20. package/browser/driver/sap/SapQueryRunner.js +10 -28
  21. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  22. package/browser/driver/sqljs/SqljsDriver.js +5 -22
  23. package/browser/driver/sqljs/SqljsDriver.js.map +1 -1
  24. package/browser/driver/sqljs/SqljsQueryRunner.js +9 -10
  25. package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  26. package/browser/find-options/FindOptionsUtils.d.ts +2 -0
  27. package/browser/find-options/FindOptionsUtils.js +13 -0
  28. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  29. package/browser/metadata/EntityMetadata.d.ts +5 -0
  30. package/browser/metadata/EntityMetadata.js +1 -0
  31. package/browser/metadata/EntityMetadata.js.map +1 -1
  32. package/browser/metadata-args/TableMetadataArgs.d.ts +4 -0
  33. package/browser/metadata-args/TableMetadataArgs.js.map +1 -1
  34. package/browser/migration/MigrationExecutor.d.ts +1 -1
  35. package/browser/migration/MigrationExecutor.js +6 -14
  36. package/browser/migration/MigrationExecutor.js.map +1 -1
  37. package/browser/persistence/SubjectExecutor.js +3 -3
  38. package/browser/persistence/SubjectExecutor.js.map +1 -1
  39. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +10 -4
  40. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  41. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  42. package/browser/query-builder/SelectQueryBuilder.js +20 -4
  43. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  44. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +2 -8
  45. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  46. package/browser/query-runner/BaseQueryRunner.js +3 -2
  47. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  48. package/browser/repository/TreeRepository.d.ts +3 -3
  49. package/browser/repository/TreeRepository.js +28 -39
  50. package/browser/repository/TreeRepository.js.map +1 -1
  51. package/browser/schema-builder/RdbmsSchemaBuilder.js +223 -148
  52. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  53. package/browser/schema-builder/util/ViewUtils.d.ts +7 -0
  54. package/browser/schema-builder/util/ViewUtils.js +25 -0
  55. package/browser/schema-builder/util/ViewUtils.js.map +1 -0
  56. package/commands/InitCommand.js +2 -1
  57. package/commands/InitCommand.js.map +1 -1
  58. package/decorator/entity-view/ViewEntity.js +1 -0
  59. package/decorator/entity-view/ViewEntity.js.map +1 -1
  60. package/decorator/options/ViewEntityOptions.d.ts +5 -0
  61. package/decorator/options/ViewEntityOptions.js.map +1 -1
  62. package/driver/cockroachdb/CockroachDriver.js +23 -14
  63. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  64. package/driver/cockroachdb/CockroachQueryRunner.js +63 -69
  65. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  66. package/driver/cordova/CordovaDriver.d.ts +1 -1
  67. package/driver/cordova/CordovaDriver.js +25 -18
  68. package/driver/cordova/CordovaDriver.js.map +1 -1
  69. package/driver/cordova/CordovaQueryRunner.js +50 -43
  70. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  71. package/driver/postgres/PostgresDriver.d.ts +2 -2
  72. package/driver/postgres/PostgresDriver.js +31 -40
  73. package/driver/postgres/PostgresDriver.js.map +1 -1
  74. package/driver/postgres/PostgresQueryRunner.js +7 -15
  75. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  76. package/driver/sap/SapQueryRunner.js +10 -28
  77. package/driver/sap/SapQueryRunner.js.map +1 -1
  78. package/driver/sqljs/SqljsDriver.js +5 -22
  79. package/driver/sqljs/SqljsDriver.js.map +1 -1
  80. package/driver/sqljs/SqljsQueryRunner.js +9 -10
  81. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  82. package/find-options/FindOptionsUtils.d.ts +2 -0
  83. package/find-options/FindOptionsUtils.js +13 -0
  84. package/find-options/FindOptionsUtils.js.map +1 -1
  85. package/metadata/EntityMetadata.d.ts +5 -0
  86. package/metadata/EntityMetadata.js +1 -0
  87. package/metadata/EntityMetadata.js.map +1 -1
  88. package/metadata-args/TableMetadataArgs.d.ts +4 -0
  89. package/metadata-args/TableMetadataArgs.js.map +1 -1
  90. package/migration/MigrationExecutor.d.ts +1 -1
  91. package/migration/MigrationExecutor.js +6 -14
  92. package/migration/MigrationExecutor.js.map +1 -1
  93. package/package.json +1 -1
  94. package/persistence/SubjectExecutor.js +3 -3
  95. package/persistence/SubjectExecutor.js.map +1 -1
  96. package/persistence/subject-builder/OneToManySubjectBuilder.js +10 -4
  97. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  98. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  99. package/query-builder/SelectQueryBuilder.js +20 -4
  100. package/query-builder/SelectQueryBuilder.js.map +1 -1
  101. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +2 -8
  102. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  103. package/query-runner/BaseQueryRunner.js +3 -2
  104. package/query-runner/BaseQueryRunner.js.map +1 -1
  105. package/repository/TreeRepository.d.ts +3 -3
  106. package/repository/TreeRepository.js +27 -38
  107. package/repository/TreeRepository.js.map +1 -1
  108. package/schema-builder/RdbmsSchemaBuilder.js +222 -147
  109. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  110. package/schema-builder/util/ViewUtils.d.ts +7 -0
  111. package/schema-builder/util/ViewUtils.js +28 -0
  112. package/schema-builder/util/ViewUtils.js.map +1 -0
@@ -51,18 +51,10 @@ var SqljsDriver = /** @class */ (function (_super) {
51
51
  */
52
52
  SqljsDriver.prototype.disconnect = function () {
53
53
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
54
- var _this = this;
55
54
  return (0, tslib_1.__generator)(this, function (_a) {
56
- return [2 /*return*/, new Promise(function (ok, fail) {
57
- try {
58
- _this.queryRunner = undefined;
59
- _this.databaseConnection.close();
60
- ok();
61
- }
62
- catch (e) {
63
- fail(e);
64
- }
65
- })];
55
+ this.queryRunner = undefined;
56
+ this.databaseConnection.close();
57
+ return [2 /*return*/];
66
58
  });
67
59
  });
68
60
  };
@@ -265,7 +257,6 @@ var SqljsDriver = /** @class */ (function (_super) {
265
257
  SqljsDriver.prototype.createDatabaseConnectionWithImport = function (database) {
266
258
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
267
259
  var isLegacyVersion, sqlite, _a;
268
- var _this = this;
269
260
  return (0, tslib_1.__generator)(this, function (_b) {
270
261
  switch (_b.label) {
271
262
  case 0:
@@ -285,16 +276,8 @@ var SqljsDriver = /** @class */ (function (_super) {
285
276
  else {
286
277
  this.databaseConnection = new sqlite.Database();
287
278
  }
288
- // Enable foreign keys for database
289
- return [2 /*return*/, new Promise(function (ok, fail) {
290
- try {
291
- _this.databaseConnection.exec("PRAGMA foreign_keys = ON;");
292
- ok(_this.databaseConnection);
293
- }
294
- catch (e) {
295
- fail(e);
296
- }
297
- })];
279
+ this.databaseConnection.exec("PRAGMA foreign_keys = ON;");
280
+ return [2 /*return*/, this.databaseConnection];
298
281
  }
299
282
  });
300
283
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/driver/sqljs/SqljsDriver.ts"],"names":[],"mappings":";;;;AAAA,gFAA6E;AAE7E,uDAAoD;AAGpD,6FAA0F;AAC1F,+EAA4E;AAC5E,8DAA2D;AAE3D,gDAA6C;AAG7C,qCAA2C;AAS3C;IAAiC,4CAAoB;IAIjD,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,qBAAY,UAAsB;QAAlC,YACI,kBAAM,UAAU,CAAC,SAUpB;QARG,8EAA8E;QAC9E,uEAAuE;QACvE,IAAI,KAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;YACnF,MAAM,IAAI,iDAAuB,CAAC,8BAA8B,CAAC,CAAC;SACrE;QAED,sBAAsB;QACtB,KAAI,CAAC,gBAAgB,EAAE,CAAC;;IAC5B,CAAC;IAGD,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACG,6BAAO,GAAb;;;;;;wBACI,KAAA,IAAI,CAAA;wBAAsB,qBAAM,IAAI,CAAC,wBAAwB,EAAE,EAAA;;wBAA/D,GAAK,kBAAkB,GAAG,SAAqC,CAAC;;;;;KACnE;IAED;;OAEG;IACG,gCAAU,GAAhB;;;;gBACI,sBAAO,IAAI,OAAO,CAAO,UAAC,EAAE,EAAE,IAAI;wBAC9B,IAAI;4BACA,KAAI,CAAC,WAAW,GAAG,SAAS,CAAC;4BAC7B,KAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;4BAChC,EAAE,EAAE,CAAC;yBACR;wBACD,OAAO,CAAC,EAAG;4BACP,IAAI,CAAC,CAAC,CAAC,CAAC;yBACX;oBACL,CAAC,CAAC,EAAC;;;KACN;IAED;;OAEG;IACH,uCAAiB,GAAjB,UAAkB,IAAqB;QACnC,IAAI,CAAC,IAAI,CAAC,WAAW;YACjB,IAAI,CAAC,WAAW,GAAG,IAAI,mCAAgB,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACG,0BAAI,GAAV,UAAW,4BAAiD,EAAE,+BAA+C;QAA/C,gDAAA,EAAA,sCAA+C;;;;;;6BACrG,CAAA,OAAO,4BAA4B,KAAK,QAAQ,CAAA,EAAhD,wBAAgD;6BAE5C,CAAA,6BAAa,CAAC,IAAI,KAAK,MAAM,CAAA,EAA7B,wBAA6B;wBAC7B,UAAU;wBACV,4DAA4D;wBAC5D,IAAI,6BAAa,CAAC,SAAS,CAAC,4BAA4B,CAAC,EAAE;4BACjD,QAAQ,GAAG,6BAAa,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC;4BAC1E,sBAAO,IAAI,CAAC,kCAAkC,CAAC,QAAQ,CAAC,EAAC;yBAC5D;6BACI,IAAI,+BAA+B,EAAE;4BACtC,MAAM,IAAI,oBAAY,CAAC,UAAQ,4BAA4B,oBAAiB,CAAC,CAAC;yBACjF;6BACI;4BACD,0EAA0E;4BAC1E,gEAAgE;4BAChE,iDAAiD;4BACjD,sBAAO,IAAI,CAAC,kCAAkC,EAAE,EAAC;yBACpD;;;wBAKG,mBAAmB,GAAG,IAAI,CAAC;6BAC3B,IAAI,CAAC,OAAO,CAAC,cAAc,EAA3B,wBAA2B;6BACvB,MAAM,CAAC,WAAW,EAAlB,wBAAkB;wBACI,qBAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAA;;wBAApF,mBAAmB,GAAG,SAA8D,CAAC;;4BAErF,MAAM,IAAI,oBAAY,CAAC,0EAA0E,CAAC,CAAC;;;wBAGvG,mBAAmB,GAAG,6BAAa,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;;;wBAG/G,IAAI,mBAAmB,IAAI,IAAI,EAAE;4BAC7B,6BAA6B;4BAC7B,sBAAO,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,EAAC;yBACnF;6BACI,IAAI,+BAA+B,EAAE;4BACtC,MAAM,IAAI,oBAAY,CAAC,UAAQ,4BAA4B,oBAAiB,CAAC,CAAC;yBACjF;6BACI;4BACD,wFAAwF;4BACxF,wDAAwD;4BACxD,+DAA+D;4BAC/D,sBAAO,IAAI,CAAC,kCAAkC,EAAE,EAAC;yBACpD;;;4BAIL,sBAAO,IAAI,CAAC,kCAAkC,CAAC,4BAA4B,CAAC,EAAC;;;;;KAEpF;IAED;;;;OAIG;IACG,0BAAI,GAAV,UAAW,QAAiB;;;;;;wBACxB,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;4BACrC,MAAM,IAAI,oBAAY,CAAC,mGAAmG,CAAC,CAAC;yBAC/H;wBAEG,IAAI,GAAG,EAAE,CAAC;wBACd,IAAI,QAAQ,EAAE;4BACV,IAAI,GAAG,QAAQ,CAAC;yBACnB;6BACI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;4BAC5B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;yBAChC;6BAEG,CAAA,6BAAa,CAAC,IAAI,KAAK,MAAM,CAAA,EAA7B,wBAA6B;;;;wBAEnB,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC;wBAC9D,qBAAM,6BAAa,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAA;;wBAA5C,SAA4C,CAAC;;;;wBAG7C,MAAM,IAAI,oBAAY,CAAC,qCAAmC,GAAG,CAAC,CAAC;;;wBAI7D,QAAQ,GAAe,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;wBAExD,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;6BAC1C,IAAI,CAAC,OAAO,CAAC,cAAc,EAA3B,wBAA2B;6BACvB,MAAM,CAAC,WAAW,EAAlB,wBAAkB;wBAClB,qBAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,EAAA;;wBAArE,SAAqE,CAAC;;4BAEtE,MAAM,IAAI,oBAAY,CAAC,0EAA0E,CAAC,CAAC;;;wBAGvG,6BAAa,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;;;;;;KAGvG;IAED;;;;;OAKG;IACG,8BAAQ,GAAd;;;;;6BACQ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAArB,wBAAqB;6BACjB,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAA7B,wBAA6B;wBAC7B,qBAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAA;;wBAAlD,SAAkD,CAAC;;4BAGnD,qBAAM,IAAI,CAAC,IAAI,EAAE,EAAA;;wBAAjB,SAAiB,CAAC;;;;;;KAG7B;IAED;;OAEG;IACH,4BAAM,GAAN;QACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,wCAAkB,GAAlB,UAAmB,QAAwB,EAAE,YAAiB;QAA9D,iBAmBC;QAlBG,IAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,eAAe;YACvE,mGAAmG;YACnG,IAAI,eAAe,CAAC,SAAS,IAAI,eAAe,CAAC,kBAAkB,KAAK,WAAW,EAAE;gBACjF,IAAM,KAAK,GAAG,4BAA4B,CAAC;gBAC3C,IAAI;oBACA,IAAI,MAAM,GAAG,KAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjD,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACvC,OAAO,mBAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1F;gBACD,OAAO,CAAC,EAAE;oBACN,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;iBACtD;aACJ;YAED,OAAO,GAAG,CAAC;QACf,CAAC,EAAE,EAAmB,CAAC,CAAC;QAExB,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;;OAGG;IACO,8CAAwB,GAAlC;QACI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;SAClD;QAED,OAAO,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACa,wDAAkC,GAAlD,UAAmD,QAAqB;;;;;;;wBAE9D,eAAe,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC;6BACpD,eAAe,EAAf,wBAAe;wBAAG,KAAA,IAAI,CAAC,MAAM,CAAA;;4BAAG,qBAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAA;;wBAA3C,KAAA,SAA2C,CAAA;;;wBAApF,MAAM,KAA8E;wBAC1F,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;4BACjC,IAAI,CAAC,kBAAkB,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;yBAC3D;6BACI;4BACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;yBACnD;wBAED,mCAAmC;wBACnC,sBAAO,IAAI,OAAO,CAAM,UAAC,EAAE,EAAE,IAAI;gCAC7B,IAAI;oCACA,KAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;oCAC1D,EAAE,CAAC,KAAI,CAAC,kBAAkB,CAAC,CAAC;iCAC/B;gCACD,OAAO,CAAC,EAAE;oCACN,IAAI,CAAC,CAAC,CAAC,CAAC;iCACX;4BACL,CAAC,CAAC,EAAC;;;;KACN;IAED;;OAEG;IACO,sCAAgB,GAA1B;QACI,IAAI,6BAAa,CAAC,IAAI,KAAK,SAAS,EAAE;YAClC,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC;YACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACxB;aACI;YACD,IAAI;gBACA,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,6BAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;aAExB;YAAC,OAAO,CAAC,EAAE;gBACR,MAAM,IAAI,+DAA8B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAChE;SACJ;IACL,CAAC;IACL,kBAAC;AAAD,CA7QA,AA6QC,CA7QgC,2CAAoB,GA6QpD;AA7QY,kCAAW","file":"SqljsDriver.js","sourcesContent":["import {AbstractSqliteDriver} from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport {SqljsConnectionOptions} from \"./SqljsConnectionOptions\";\nimport {SqljsQueryRunner} from \"./SqljsQueryRunner\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {Connection} from \"../../connection/Connection\";\nimport {DriverPackageNotInstalledError} from \"../../error/DriverPackageNotInstalledError\";\nimport {DriverOptionNotSetError} from \"../../error/DriverOptionNotSetError\";\nimport {PlatformTools} from \"../../platform/PlatformTools\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {ReplicationMode} from \"../types/ReplicationMode\";\nimport { TypeORMError } from \"../../error\";\n\n// This is needed to satisfy the typescript compiler.\ninterface Window {\n SQL: any;\n localforage: any;\n}\ndeclare let window: Window;\n\nexport class SqljsDriver extends AbstractSqliteDriver {\n // The driver specific options.\n options: SqljsConnectionOptions;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection) {\n super(connection);\n\n // If autoSave is enabled by user, location or autoSaveCallback have to be set\n // because either autoSave saves to location or calls autoSaveCallback.\n if (this.options.autoSave && !this.options.location && !this.options.autoSaveCallback) {\n throw new DriverOptionNotSetError(`location or autoSaveCallback`);\n }\n\n // load sql.js package\n this.loadDependencies();\n }\n\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n */\n async connect(): Promise<void> {\n this.databaseConnection = await this.createDatabaseConnection();\n }\n\n /**\n * Closes connection with database.\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n try {\n this.queryRunner = undefined;\n this.databaseConnection.close();\n ok();\n }\n catch (e) {\n fail(e);\n }\n });\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner)\n this.queryRunner = new SqljsQueryRunner(this);\n\n return this.queryRunner;\n }\n\n /**\n * Loads a database from a given file (Node.js), local storage key (browser) or array.\n * This will delete the current database!\n */\n async load(fileNameOrLocalStorageOrData: string | Uint8Array, checkIfFileOrLocalStorageExists: boolean = true): Promise<any> {\n if (typeof fileNameOrLocalStorageOrData === \"string\") {\n // content has to be loaded\n if (PlatformTools.type === \"node\") {\n // Node.js\n // fileNameOrLocalStorageOrData should be a path to the file\n if (PlatformTools.fileExist(fileNameOrLocalStorageOrData)) {\n const database = PlatformTools.readFileSync(fileNameOrLocalStorageOrData);\n return this.createDatabaseConnectionWithImport(database);\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new TypeORMError(`File ${fileNameOrLocalStorageOrData} does not exist`);\n }\n else {\n // File doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing an existing file.\n // File will be written on first write operation.\n return this.createDatabaseConnectionWithImport();\n }\n }\n else {\n // browser\n // fileNameOrLocalStorageOrData should be a local storage / indexedDB key\n let localStorageContent = null;\n if (this.options.useLocalForage) {\n if (window.localforage) {\n localStorageContent = await window.localforage.getItem(fileNameOrLocalStorageOrData);\n } else {\n throw new TypeORMError(`localforage is not defined - please import localforage.js into your site`);\n }\n } else {\n localStorageContent = PlatformTools.getGlobalVariable().localStorage.getItem(fileNameOrLocalStorageOrData);\n }\n\n if (localStorageContent != null) {\n // localStorage value exists.\n return this.createDatabaseConnectionWithImport(JSON.parse(localStorageContent));\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new TypeORMError(`File ${fileNameOrLocalStorageOrData} does not exist`);\n }\n else {\n // localStorage value doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing anything.\n // localStorage value will be written on first write operation.\n return this.createDatabaseConnectionWithImport();\n }\n }\n }\n else {\n return this.createDatabaseConnectionWithImport(fileNameOrLocalStorageOrData);\n }\n }\n\n /**\n * Saved the current database to the given file (Node.js), local storage key (browser) or\n * indexedDB key (browser with enabled useLocalForage option).\n * If no location path is given, the location path in the options (if specified) will be used.\n */\n async save(location?: string) {\n if (!location && !this.options.location) {\n throw new TypeORMError(`No location is set, specify a location parameter or add the location option to your configuration`);\n }\n\n let path = \"\";\n if (location) {\n path = location;\n }\n else if (this.options.location) {\n path = this.options.location;\n }\n\n if (PlatformTools.type === \"node\") {\n try {\n const content = Buffer.from(this.databaseConnection.export());\n await PlatformTools.writeFile(path, content);\n }\n catch (e) {\n throw new TypeORMError(`Could not save database, error: ${e}`);\n }\n }\n else {\n const database: Uint8Array = this.databaseConnection.export();\n // convert Uint8Array to number array to improve local-storage storage\n const databaseArray = [].slice.call(database);\n if (this.options.useLocalForage) {\n if (window.localforage) {\n await window.localforage.setItem(path, JSON.stringify(databaseArray));\n } else {\n throw new TypeORMError(`localforage is not defined - please import localforage.js into your site`);\n }\n } else {\n PlatformTools.getGlobalVariable().localStorage.setItem(path, JSON.stringify(databaseArray));\n }\n }\n }\n\n /**\n * This gets called by the QueryRunner when a change to the database is made.\n * If a custom autoSaveCallback is specified, it get's called with the database as Uint8Array,\n * otherwise the save method is called which saves it to file (Node.js), local storage (browser)\n * or indexedDB (browser with enabled useLocalForage option).\n */\n async autoSave() {\n if (this.options.autoSave) {\n if (this.options.autoSaveCallback) {\n await this.options.autoSaveCallback(this.export());\n }\n else {\n await this.save();\n }\n }\n }\n\n /**\n * Returns the current database as Uint8Array.\n */\n export(): Uint8Array {\n return this.databaseConnection.export();\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n createGeneratedMap(metadata: EntityMetadata, insertResult: any) {\n const generatedMap = metadata.generatedColumns.reduce((map, generatedColumn) => {\n // seems to be the only way to get the inserted id, see https://github.com/kripken/sql.js/issues/77\n if (generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\") {\n const query = \"SELECT last_insert_rowid()\";\n try {\n let result = this.databaseConnection.exec(query);\n this.connection.logger.logQuery(query);\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(result[0].values[0][0]));\n }\n catch (e) {\n this.connection.logger.logQueryError(e, query, []);\n }\n }\n\n return map;\n }, {} as ObjectLiteral);\n\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n * If the location option is set, the database is loaded first.\n */\n protected createDatabaseConnection(): Promise<any> {\n if (this.options.location) {\n return this.load(this.options.location, false);\n }\n\n return this.createDatabaseConnectionWithImport(this.options.database);\n }\n\n /**\n * Creates connection with an optional database.\n * If database is specified it is loaded, otherwise a new empty database is created.\n */\n protected async createDatabaseConnectionWithImport(database?: Uint8Array): Promise<any> {\n // sql.js < 1.0 exposes an object with a `Database` method.\n const isLegacyVersion = typeof this.sqlite.Database === \"function\";\n const sqlite = isLegacyVersion ? this.sqlite : await this.sqlite(this.options.sqlJsConfig);\n if (database && database.length > 0) {\n this.databaseConnection = new sqlite.Database(database);\n }\n else {\n this.databaseConnection = new sqlite.Database();\n }\n\n // Enable foreign keys for database\n return new Promise<any>((ok, fail) => {\n try {\n this.databaseConnection.exec(`PRAGMA foreign_keys = ON;`);\n ok(this.databaseConnection);\n }\n catch (e) {\n fail(e);\n }\n });\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n if (PlatformTools.type === \"browser\") {\n const sqlite = this.options.driver || window.SQL;\n this.sqlite = sqlite;\n }\n else {\n try {\n const sqlite = this.options.driver || PlatformTools.load(\"sql.js\");\n this.sqlite = sqlite;\n\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"sql.js\", \"sql.js\");\n }\n }\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../src/driver/sqljs/SqljsDriver.ts"],"names":[],"mappings":"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","file":"SqljsDriver.js","sourcesContent":["import {AbstractSqliteDriver} from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport {SqljsConnectionOptions} from \"./SqljsConnectionOptions\";\nimport {SqljsQueryRunner} from \"./SqljsQueryRunner\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {Connection} from \"../../connection/Connection\";\nimport {DriverPackageNotInstalledError} from \"../../error/DriverPackageNotInstalledError\";\nimport {DriverOptionNotSetError} from \"../../error/DriverOptionNotSetError\";\nimport {PlatformTools} from \"../../platform/PlatformTools\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {ReplicationMode} from \"../types/ReplicationMode\";\nimport { TypeORMError } from \"../../error\";\n\n// This is needed to satisfy the typescript compiler.\ninterface Window {\n SQL: any;\n localforage: any;\n}\ndeclare let window: Window;\n\nexport class SqljsDriver extends AbstractSqliteDriver {\n // The driver specific options.\n options: SqljsConnectionOptions;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection) {\n super(connection);\n\n // If autoSave is enabled by user, location or autoSaveCallback have to be set\n // because either autoSave saves to location or calls autoSaveCallback.\n if (this.options.autoSave && !this.options.location && !this.options.autoSaveCallback) {\n throw new DriverOptionNotSetError(`location or autoSaveCallback`);\n }\n\n // load sql.js package\n this.loadDependencies();\n }\n\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n */\n async connect(): Promise<void> {\n this.databaseConnection = await this.createDatabaseConnection();\n }\n\n /**\n * Closes connection with database.\n */\n async disconnect(): Promise<void> {\n this.queryRunner = undefined;\n this.databaseConnection.close();\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner)\n this.queryRunner = new SqljsQueryRunner(this);\n\n return this.queryRunner;\n }\n\n /**\n * Loads a database from a given file (Node.js), local storage key (browser) or array.\n * This will delete the current database!\n */\n async load(fileNameOrLocalStorageOrData: string | Uint8Array, checkIfFileOrLocalStorageExists: boolean = true): Promise<any> {\n if (typeof fileNameOrLocalStorageOrData === \"string\") {\n // content has to be loaded\n if (PlatformTools.type === \"node\") {\n // Node.js\n // fileNameOrLocalStorageOrData should be a path to the file\n if (PlatformTools.fileExist(fileNameOrLocalStorageOrData)) {\n const database = PlatformTools.readFileSync(fileNameOrLocalStorageOrData);\n return this.createDatabaseConnectionWithImport(database);\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new TypeORMError(`File ${fileNameOrLocalStorageOrData} does not exist`);\n }\n else {\n // File doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing an existing file.\n // File will be written on first write operation.\n return this.createDatabaseConnectionWithImport();\n }\n }\n else {\n // browser\n // fileNameOrLocalStorageOrData should be a local storage / indexedDB key\n let localStorageContent = null;\n if (this.options.useLocalForage) {\n if (window.localforage) {\n localStorageContent = await window.localforage.getItem(fileNameOrLocalStorageOrData);\n } else {\n throw new TypeORMError(`localforage is not defined - please import localforage.js into your site`);\n }\n } else {\n localStorageContent = PlatformTools.getGlobalVariable().localStorage.getItem(fileNameOrLocalStorageOrData);\n }\n\n if (localStorageContent != null) {\n // localStorage value exists.\n return this.createDatabaseConnectionWithImport(JSON.parse(localStorageContent));\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new TypeORMError(`File ${fileNameOrLocalStorageOrData} does not exist`);\n }\n else {\n // localStorage value doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing anything.\n // localStorage value will be written on first write operation.\n return this.createDatabaseConnectionWithImport();\n }\n }\n }\n else {\n return this.createDatabaseConnectionWithImport(fileNameOrLocalStorageOrData);\n }\n }\n\n /**\n * Saved the current database to the given file (Node.js), local storage key (browser) or\n * indexedDB key (browser with enabled useLocalForage option).\n * If no location path is given, the location path in the options (if specified) will be used.\n */\n async save(location?: string) {\n if (!location && !this.options.location) {\n throw new TypeORMError(`No location is set, specify a location parameter or add the location option to your configuration`);\n }\n\n let path = \"\";\n if (location) {\n path = location;\n }\n else if (this.options.location) {\n path = this.options.location;\n }\n\n if (PlatformTools.type === \"node\") {\n try {\n const content = Buffer.from(this.databaseConnection.export());\n await PlatformTools.writeFile(path, content);\n }\n catch (e) {\n throw new TypeORMError(`Could not save database, error: ${e}`);\n }\n }\n else {\n const database: Uint8Array = this.databaseConnection.export();\n // convert Uint8Array to number array to improve local-storage storage\n const databaseArray = [].slice.call(database);\n if (this.options.useLocalForage) {\n if (window.localforage) {\n await window.localforage.setItem(path, JSON.stringify(databaseArray));\n } else {\n throw new TypeORMError(`localforage is not defined - please import localforage.js into your site`);\n }\n } else {\n PlatformTools.getGlobalVariable().localStorage.setItem(path, JSON.stringify(databaseArray));\n }\n }\n }\n\n /**\n * This gets called by the QueryRunner when a change to the database is made.\n * If a custom autoSaveCallback is specified, it get's called with the database as Uint8Array,\n * otherwise the save method is called which saves it to file (Node.js), local storage (browser)\n * or indexedDB (browser with enabled useLocalForage option).\n */\n async autoSave() {\n if (this.options.autoSave) {\n if (this.options.autoSaveCallback) {\n await this.options.autoSaveCallback(this.export());\n }\n else {\n await this.save();\n }\n }\n }\n\n /**\n * Returns the current database as Uint8Array.\n */\n export(): Uint8Array {\n return this.databaseConnection.export();\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n createGeneratedMap(metadata: EntityMetadata, insertResult: any) {\n const generatedMap = metadata.generatedColumns.reduce((map, generatedColumn) => {\n // seems to be the only way to get the inserted id, see https://github.com/kripken/sql.js/issues/77\n if (generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\") {\n const query = \"SELECT last_insert_rowid()\";\n try {\n let result = this.databaseConnection.exec(query);\n this.connection.logger.logQuery(query);\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(result[0].values[0][0]));\n }\n catch (e) {\n this.connection.logger.logQueryError(e, query, []);\n }\n }\n\n return map;\n }, {} as ObjectLiteral);\n\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n * If the location option is set, the database is loaded first.\n */\n protected createDatabaseConnection(): Promise<any> {\n if (this.options.location) {\n return this.load(this.options.location, false);\n }\n\n return this.createDatabaseConnectionWithImport(this.options.database);\n }\n\n /**\n * Creates connection with an optional database.\n * If database is specified it is loaded, otherwise a new empty database is created.\n */\n protected async createDatabaseConnectionWithImport(database?: Uint8Array): Promise<any> {\n // sql.js < 1.0 exposes an object with a `Database` method.\n const isLegacyVersion = typeof this.sqlite.Database === \"function\";\n const sqlite = isLegacyVersion ? this.sqlite : await this.sqlite(this.options.sqlJsConfig);\n if (database && database.length > 0) {\n this.databaseConnection = new sqlite.Database(database);\n }\n else {\n this.databaseConnection = new sqlite.Database();\n }\n\n this.databaseConnection.exec(`PRAGMA foreign_keys = ON;`);\n\n return this.databaseConnection;\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n if (PlatformTools.type === \"browser\") {\n const sqlite = this.options.driver || window.SQL;\n this.sqlite = sqlite;\n }\n else {\n try {\n const sqlite = this.options.driver || PlatformTools.load(\"sql.js\");\n this.sqlite = sqlite;\n\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"sql.js\", \"sql.js\");\n }\n }\n }\n}\n"],"sourceRoot":"../.."}
@@ -80,15 +80,14 @@ var SqljsQueryRunner = /** @class */ (function (_super) {
80
80
  * Executes a given SQL query.
81
81
  */
82
82
  SqljsQueryRunner.prototype.query = function (query, parameters, useStructuredResult) {
83
- var _this = this;
84
83
  if (parameters === void 0) { parameters = []; }
85
84
  if (useStructuredResult === void 0) { useStructuredResult = false; }
86
- if (this.isReleased)
87
- throw new QueryRunnerAlreadyReleasedError_1.QueryRunnerAlreadyReleasedError();
88
- var command = query.trim().split(" ", 1)[0];
89
- return new Promise(function (ok, fail) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
90
- var databaseConnection, queryStartTime, statement, maxQueryExecutionTime, queryEndTime, queryExecutionTime, records, result;
85
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
86
+ var command, databaseConnection, queryStartTime, statement, maxQueryExecutionTime, queryEndTime, queryExecutionTime, records, result;
91
87
  return (0, tslib_1.__generator)(this, function (_a) {
88
+ if (this.isReleased)
89
+ throw new QueryRunnerAlreadyReleasedError_1.QueryRunnerAlreadyReleasedError();
90
+ command = query.trim().split(" ", 1)[0];
92
91
  databaseConnection = this.driver.databaseConnection;
93
92
  this.driver.connection.logger.logQuery(query, parameters, this);
94
93
  queryStartTime = +new Date();
@@ -116,10 +115,10 @@ var SqljsQueryRunner = /** @class */ (function (_super) {
116
115
  this.isDirty = true;
117
116
  }
118
117
  if (useStructuredResult) {
119
- ok(result);
118
+ return [2 /*return*/, result];
120
119
  }
121
120
  else {
122
- ok(result.raw);
121
+ return [2 /*return*/, result.raw];
123
122
  }
124
123
  }
125
124
  catch (e) {
@@ -127,11 +126,11 @@ var SqljsQueryRunner = /** @class */ (function (_super) {
127
126
  statement.free();
128
127
  }
129
128
  this.driver.connection.logger.logQueryError(e, query, parameters, this);
130
- fail(new QueryFailedError_1.QueryFailedError(query, parameters, e));
129
+ throw new QueryFailedError_1.QueryFailedError(query, parameters, e);
131
130
  }
132
131
  return [2 /*return*/];
133
132
  });
134
- }); });
133
+ });
135
134
  };
136
135
  return SqljsQueryRunner;
137
136
  }(AbstractSqliteQueryRunner_1.AbstractSqliteQueryRunner));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/driver/sqljs/SqljsQueryRunner.ts"],"names":[],"mappings":"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","file":"SqljsQueryRunner.js","sourcesContent":["import {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {AbstractSqliteQueryRunner} from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport {SqljsDriver} from \"./SqljsDriver\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport { QueryResult } from \"../../query-runner/QueryResult\";\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class SqljsQueryRunner extends AbstractSqliteQueryRunner {\n\n /**\n * Flag to determine if a modification has happened since the last time this query runner has requested a save.\n */\n private isDirty = false;\n\n /**\n * Database driver used by connection.\n */\n driver: SqljsDriver;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: SqljsDriver) {\n super();\n this.driver = driver;\n this.connection = driver.connection;\n this.broadcaster = new Broadcaster(this);\n }\n\n // -------------------------------------------------------------------------\n // Public methods\n // -------------------------------------------------------------------------\n\n private async flush() {\n if (this.isDirty) {\n await this.driver.autoSave();\n this.isDirty = false;\n }\n }\n\n async release(): Promise<void> {\n await this.flush();\n return super.release();\n }\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n async commitTransaction(): Promise<void> {\n await super.commitTransaction();\n await this.flush();\n }\n\n /**\n * Executes a given SQL query.\n */\n query(query: string, parameters: any[] = [], useStructuredResult = false): Promise<any> {\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n\n const command = query.trim().split(\" \", 1)[0];\n\n return new Promise(async (ok, fail) => {\n const databaseConnection = this.driver.databaseConnection;\n this.driver.connection.logger.logQuery(query, parameters, this);\n const queryStartTime = +new Date();\n let statement: any;\n try {\n statement = databaseConnection.prepare(query);\n if (parameters) {\n parameters = parameters.map(p => typeof p !== 'undefined' ? p : null);\n\n statement.bind(parameters);\n }\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;\n const queryEndTime = +new Date();\n const queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n\n const records: any[] = [];\n\n while (statement.step()) {\n records.push(statement.getAsObject());\n }\n\n const result = new QueryResult();\n\n result.affected = databaseConnection.getRowsModified();\n result.records = records;\n result.raw = records;\n\n statement.free();\n\n if (command !== \"SELECT\") {\n this.isDirty = true;\n }\n\n if (useStructuredResult) {\n ok(result);\n } else {\n ok(result.raw);\n }\n } catch (e) {\n if (statement) {\n statement.free();\n }\n\n this.driver.connection.logger.logQueryError(e, query, parameters, this);\n fail(new QueryFailedError(query, parameters, e));\n }\n });\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../src/driver/sqljs/SqljsQueryRunner.ts"],"names":[],"mappings":"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","file":"SqljsQueryRunner.js","sourcesContent":["import {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {AbstractSqliteQueryRunner} from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport {SqljsDriver} from \"./SqljsDriver\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport { QueryResult } from \"../../query-runner/QueryResult\";\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class SqljsQueryRunner extends AbstractSqliteQueryRunner {\n\n /**\n * Flag to determine if a modification has happened since the last time this query runner has requested a save.\n */\n private isDirty = false;\n\n /**\n * Database driver used by connection.\n */\n driver: SqljsDriver;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: SqljsDriver) {\n super();\n this.driver = driver;\n this.connection = driver.connection;\n this.broadcaster = new Broadcaster(this);\n }\n\n // -------------------------------------------------------------------------\n // Public methods\n // -------------------------------------------------------------------------\n\n private async flush() {\n if (this.isDirty) {\n await this.driver.autoSave();\n this.isDirty = false;\n }\n }\n\n async release(): Promise<void> {\n await this.flush();\n return super.release();\n }\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n async commitTransaction(): Promise<void> {\n await super.commitTransaction();\n await this.flush();\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(query: string, parameters: any[] = [], useStructuredResult = false): Promise<any> {\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n\n const command = query.trim().split(\" \", 1)[0];\n\n const databaseConnection = this.driver.databaseConnection;\n this.driver.connection.logger.logQuery(query, parameters, this);\n const queryStartTime = +new Date();\n let statement: any;\n try {\n statement = databaseConnection.prepare(query);\n if (parameters) {\n parameters = parameters.map(p => typeof p !== 'undefined' ? p : null);\n\n statement.bind(parameters);\n }\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;\n const queryEndTime = +new Date();\n const queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n\n const records: any[] = [];\n\n while (statement.step()) {\n records.push(statement.getAsObject());\n }\n\n const result = new QueryResult();\n\n result.affected = databaseConnection.getRowsModified();\n result.records = records;\n result.raw = records;\n\n statement.free();\n\n if (command !== \"SELECT\") {\n this.isDirty = true;\n }\n\n if (useStructuredResult) {\n return result;\n } else {\n return result.raw;\n }\n } catch (e) {\n if (statement) {\n statement.free();\n }\n\n this.driver.connection.logger.logQueryError(e, query, parameters, this);\n throw new QueryFailedError(query, parameters, e);\n }\n }\n}\n"],"sourceRoot":"../.."}
@@ -2,6 +2,7 @@ import { FindManyOptions } from "./FindManyOptions";
2
2
  import { FindOneOptions } from "./FindOneOptions";
3
3
  import { SelectQueryBuilder } from "../query-builder/SelectQueryBuilder";
4
4
  import { EntityMetadata } from "../metadata/EntityMetadata";
5
+ import { FindTreeOptions } from "./FindTreeOptions";
5
6
  /**
6
7
  * Utilities to work with FindOptions.
7
8
  */
@@ -26,6 +27,7 @@ export declare class FindOptionsUtils {
26
27
  * Applies give find options to the given query builder.
27
28
  */
28
29
  static applyOptionsToQueryBuilder<T>(qb: SelectQueryBuilder<T>, options: FindOneOptions<T> | FindManyOptions<T> | undefined): SelectQueryBuilder<T>;
30
+ static applyOptionsToTreeQueryBuilder<T>(qb: SelectQueryBuilder<T>, options?: FindTreeOptions): SelectQueryBuilder<T>;
29
31
  /**
30
32
  * Adds joins for all relations and sub-relations of the given relations provided in the find options.
31
33
  */
@@ -192,6 +192,19 @@ var FindOptionsUtils = /** @class */ (function () {
192
192
  });
193
193
  return qb;
194
194
  };
195
+ FindOptionsUtils.applyOptionsToTreeQueryBuilder = function (qb, options) {
196
+ if (options === null || options === void 0 ? void 0 : options.relations) {
197
+ // Copy because `applyRelationsRecursively` modifies it
198
+ var allRelations = (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(options.relations), false);
199
+ FindOptionsUtils.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias.name, qb.expressionMap.mainAlias.metadata, "");
200
+ // recursive removes found relations from allRelations array
201
+ // if there are relations left in this array it means those relations were not found in the entity structure
202
+ // so, we give an exception about not found relations
203
+ if (allRelations.length > 0)
204
+ throw new FindRelationsNotFoundError_1.FindRelationsNotFoundError(allRelations);
205
+ }
206
+ return qb;
207
+ };
195
208
  // -------------------------------------------------------------------------
196
209
  // Protected Static Methods
197
210
  // -------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/find-options/FindOptionsUtils.ts"],"names":[],"mappings":"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","file":"FindOptionsUtils.js","sourcesContent":["import {FindManyOptions} from \"./FindManyOptions\";\nimport {FindOneOptions} from \"./FindOneOptions\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {FindRelationsNotFoundError} from \"../error/FindRelationsNotFoundError\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {DriverUtils} from \"../driver/DriverUtils\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Utilities to work with FindOptions.\n */\nexport class FindOptionsUtils {\n\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Checks if given object is really instance of FindOneOptions interface.\n */\n static isFindOneOptions<Entity = any>(obj: any): obj is FindOneOptions<Entity> {\n const possibleOptions: FindOneOptions<Entity> = obj;\n return possibleOptions &&\n (\n Array.isArray(possibleOptions.select) ||\n possibleOptions.where instanceof Object ||\n typeof possibleOptions.where === \"string\" ||\n Array.isArray(possibleOptions.relations) ||\n possibleOptions.join instanceof Object ||\n possibleOptions.order instanceof Object ||\n possibleOptions.cache instanceof Object ||\n typeof possibleOptions.cache === \"boolean\" ||\n typeof possibleOptions.cache === \"number\" ||\n possibleOptions.lock instanceof Object ||\n possibleOptions.loadRelationIds instanceof Object ||\n typeof possibleOptions.loadRelationIds === \"boolean\" ||\n typeof possibleOptions.loadEagerRelations === \"boolean\" ||\n typeof possibleOptions.withDeleted === \"boolean\" ||\n typeof possibleOptions.transaction === \"boolean\"\n );\n }\n\n /**\n * Checks if given object is really instance of FindManyOptions interface.\n */\n static isFindManyOptions<Entity = any>(obj: any): obj is FindManyOptions<Entity> {\n const possibleOptions: FindManyOptions<Entity> = obj;\n return possibleOptions && (\n this.isFindOneOptions(possibleOptions) ||\n typeof (possibleOptions as FindManyOptions<any>).skip === \"number\" ||\n typeof (possibleOptions as FindManyOptions<any>).take === \"number\" ||\n typeof (possibleOptions as FindManyOptions<any>).skip === \"string\" ||\n typeof (possibleOptions as FindManyOptions<any>).take === \"string\"\n );\n }\n\n /**\n * Checks if given object is really instance of FindOptions interface.\n */\n static extractFindManyOptionsAlias(object: any): string|undefined {\n if (this.isFindManyOptions(object) && object.join)\n return object.join.alias;\n\n return undefined;\n }\n\n /**\n * Applies give find many options to the given query builder.\n */\n static applyFindManyOptionsOrConditionsToQueryBuilder<T>(qb: SelectQueryBuilder<T>, options: FindManyOptions<T>|Partial<T>|undefined): SelectQueryBuilder<T> {\n if (this.isFindManyOptions(options))\n return this.applyOptionsToQueryBuilder(qb, options);\n\n if (options)\n return qb.where(options);\n\n return qb;\n }\n\n /**\n * Applies give find options to the given query builder.\n */\n static applyOptionsToQueryBuilder<T>(qb: SelectQueryBuilder<T>, options: FindOneOptions<T>|FindManyOptions<T>|undefined): SelectQueryBuilder<T> {\n\n // if options are not set then simply return query builder. This is made for simplicity of usage.\n if (!options || (!this.isFindOneOptions(options) && !this.isFindManyOptions(options)))\n return qb;\n\n if (options.transaction === true) {\n qb.expressionMap.useTransaction = true;\n }\n\n if (!qb.expressionMap.mainAlias || !qb.expressionMap.mainAlias.hasMetadata)\n return qb;\n\n const metadata = qb.expressionMap.mainAlias!.metadata;\n\n // apply all options from FindOptions\n if (options.withDeleted) {\n qb.withDeleted();\n }\n\n if (options.select) {\n qb.select([]);\n options.select.forEach(select => {\n if (!metadata.hasColumnWithPropertyPath(`${select}`))\n throw new TypeORMError(`${select} column was not found in the ${metadata.name} entity.`);\n\n const columns = metadata.findColumnsWithPropertyPath(`${select}`);\n\n for (const column of columns) {\n qb.addSelect(qb.alias + \".\" + column.propertyPath);\n }\n });\n }\n\n if (options.relations) {\n // Copy because `applyRelationsRecursively` modifies it\n const allRelations = [...options.relations];\n this.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias!.name, qb.expressionMap.mainAlias!.metadata, \"\");\n // recursive removes found relations from allRelations array\n // if there are relations left in this array it means those relations were not found in the entity structure\n // so, we give an exception about not found relations\n if (allRelations.length > 0)\n throw new FindRelationsNotFoundError(allRelations);\n }\n\n if (options.join) {\n if (options.join.leftJoin)\n Object.keys(options.join.leftJoin).forEach(key => {\n qb.leftJoin(options.join!.leftJoin![key], key);\n });\n\n if (options.join.innerJoin)\n Object.keys(options.join.innerJoin).forEach(key => {\n qb.innerJoin(options.join!.innerJoin![key], key);\n });\n\n if (options.join.leftJoinAndSelect)\n Object.keys(options.join.leftJoinAndSelect).forEach(key => {\n qb.leftJoinAndSelect(options.join!.leftJoinAndSelect![key], key);\n });\n\n if (options.join.innerJoinAndSelect)\n Object.keys(options.join.innerJoinAndSelect).forEach(key => {\n qb.innerJoinAndSelect(options.join!.innerJoinAndSelect![key], key);\n });\n }\n\n if (options.cache) {\n if (options.cache instanceof Object) {\n const cache = options.cache as { id: any, milliseconds: number };\n qb.cache(cache.id, cache.milliseconds);\n } else {\n qb.cache(options.cache);\n }\n }\n\n if (options.lock) {\n if (options.lock.mode === \"optimistic\") {\n qb.setLock(options.lock.mode, options.lock.version);\n } else if (options.lock.mode === \"pessimistic_read\" || options.lock.mode === \"pessimistic_write\" || options.lock.mode === \"dirty_read\" || options.lock.mode === \"pessimistic_partial_write\" || options.lock.mode === \"pessimistic_write_or_fail\") {\n const tableNames = options.lock.tables ? options.lock.tables.map((table) => {\n const tableAlias = qb.expressionMap.aliases.find((alias) => {\n return alias.metadata.tableNameWithoutPrefix === table;\n });\n if (!tableAlias) {\n throw new TypeORMError(`\"${table}\" is not part of this query`);\n }\n return qb.escape(tableAlias.name);\n }) : undefined;\n qb.setLock(options.lock.mode, undefined, tableNames);\n }\n }\n\n if (options.loadRelationIds === true) {\n qb.loadAllRelationIds();\n\n } else if (options.loadRelationIds instanceof Object) {\n qb.loadAllRelationIds(options.loadRelationIds as any);\n }\n\n if (options.where)\n qb.where(options.where);\n\n if ((options as FindManyOptions<T>).skip)\n qb.skip((options as FindManyOptions<T>).skip!);\n\n if ((options as FindManyOptions<T>).take)\n qb.take((options as FindManyOptions<T>).take!);\n\n if (options.order)\n Object.keys(options.order).forEach(key => {\n const order = ((options as FindOneOptions<T>).order as any)[key as any];\n\n if (!metadata.findColumnWithPropertyPath(key))\n throw new Error(`${key} column was not found in the ${metadata.name} entity.`);\n\n switch (order) {\n case 1:\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case -1:\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n case \"ASC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case \"DESC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n }\n });\n\n return qb;\n }\n\n // -------------------------------------------------------------------------\n // Protected Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Adds joins for all relations and sub-relations of the given relations provided in the find options.\n */\n public static applyRelationsRecursively(qb: SelectQueryBuilder<any>, allRelations: string[], alias: string, metadata: EntityMetadata, prefix: string): void {\n\n // find all relations that match given prefix\n let matchedBaseRelations: string[] = [];\n if (prefix) {\n const regexp = new RegExp(\"^\" + prefix.replace(\".\", \"\\\\.\") + \"\\\\.\");\n matchedBaseRelations = allRelations\n .filter(relation => relation.match(regexp))\n .map(relation => relation.replace(regexp, \"\"))\n .filter(relation => metadata.findRelationWithPropertyPath(relation));\n } else {\n matchedBaseRelations = allRelations.filter(relation => metadata.findRelationWithPropertyPath(relation));\n }\n\n // go through all matched relations and add join for them\n matchedBaseRelations.forEach(relation => {\n\n // generate a relation alias\n let relationAlias: string = DriverUtils.buildAlias(qb.connection.driver, { shorten: true, joiner: \"__\" }, alias, relation);\n\n // add a join for the found relation\n const selection = alias + \".\" + relation;\n qb.leftJoinAndSelect(selection, relationAlias);\n\n // remove added relations from the allRelations array, this is needed to find all not found relations at the end\n allRelations.splice(allRelations.indexOf(prefix ? prefix + \".\" + relation : relation), 1);\n\n // try to find sub-relations\n const join = qb.expressionMap.joinAttributes.find(join => join.entityOrProperty === selection);\n this.applyRelationsRecursively(qb, allRelations, join!.alias.name, join!.metadata!, prefix ? prefix + \".\" + relation : relation);\n\n // join the eager relations of the found relation\n const relMetadata = metadata.relations.find(metadata => metadata.propertyName === relation);\n if (relMetadata) {\n this.joinEagerRelations(qb, relationAlias, relMetadata.inverseEntityMetadata);\n }\n });\n }\n\n public static joinEagerRelations(qb: SelectQueryBuilder<any>, alias: string, metadata: EntityMetadata) {\n metadata.eagerRelations.forEach(relation => {\n\n // generate a relation alias\n let relationAlias = DriverUtils.buildAlias(qb.connection.driver, { shorten: true }, qb.connection.namingStrategy.eagerJoinRelationAlias(alias, relation.propertyPath));\n\n // add a join for the relation\n // Checking whether the relation wasn't joined yet.\n let addJoin = true;\n for (const join of qb.expressionMap.joinAttributes) {\n if (\n join.condition !== undefined ||\n join.mapToProperty !== undefined ||\n join.isMappingMany !== undefined ||\n join.direction !== \"LEFT\" ||\n join.entityOrProperty !== `${alias}.${relation.propertyPath}`\n ) {\n continue;\n }\n addJoin = false;\n relationAlias = join.alias.name;\n break;\n }\n\n if (addJoin) {\n qb.leftJoin(alias + \".\" + relation.propertyPath, relationAlias);\n }\n\n // Checking whether the relation wasn't selected yet.\n // This check shall be after the join check to detect relationAlias.\n let addSelect = true;\n for (const select of qb.expressionMap.selects) {\n if (select.aliasName !== undefined || select.virtual !== undefined || select.selection !== relationAlias) {\n continue;\n }\n addSelect = false;\n break;\n }\n\n if (addSelect) {\n qb.addSelect(relationAlias);\n }\n\n // (recursive) join the eager relations\n this.joinEagerRelations(qb, relationAlias, relation.inverseEntityMetadata);\n });\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/find-options/FindOptionsUtils.ts"],"names":[],"mappings":"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","file":"FindOptionsUtils.js","sourcesContent":["import {FindManyOptions} from \"./FindManyOptions\";\nimport {FindOneOptions} from \"./FindOneOptions\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {FindRelationsNotFoundError} from \"../error/FindRelationsNotFoundError\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {DriverUtils} from \"../driver/DriverUtils\";\nimport { TypeORMError } from \"../error\";\nimport { FindTreeOptions } from \"./FindTreeOptions\";\n\n/**\n * Utilities to work with FindOptions.\n */\nexport class FindOptionsUtils {\n\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Checks if given object is really instance of FindOneOptions interface.\n */\n static isFindOneOptions<Entity = any>(obj: any): obj is FindOneOptions<Entity> {\n const possibleOptions: FindOneOptions<Entity> = obj;\n return possibleOptions &&\n (\n Array.isArray(possibleOptions.select) ||\n possibleOptions.where instanceof Object ||\n typeof possibleOptions.where === \"string\" ||\n Array.isArray(possibleOptions.relations) ||\n possibleOptions.join instanceof Object ||\n possibleOptions.order instanceof Object ||\n possibleOptions.cache instanceof Object ||\n typeof possibleOptions.cache === \"boolean\" ||\n typeof possibleOptions.cache === \"number\" ||\n possibleOptions.lock instanceof Object ||\n possibleOptions.loadRelationIds instanceof Object ||\n typeof possibleOptions.loadRelationIds === \"boolean\" ||\n typeof possibleOptions.loadEagerRelations === \"boolean\" ||\n typeof possibleOptions.withDeleted === \"boolean\" ||\n typeof possibleOptions.transaction === \"boolean\"\n );\n }\n\n /**\n * Checks if given object is really instance of FindManyOptions interface.\n */\n static isFindManyOptions<Entity = any>(obj: any): obj is FindManyOptions<Entity> {\n const possibleOptions: FindManyOptions<Entity> = obj;\n return possibleOptions && (\n this.isFindOneOptions(possibleOptions) ||\n typeof (possibleOptions as FindManyOptions<any>).skip === \"number\" ||\n typeof (possibleOptions as FindManyOptions<any>).take === \"number\" ||\n typeof (possibleOptions as FindManyOptions<any>).skip === \"string\" ||\n typeof (possibleOptions as FindManyOptions<any>).take === \"string\"\n );\n }\n\n /**\n * Checks if given object is really instance of FindOptions interface.\n */\n static extractFindManyOptionsAlias(object: any): string|undefined {\n if (this.isFindManyOptions(object) && object.join)\n return object.join.alias;\n\n return undefined;\n }\n\n /**\n * Applies give find many options to the given query builder.\n */\n static applyFindManyOptionsOrConditionsToQueryBuilder<T>(qb: SelectQueryBuilder<T>, options: FindManyOptions<T>|Partial<T>|undefined): SelectQueryBuilder<T> {\n if (this.isFindManyOptions(options))\n return this.applyOptionsToQueryBuilder(qb, options);\n\n if (options)\n return qb.where(options);\n\n return qb;\n }\n\n /**\n * Applies give find options to the given query builder.\n */\n static applyOptionsToQueryBuilder<T>(qb: SelectQueryBuilder<T>, options: FindOneOptions<T>|FindManyOptions<T>|undefined): SelectQueryBuilder<T> {\n\n // if options are not set then simply return query builder. This is made for simplicity of usage.\n if (!options || (!this.isFindOneOptions(options) && !this.isFindManyOptions(options)))\n return qb;\n\n if (options.transaction === true) {\n qb.expressionMap.useTransaction = true;\n }\n\n if (!qb.expressionMap.mainAlias || !qb.expressionMap.mainAlias.hasMetadata)\n return qb;\n\n const metadata = qb.expressionMap.mainAlias!.metadata;\n\n // apply all options from FindOptions\n if (options.withDeleted) {\n qb.withDeleted();\n }\n\n if (options.select) {\n qb.select([]);\n options.select.forEach(select => {\n if (!metadata.hasColumnWithPropertyPath(`${select}`))\n throw new TypeORMError(`${select} column was not found in the ${metadata.name} entity.`);\n\n const columns = metadata.findColumnsWithPropertyPath(`${select}`);\n\n for (const column of columns) {\n qb.addSelect(qb.alias + \".\" + column.propertyPath);\n }\n });\n }\n\n if (options.relations) {\n // Copy because `applyRelationsRecursively` modifies it\n const allRelations = [...options.relations];\n this.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias!.name, qb.expressionMap.mainAlias!.metadata, \"\");\n // recursive removes found relations from allRelations array\n // if there are relations left in this array it means those relations were not found in the entity structure\n // so, we give an exception about not found relations\n if (allRelations.length > 0)\n throw new FindRelationsNotFoundError(allRelations);\n }\n\n if (options.join) {\n if (options.join.leftJoin)\n Object.keys(options.join.leftJoin).forEach(key => {\n qb.leftJoin(options.join!.leftJoin![key], key);\n });\n\n if (options.join.innerJoin)\n Object.keys(options.join.innerJoin).forEach(key => {\n qb.innerJoin(options.join!.innerJoin![key], key);\n });\n\n if (options.join.leftJoinAndSelect)\n Object.keys(options.join.leftJoinAndSelect).forEach(key => {\n qb.leftJoinAndSelect(options.join!.leftJoinAndSelect![key], key);\n });\n\n if (options.join.innerJoinAndSelect)\n Object.keys(options.join.innerJoinAndSelect).forEach(key => {\n qb.innerJoinAndSelect(options.join!.innerJoinAndSelect![key], key);\n });\n }\n\n if (options.cache) {\n if (options.cache instanceof Object) {\n const cache = options.cache as { id: any, milliseconds: number };\n qb.cache(cache.id, cache.milliseconds);\n } else {\n qb.cache(options.cache);\n }\n }\n\n if (options.lock) {\n if (options.lock.mode === \"optimistic\") {\n qb.setLock(options.lock.mode, options.lock.version);\n } else if (options.lock.mode === \"pessimistic_read\" || options.lock.mode === \"pessimistic_write\" || options.lock.mode === \"dirty_read\" || options.lock.mode === \"pessimistic_partial_write\" || options.lock.mode === \"pessimistic_write_or_fail\") {\n const tableNames = options.lock.tables ? options.lock.tables.map((table) => {\n const tableAlias = qb.expressionMap.aliases.find((alias) => {\n return alias.metadata.tableNameWithoutPrefix === table;\n });\n if (!tableAlias) {\n throw new TypeORMError(`\"${table}\" is not part of this query`);\n }\n return qb.escape(tableAlias.name);\n }) : undefined;\n qb.setLock(options.lock.mode, undefined, tableNames);\n }\n }\n\n if (options.loadRelationIds === true) {\n qb.loadAllRelationIds();\n\n } else if (options.loadRelationIds instanceof Object) {\n qb.loadAllRelationIds(options.loadRelationIds as any);\n }\n\n if (options.where)\n qb.where(options.where);\n\n if ((options as FindManyOptions<T>).skip)\n qb.skip((options as FindManyOptions<T>).skip!);\n\n if ((options as FindManyOptions<T>).take)\n qb.take((options as FindManyOptions<T>).take!);\n\n if (options.order)\n Object.keys(options.order).forEach(key => {\n const order = ((options as FindOneOptions<T>).order as any)[key as any];\n\n if (!metadata.findColumnWithPropertyPath(key))\n throw new Error(`${key} column was not found in the ${metadata.name} entity.`);\n\n switch (order) {\n case 1:\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case -1:\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n case \"ASC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case \"DESC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n }\n });\n\n return qb;\n }\n\n static applyOptionsToTreeQueryBuilder<T>(qb: SelectQueryBuilder<T>, options?: FindTreeOptions): SelectQueryBuilder<T> {\n if (options?.relations) {\n // Copy because `applyRelationsRecursively` modifies it\n const allRelations = [...options.relations];\n\n FindOptionsUtils.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias!.name, qb.expressionMap.mainAlias!.metadata, \"\");\n\n // recursive removes found relations from allRelations array\n // if there are relations left in this array it means those relations were not found in the entity structure\n // so, we give an exception about not found relations\n if (allRelations.length > 0)\n throw new FindRelationsNotFoundError(allRelations);\n }\n\n return qb;\n }\n\n // -------------------------------------------------------------------------\n // Protected Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Adds joins for all relations and sub-relations of the given relations provided in the find options.\n */\n public static applyRelationsRecursively(qb: SelectQueryBuilder<any>, allRelations: string[], alias: string, metadata: EntityMetadata, prefix: string): void {\n\n // find all relations that match given prefix\n let matchedBaseRelations: string[] = [];\n if (prefix) {\n const regexp = new RegExp(\"^\" + prefix.replace(\".\", \"\\\\.\") + \"\\\\.\");\n matchedBaseRelations = allRelations\n .filter(relation => relation.match(regexp))\n .map(relation => relation.replace(regexp, \"\"))\n .filter(relation => metadata.findRelationWithPropertyPath(relation));\n } else {\n matchedBaseRelations = allRelations.filter(relation => metadata.findRelationWithPropertyPath(relation));\n }\n\n // go through all matched relations and add join for them\n matchedBaseRelations.forEach(relation => {\n\n // generate a relation alias\n let relationAlias: string = DriverUtils.buildAlias(qb.connection.driver, { shorten: true, joiner: \"__\" }, alias, relation);\n\n // add a join for the found relation\n const selection = alias + \".\" + relation;\n qb.leftJoinAndSelect(selection, relationAlias);\n\n // remove added relations from the allRelations array, this is needed to find all not found relations at the end\n allRelations.splice(allRelations.indexOf(prefix ? prefix + \".\" + relation : relation), 1);\n\n // try to find sub-relations\n const join = qb.expressionMap.joinAttributes.find(join => join.entityOrProperty === selection);\n this.applyRelationsRecursively(qb, allRelations, join!.alias.name, join!.metadata!, prefix ? prefix + \".\" + relation : relation);\n\n // join the eager relations of the found relation\n const relMetadata = metadata.relations.find(metadata => metadata.propertyName === relation);\n if (relMetadata) {\n this.joinEagerRelations(qb, relationAlias, relMetadata.inverseEntityMetadata);\n }\n });\n }\n\n public static joinEagerRelations(qb: SelectQueryBuilder<any>, alias: string, metadata: EntityMetadata) {\n metadata.eagerRelations.forEach(relation => {\n\n // generate a relation alias\n let relationAlias = DriverUtils.buildAlias(qb.connection.driver, { shorten: true }, qb.connection.namingStrategy.eagerJoinRelationAlias(alias, relation.propertyPath));\n\n // add a join for the relation\n // Checking whether the relation wasn't joined yet.\n let addJoin = true;\n for (const join of qb.expressionMap.joinAttributes) {\n if (\n join.condition !== undefined ||\n join.mapToProperty !== undefined ||\n join.isMappingMany !== undefined ||\n join.direction !== \"LEFT\" ||\n join.entityOrProperty !== `${alias}.${relation.propertyPath}`\n ) {\n continue;\n }\n addJoin = false;\n relationAlias = join.alias.name;\n break;\n }\n\n if (addJoin) {\n qb.leftJoin(alias + \".\" + relation.propertyPath, relationAlias);\n }\n\n // Checking whether the relation wasn't selected yet.\n // This check shall be after the join check to detect relationAlias.\n let addSelect = true;\n for (const select of qb.expressionMap.selects) {\n if (select.aliasName !== undefined || select.virtual !== undefined || select.selection !== relationAlias) {\n continue;\n }\n addSelect = false;\n break;\n }\n\n if (addSelect) {\n qb.addSelect(relationAlias);\n }\n\n // (recursive) join the eager relations\n this.joinEagerRelations(qb, relationAlias, relation.inverseEntityMetadata);\n });\n }\n\n}\n"],"sourceRoot":".."}
@@ -77,6 +77,11 @@ export declare class EntityMetadata {
77
77
  * Used in views
78
78
  */
79
79
  expression?: string | ((connection: Connection) => SelectQueryBuilder<any>);
80
+ /**
81
+ * View's dependencies.
82
+ * Used in views
83
+ */
84
+ dependsOn?: Set<Function | string>;
80
85
  /**
81
86
  * Enables Sqlite "WITHOUT ROWID" modifier for the "CREATE TABLE" statement
82
87
  */
@@ -237,6 +237,7 @@ var EntityMetadata = /** @class */ (function () {
237
237
  this.tableType = this.tableMetadataArgs.type;
238
238
  this.expression = this.tableMetadataArgs.expression;
239
239
  this.withoutRowid = this.tableMetadataArgs.withoutRowid;
240
+ this.dependsOn = this.tableMetadataArgs.dependsOn;
240
241
  }
241
242
  // -------------------------------------------------------------------------
242
243
  // Public Methods