@decaf-ts/core 0.7.12 → 0.7.14
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.
- package/README.md +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/lib/esm/identity/decorators.d.ts +1 -1
- package/lib/esm/identity/decorators.js +11 -4
- package/lib/esm/identity/decorators.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/interfaces/ContextuallyLogged.d.ts +2 -2
- package/lib/esm/model/construction.d.ts +4 -5
- package/lib/esm/model/construction.js +1 -1
- package/lib/esm/model/construction.js.map +1 -1
- package/lib/esm/model/decorators.d.ts +1 -0
- package/lib/esm/model/decorators.js +13 -6
- package/lib/esm/model/decorators.js.map +1 -1
- package/lib/esm/model/types.d.ts +1 -1
- package/lib/esm/overrides/Metadata.d.ts +4 -2
- package/lib/esm/overrides/Model.d.ts +10 -0
- package/lib/esm/overrides/decoration.d.ts +1 -0
- package/lib/esm/overrides/decoration.js +6 -0
- package/lib/esm/overrides/decoration.js.map +1 -0
- package/lib/esm/overrides/index.d.ts +1 -0
- package/lib/esm/overrides/index.js +1 -0
- package/lib/esm/overrides/index.js.map +1 -1
- package/lib/esm/overrides/overrides.js +18 -1
- package/lib/esm/overrides/overrides.js.map +1 -1
- package/lib/esm/persistence/Adapter.d.ts +8 -4
- package/lib/esm/persistence/Adapter.js +4 -3
- package/lib/esm/persistence/Adapter.js.map +1 -1
- package/lib/esm/persistence/Context.d.ts +5 -0
- package/lib/esm/persistence/Context.js +7 -0
- package/lib/esm/persistence/Context.js.map +1 -0
- package/lib/esm/persistence/Dispatch.d.ts +2 -2
- package/lib/esm/persistence/Dispatch.js.map +1 -1
- package/lib/esm/persistence/ObserverHandler.js.map +1 -1
- package/lib/esm/persistence/Sequence.d.ts +1 -1
- package/lib/esm/persistence/Sequence.js +2 -1
- package/lib/esm/persistence/Sequence.js.map +1 -1
- package/lib/esm/persistence/constants.d.ts +4 -1
- package/lib/esm/persistence/constants.js +8 -0
- package/lib/esm/persistence/constants.js.map +1 -1
- package/lib/esm/persistence/index.d.ts +1 -0
- package/lib/esm/persistence/index.js +1 -0
- package/lib/esm/persistence/index.js.map +1 -1
- package/lib/esm/persistence/migrations.js +2 -1
- package/lib/esm/persistence/migrations.js.map +1 -1
- package/lib/esm/persistence/types.d.ts +18 -5
- package/lib/esm/query/Condition.d.ts +3 -1
- package/lib/esm/query/Condition.js +11 -3
- package/lib/esm/query/Condition.js.map +1 -1
- package/lib/esm/query/MethodQueryBuilder.d.ts +0 -6
- package/lib/esm/query/MethodQueryBuilder.js +1 -1
- package/lib/esm/query/MethodQueryBuilder.js.map +1 -1
- package/lib/esm/query/Paginator.d.ts +7 -0
- package/lib/esm/query/Paginator.js.map +1 -1
- package/lib/esm/query/Statement.d.ts +17 -5
- package/lib/esm/query/Statement.js +265 -11
- package/lib/esm/query/Statement.js.map +1 -1
- package/lib/esm/query/constants.d.ts +6 -0
- package/lib/esm/query/constants.js +8 -0
- package/lib/esm/query/constants.js.map +1 -1
- package/lib/esm/query/options.d.ts +14 -9
- package/lib/esm/query/types.d.ts +19 -0
- package/lib/esm/query/types.js.map +1 -1
- package/lib/esm/ram/RamAdapter.d.ts +3 -2
- package/lib/esm/ram/RamAdapter.js +6 -3
- package/lib/esm/ram/RamAdapter.js.map +1 -1
- package/lib/esm/ram/RamPaginator.d.ts +2 -2
- package/lib/esm/ram/RamPaginator.js +4 -3
- package/lib/esm/ram/RamPaginator.js.map +1 -1
- package/lib/esm/ram/RamStatement.d.ts +1 -9
- package/lib/esm/ram/RamStatement.js +1 -18
- package/lib/esm/ram/RamStatement.js.map +1 -1
- package/lib/esm/ram/types.d.ts +3 -3
- package/lib/esm/repository/Repository.d.ts +18 -16
- package/lib/esm/repository/Repository.js +34 -12
- package/lib/esm/repository/Repository.js.map +1 -1
- package/lib/esm/utils/ContextualLoggedClass.d.ts +1 -1
- package/lib/esm/utils/ContextualLoggedClass.js +3 -3
- package/lib/esm/utils/ContextualLoggedClass.js.map +1 -1
- package/lib/esm/utils/Services.d.ts +9 -7
- package/lib/esm/utils/Services.js +7 -4
- package/lib/esm/utils/Services.js.map +1 -1
- package/lib/identity/decorators.cjs +10 -3
- package/lib/identity/decorators.d.ts +1 -1
- package/lib/identity/decorators.js.map +1 -1
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/interfaces/ContextuallyLogged.d.ts +2 -2
- package/lib/model/construction.d.ts +4 -5
- package/lib/model/construction.js.map +1 -1
- package/lib/model/decorators.cjs +14 -6
- package/lib/model/decorators.d.ts +1 -0
- package/lib/model/decorators.js.map +1 -1
- package/lib/model/types.d.ts +1 -1
- package/lib/overrides/Metadata.d.ts +4 -2
- package/lib/overrides/Model.d.ts +10 -0
- package/lib/overrides/decoration.cjs +8 -0
- package/lib/overrides/decoration.d.ts +1 -0
- package/lib/overrides/decoration.js.map +1 -0
- package/lib/overrides/index.cjs +1 -0
- package/lib/overrides/index.d.ts +1 -0
- package/lib/overrides/index.js.map +1 -1
- package/lib/overrides/overrides.cjs +30 -13
- package/lib/overrides/overrides.js.map +1 -1
- package/lib/persistence/Adapter.cjs +4 -3
- package/lib/persistence/Adapter.d.ts +8 -4
- package/lib/persistence/Adapter.js.map +1 -1
- package/lib/persistence/Context.cjs +11 -0
- package/lib/persistence/Context.d.ts +5 -0
- package/lib/persistence/Context.js.map +1 -0
- package/lib/persistence/Dispatch.d.ts +2 -2
- package/lib/persistence/Dispatch.js.map +1 -1
- package/lib/persistence/ObserverHandler.js.map +1 -1
- package/lib/persistence/Sequence.cjs +4 -3
- package/lib/persistence/Sequence.d.ts +1 -1
- package/lib/persistence/Sequence.js.map +1 -1
- package/lib/persistence/constants.cjs +9 -1
- package/lib/persistence/constants.d.ts +4 -1
- package/lib/persistence/constants.js.map +1 -1
- package/lib/persistence/index.cjs +1 -0
- package/lib/persistence/index.d.ts +1 -0
- package/lib/persistence/index.js.map +1 -1
- package/lib/persistence/migrations.cjs +2 -1
- package/lib/persistence/migrations.js.map +1 -1
- package/lib/persistence/types.d.ts +18 -5
- package/lib/query/Condition.cjs +11 -3
- package/lib/query/Condition.d.ts +3 -1
- package/lib/query/Condition.js.map +1 -1
- package/lib/query/MethodQueryBuilder.d.ts +0 -6
- package/lib/query/MethodQueryBuilder.js.map +1 -1
- package/lib/query/Paginator.d.ts +7 -0
- package/lib/query/Paginator.js.map +1 -1
- package/lib/query/Statement.cjs +262 -8
- package/lib/query/Statement.d.ts +17 -5
- package/lib/query/Statement.js.map +1 -1
- package/lib/query/constants.cjs +9 -1
- package/lib/query/constants.d.ts +6 -0
- package/lib/query/constants.js.map +1 -1
- package/lib/query/options.d.ts +14 -9
- package/lib/query/types.d.ts +19 -0
- package/lib/query/types.js.map +1 -1
- package/lib/ram/RamAdapter.cjs +4 -1
- package/lib/ram/RamAdapter.d.ts +3 -2
- package/lib/ram/RamAdapter.js.map +1 -1
- package/lib/ram/RamPaginator.cjs +4 -3
- package/lib/ram/RamPaginator.d.ts +2 -2
- package/lib/ram/RamPaginator.js.map +1 -1
- package/lib/ram/RamStatement.cjs +0 -17
- package/lib/ram/RamStatement.d.ts +1 -9
- package/lib/ram/RamStatement.js.map +1 -1
- package/lib/ram/types.d.ts +3 -3
- package/lib/repository/Repository.cjs +41 -19
- package/lib/repository/Repository.d.ts +18 -16
- package/lib/repository/Repository.js.map +1 -1
- package/lib/utils/ContextualLoggedClass.d.ts +1 -1
- package/lib/utils/ContextualLoggedClass.js.map +1 -1
- package/lib/utils/Services.cjs +9 -6
- package/lib/utils/Services.d.ts +9 -7
- package/lib/utils/Services.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DefaultRepositoryFlags } from "@decaf-ts/db-decorators";
|
|
1
2
|
/**
|
|
2
3
|
* @description Persistence-related constant keys
|
|
3
4
|
* @summary Enum containing string constants used throughout the persistence layer for metadata, relations, and other persistence-related operations
|
|
@@ -50,5 +51,12 @@ export var PersistenceKeys;
|
|
|
50
51
|
PersistenceKeys["MIGRATION"] = "migration";
|
|
51
52
|
PersistenceKeys["STATEMENT"] = "statement";
|
|
52
53
|
PersistenceKeys["QUERY"] = "query";
|
|
54
|
+
PersistenceKeys["GENERATED"] = "generated";
|
|
53
55
|
})(PersistenceKeys || (PersistenceKeys = {}));
|
|
56
|
+
export const DefaultAdapterFlags = Object.assign({}, DefaultRepositoryFlags, {
|
|
57
|
+
allowRawStatements: true,
|
|
58
|
+
allowGenerationOverride: false,
|
|
59
|
+
squashSimpleQueries: true,
|
|
60
|
+
allowComplexStatements: true,
|
|
61
|
+
});
|
|
54
62
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/persistence/constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/persistence/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGjE;;;;;;GAMG;AACH,MAAM,CAAN,IAAY,eAgEX;AAhED,WAAY,eAAe;IACzB,0CAA0C;IAC1C,kCAAe,CAAA;IAEf,sDAAsD;IACtD,oCAAiB,CAAA;IAEjB,4CAA4C;IAC5C,sCAAmB,CAAA;IAEnB,yDAAyD;IACzD,2DAAwC,CAAA;IAExC,sCAAmB,CAAA;IACnB,+CAA+C;IAC/C,kCAAe,CAAA;IAEf,gDAAgD;IAChD,oCAAiB,CAAA;IAEjB,oDAAoD;IACpD,0CAAuB,CAAA;IAEvB,YAAY;IACZ,yDAAyD;IACzD,0CAAuB,CAAA;IAEvB,yDAAyD;IACzD,sDAAsC,CAAA;IAEtC,yDAAyD;IACzD,sDAAsC,CAAA;IAEtC,YAAY;IAEZ,sDAAsD;IACtD,4CAAyB,CAAA;IAEzB,sDAAsD;IACtD,wCAAqB,CAAA;IAErB,wDAAwD;IACxD,qDAAqC,CAAA;IAErC,yDAAyD;IACzD,uDAAuC,CAAA;IAEvC,yDAAyD;IACzD,uDAAuC,CAAA;IACvC,yDAAyD;IACzD,yDAAyC,CAAA;IAEzC,6CAA6C;IAC7C,wCAAqB,CAAA;IACrB,6CAA6C;IAC7C,8CAA2B,CAAA;IAC3B,6CAA6C;IAC7C,0CAAuB,CAAA;IAEvB,0CAAuB,CAAA;IAEvB,kCAAe,CAAA;IAEf,0CAAuB,CAAA;AACzB,CAAC,EAhEW,eAAe,KAAf,eAAe,QAgE1B;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAiB,MAAM,CAAC,MAAM,CAC5D,EAAE,EACF,sBAAsB,EACtB;IACE,kBAAkB,EAAE,IAAI;IACxB,uBAAuB,EAAE,KAAK;IAC9B,mBAAmB,EAAE,IAAI;IACzB,sBAAsB,EAAE,IAAI;CAC7B,CACc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/persistence/index.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,8BAA2B;AAC3B,+BAA4B;AAC5B,4BAAyB;AACzB,gCAA6B;AAC7B,gCAA6B;AAC7B,qCAAkC;AAClC,8BAA2B;AAC3B,2BAAwB;AACxB,6BAA0B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/persistence/index.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,8BAA2B;AAC3B,+BAA4B;AAC5B,6BAA0B;AAC1B,4BAAyB;AACzB,gCAA6B;AAC7B,gCAA6B;AAC7B,qCAAkC;AAClC,8BAA2B;AAC3B,2BAAwB;AACxB,6BAA0B"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Adapter } from "./Adapter.js";
|
|
2
|
-
import {
|
|
2
|
+
import { InternalError } from "@decaf-ts/db-decorators";
|
|
3
3
|
import { LoggedClass } from "@decaf-ts/logging";
|
|
4
4
|
import { PersistenceKeys } from "./constants.js";
|
|
5
5
|
import { Decoration, Metadata, metadata } from "@decaf-ts/decoration";
|
|
6
6
|
import { MigrationRuleError } from "./errors.js";
|
|
7
7
|
import { Model } from "@decaf-ts/decorator-validation";
|
|
8
|
+
import { Context } from "./Context.js";
|
|
8
9
|
export function prefixMethod(obj, after, prefix, afterName) {
|
|
9
10
|
async function wrapper(...args) {
|
|
10
11
|
let results;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/persistence/migrations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,qBAAkB;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/persistence/migrations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,qBAAkB;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,uBAAoB;AAC9C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,oBAAiB;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,qBAAkB;AAEpC,MAAM,UAAU,YAAY,CAC1B,GAAQ,EACR,KAA8B,EAC9B,MAA+B,EAC/B,SAAkB;IAElB,KAAK,UAAU,OAAO,CAAY,GAAG,IAAW;QAC9C,IAAI,OAAc,CAAC;QACnB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,kBAAkB;gBAAE,OAAO;YAC5C,MAAM,CAAC,CAAC;QACV,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAChD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE;QACrC,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AACtB,CAAC;AAKD,MAAM,OAAgB,YAIpB,SAAQ,WAAW;IAKnB;QACE,KAAK,EAAE,CAAC;QAHV,gBAAW,GAAG,IAAI,CAAC;QAIjB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACjC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YACpB,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAc,OAAO;QACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CACvB,IAAI,CAAC,WAAkB,EACvB,eAAe,CAAC,SAAS,CAC1B,CAAC;QACF,IAAI,CAAC,IAAI;YACP,MAAM,IAAI,aAAa,CACrB,6BAA6B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CACrD,CAAC;QACJ,MAAM,OAAO,GAAW,IAAI,CAAC,OAAO,CAAC;QACrC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAM,CAAC;IACnC,CAAC;IAIO,KAAK,CAAC,YAAY,CAAC,EAAe,EAAE,OAAU,EAAE,GAAiB;QACvE,MAAM,KAAK,GAA8B,QAAQ,CAAC,GAAG,CACnD,IAAI,CAAC,WAAkB,EACvB,eAAe,CAAC,SAAS,CAC1B,EAAE,KAAK,CAAC;QACT,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,IAAY;QACzB,OAAO,KAAK,UAAU,OAAO,CAE3B,WAA4B;YAE5B,IAAI,EAAe,CAAC;YACpB,IAAI,WAAW,YAAY,OAAO,EAAE,CAAC;gBACnC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,EAAE,GAAG,WAAW,CAAC;gBACjB,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAC5B,WAAW,EACX,KAAY,EACZ,CAAC,IAAI,CAAC,EACN,WAAW,CACZ,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CACrC,EAAE,EACF,WAAgB,EAChB,GAAG,CAAC,OAAO,CACZ,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CACxB,sBAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,eAAe,CAC3D,CAAC;gBACF,MAAM,IAAI,kBAAkB,CAAC,wCAAwC,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CAKF;AAYD,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,KAAuB;IAChE,SAAS,cAAc,CAAC,OAAe,EAAE,KAAuB;QAC9D,OAAO,UAAU,QAAgB;YAC/B,MAAM,OAAO,GACX,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;gBACpE,EAAE,CAAC;YACL,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE;gBAC/C,GAAG,OAAO;gBACV;oBACE,KAAK,EAAE,QAAQ;iBAChB;aACF,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE;gBACzC,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,KAAK;aACb,CAAC,CAAC,QAAQ,CAAC,CAAC;QACf,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;SAC7C,MAAM,CAAC;QACN,SAAS,EAAE,cAAc;QACzB,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;KACvB,CAAC;SACD,KAAK,EAAE,CAAC;AACb,CAAC"}
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
import { BulkCrudOperationKeys,
|
|
1
|
+
import { BulkCrudOperationKeys, LoggerOfFlags, OperationKeys, RepositoryFlags } from "@decaf-ts/db-decorators";
|
|
2
2
|
import { Adapter } from "./Adapter";
|
|
3
3
|
import { Observable, type Observer } from "../interfaces/index";
|
|
4
4
|
import { Logger } from "@decaf-ts/logging";
|
|
5
5
|
import { Constructor } from "@decaf-ts/decoration";
|
|
6
6
|
import { Model } from "@decaf-ts/decorator-validation";
|
|
7
|
-
import { ContextualArgs } from "../utils
|
|
8
|
-
|
|
7
|
+
import { ContextualArgs } from "../utils";
|
|
8
|
+
import { Context } from "./Context";
|
|
9
|
+
import { Repository } from "../repository/Repository";
|
|
10
|
+
export type FlagsOfContext<C extends Context<any>> = C extends Context<infer F> ? F : never;
|
|
11
|
+
export type LoggerOfContext<C extends Context<any>> = LoggerOfFlags<FlagsOfContext<C>>;
|
|
12
|
+
export type ContextOfRepository<R extends Repository<any, any>> = R extends Repository<any, infer A> ? ContextOf<A> : never;
|
|
13
|
+
export type FlagsOfRepository<R extends Repository<any, any>> = FlagsOfContext<ContextOfRepository<R>>;
|
|
14
|
+
export type LoggerOfRepository<R extends Repository<any, any>> = LoggerOfContext<ContextOfRepository<R>>;
|
|
15
|
+
export type ContextOf<OBJ extends Repository<any, any> | Adapter<any, any, any, any>> = OBJ extends Adapter<any, any, any, infer C> ? C : OBJ extends Repository<any, any> ? ContextOfRepository<OBJ> : never;
|
|
9
16
|
export type LoggerOfAdapter<A extends Adapter<any, any, any, any>> = A extends Adapter<any, any, any, infer C> ? LoggerOfContext<C> : never;
|
|
10
17
|
export type FlagsOfAdapter<A extends Adapter<any, any, any, any>> = A extends Adapter<any, any, any, infer C> ? FlagsOfContext<C> : never;
|
|
11
|
-
export type LoggerOf<OBJ extends
|
|
12
|
-
export type FlagsOf<OBJ extends
|
|
18
|
+
export type LoggerOf<OBJ extends AdapterFlags<any> | Context<any> | Adapter<any, any, any> | Repository<any, any>> = OBJ extends AdapterFlags<any> ? LoggerOfFlags<OBJ> : OBJ extends Context<any> ? LoggerOfContext<OBJ> : OBJ extends Repository<any, any> ? LoggerOfRepository<OBJ> : OBJ extends Adapter<any, any, any> ? LoggerOfAdapter<OBJ> : Logger;
|
|
19
|
+
export type FlagsOf<OBJ extends Repository<any, any> | Adapter<any, any, any, any> | Context<any>> = OBJ extends Context<any> ? FlagsOfContext<OBJ> : OBJ extends Repository<any, any> ? FlagsOfRepository<OBJ> : OBJ extends Adapter<any, any, any, any> ? FlagsOfAdapter<OBJ> : never;
|
|
13
20
|
export type PersistenceObservable<CONTEXT extends Context<any>> = Observable<[
|
|
14
21
|
Observer,
|
|
15
22
|
ObserverFilter?
|
|
@@ -50,3 +57,9 @@ export type PreparedModel = {
|
|
|
50
57
|
id: string;
|
|
51
58
|
transient?: Record<string, any>;
|
|
52
59
|
};
|
|
60
|
+
export type AdapterFlags<LOG extends Logger = Logger> = RepositoryFlags<LOG> & {
|
|
61
|
+
allowRawStatements: boolean;
|
|
62
|
+
allowGenerationOverride: boolean;
|
|
63
|
+
squashSimpleQueries: boolean;
|
|
64
|
+
allowComplexStatements: boolean;
|
|
65
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AttributeOption, ConditionBuilderOption } from "./options";
|
|
2
|
-
import { ConditionalAsync, Model, ModelErrorDefinition } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { ConditionalAsync, Model, ModelArg, ModelErrorDefinition } from "@decaf-ts/decorator-validation";
|
|
3
3
|
import { GroupOperator, Operator } from "./constants";
|
|
4
4
|
type InferAsync<M> = M extends Model<infer A> ? A : false;
|
|
5
5
|
/**
|
|
@@ -38,6 +38,7 @@ export declare class Condition<M extends Model<any>> extends Model<InferAsync<M>
|
|
|
38
38
|
protected operator?: Operator | GroupOperator;
|
|
39
39
|
protected comparison?: any;
|
|
40
40
|
private constructor();
|
|
41
|
+
private constructor();
|
|
41
42
|
/**
|
|
42
43
|
* @description Combines this condition with another using logical AND
|
|
43
44
|
* @summary Joins two conditions with an AND operator, requiring both to be true
|
|
@@ -125,5 +126,6 @@ export declare class Condition<M extends Model<any>> extends Model<InferAsync<M>
|
|
|
125
126
|
* @return {ConditionBuilderOption<M>} A new condition builder instance
|
|
126
127
|
*/
|
|
127
128
|
static builder<M extends Model>(): ConditionBuilderOption<M>;
|
|
129
|
+
static from(obj: ModelArg<Condition<any>>): Condition<Model<any>>;
|
|
128
130
|
}
|
|
129
131
|
export {};
|
|
@@ -47,9 +47,14 @@ export class Condition extends Model {
|
|
|
47
47
|
this.attr1 = undefined;
|
|
48
48
|
this.operator = undefined;
|
|
49
49
|
this.comparison = undefined;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
if (!operator && !comparison) {
|
|
51
|
+
Model.fromModel(this, attr1);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.attr1 = attr1;
|
|
55
|
+
this.operator = operator;
|
|
56
|
+
this.comparison = comparison;
|
|
57
|
+
}
|
|
53
58
|
}
|
|
54
59
|
/**
|
|
55
60
|
* @description Combines this condition with another using logical AND
|
|
@@ -321,6 +326,9 @@ export class Condition extends Model {
|
|
|
321
326
|
static builder() {
|
|
322
327
|
return new Condition.Builder();
|
|
323
328
|
}
|
|
329
|
+
static from(obj) {
|
|
330
|
+
return new Condition(obj);
|
|
331
|
+
}
|
|
324
332
|
}
|
|
325
333
|
__decorate([
|
|
326
334
|
required(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Condition.js","sourceRoot":"","sources":["../../../src/query/Condition.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAEL,KAAK,
|
|
1
|
+
{"version":3,"file":"Condition.js","sourceRoot":"","sources":["../../../src/query/Condition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import { OrderBySelector } from "../query";
|
|
2
1
|
import { QueryAssist } from "./types";
|
|
3
|
-
export type OrderLimitOffsetExtract = {
|
|
4
|
-
orderBy?: OrderBySelector<any>[];
|
|
5
|
-
limit?: number;
|
|
6
|
-
offset?: number;
|
|
7
|
-
};
|
|
8
2
|
/**
|
|
9
3
|
* @description
|
|
10
4
|
* Utility class to build query objects from repository method names.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MethodQueryBuilder.js","sourceRoot":"","sources":["../../../src/query/MethodQueryBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MethodQueryBuilder.js","sourceRoot":"","sources":["../../../src/query/MethodQueryBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,6 +74,13 @@ export declare abstract class Paginator<M extends Model, R = M[], Q = any> exten
|
|
|
74
74
|
get count(): number;
|
|
75
75
|
protected get statement(): Q;
|
|
76
76
|
protected constructor(adapter: Adapter<any, any, Q, any>, query: Q, size: number, clazz: Constructor<M>);
|
|
77
|
+
/**
|
|
78
|
+
* @description Prepares a statement for pagination
|
|
79
|
+
* @summary Modifies the raw query statement to include pagination parameters.
|
|
80
|
+
* This protected method sets the limit parameter on the query to match the page size.
|
|
81
|
+
* @param {RawRamQuery<M>} rawStatement - The original query statement
|
|
82
|
+
* @return {RawRamQuery<M>} The modified query with pagination parameters
|
|
83
|
+
*/
|
|
77
84
|
protected abstract prepare(rawStatement: Q): Q;
|
|
78
85
|
next(...args: MaybeContextualArg<any>): Promise<R[]>;
|
|
79
86
|
previous(...args: MaybeContextualArg<any>): Promise<R[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Paginator.js","sourceRoot":"","sources":["../../../src/query/Paginator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAiB;AAIvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,MAAM,OAAgB,SAIpB,SAAQ,WAAW;IAQnB,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAc,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,YACqB,OAAkC,EAClC,KAAQ,EAClB,IAAY,EACF,KAAqB;QAExC,KAAK,EAAE,CAAC;QALW,YAAO,GAAP,OAAO,CAA2B;QAClC,UAAK,GAAL,KAAK,CAAG;QAClB,SAAI,GAAJ,IAAI,CAAQ;QACF,UAAK,GAAL,KAAK,CAAgB;IAG1C,CAAC;
|
|
1
|
+
{"version":3,"file":"Paginator.js","sourceRoot":"","sources":["../../../src/query/Paginator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAiB;AAIvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,MAAM,OAAgB,SAIpB,SAAQ,WAAW;IAQnB,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAc,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,YACqB,OAAkC,EAClC,KAAQ,EAClB,IAAY,EACF,KAAqB;QAExC,KAAK,EAAE,CAAC;QALW,YAAO,GAAP,OAAO,CAA2B;QAClC,UAAK,GAAL,KAAK,CAAG;QAClB,SAAI,GAAJ,IAAI,CAAQ;QACF,UAAK,GAAL,KAAK,CAAgB;IAG1C,CAAC;IAUD,KAAK,CAAC,IAAI,CAAC,GAAG,IAA6B;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAG,IAA6B;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAES,YAAY,CAAC,IAAY;QACjC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YACrC,MAAM,IAAI,WAAW,CACnB,sDAAsD,CACvD,CAAC;QACJ,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW;YACpE,MAAM,IAAI,WAAW,CACnB,QAAQ,IAAI,CAAC,WAAW,qCAAqC,IAAI,EAAE,CACpE,CAAC;QACJ,OAAO,IAAI,CAAC;IACd,CAAC;CAGF"}
|
|
@@ -2,13 +2,14 @@ import { Model } from "@decaf-ts/decorator-validation";
|
|
|
2
2
|
import type { Executor, RawExecutor } from "../interfaces";
|
|
3
3
|
import type { FromSelector, GroupBySelector, OrderBySelector, SelectSelector } from "./selectors";
|
|
4
4
|
import { Condition } from "./Condition";
|
|
5
|
-
import type { CountOption, DistinctOption, LimitOption, MaxOption, MinOption, OffsetOption, OrderAndGroupOption, SelectOption, WhereOption } from "./options";
|
|
5
|
+
import type { CountOption, DistinctOption, LimitOption, MaxOption, MinOption, OffsetOption, OrderAndGroupOption, PreparableStatementExecutor, SelectOption, StatementExecutor, WhereOption } from "./options";
|
|
6
6
|
import { Paginatable } from "../interfaces/Paginatable";
|
|
7
7
|
import { Paginator } from "./Paginator";
|
|
8
8
|
import { Adapter, type ContextOf } from "../persistence";
|
|
9
9
|
import { Logger } from "@decaf-ts/logging";
|
|
10
10
|
import { Constructor } from "@decaf-ts/decoration";
|
|
11
11
|
import { type ContextualArgs, ContextualLoggedClass, type MaybeContextualArg } from "../utils/index";
|
|
12
|
+
import { PreparedStatement } from "./types";
|
|
12
13
|
/**
|
|
13
14
|
* @description Base class for database query statements
|
|
14
15
|
* @summary Provides a foundation for building and executing database queries
|
|
@@ -73,6 +74,7 @@ export declare abstract class Statement<M extends Model, A extends Adapter<any,
|
|
|
73
74
|
protected groupBySelector?: GroupBySelector<M>;
|
|
74
75
|
protected limitSelector?: number;
|
|
75
76
|
protected offsetSelector?: number;
|
|
77
|
+
protected prepared?: PreparedStatement<M>;
|
|
76
78
|
protected constructor(adapter: Adapter<any, any, Q, any>);
|
|
77
79
|
protected get log(): Logger;
|
|
78
80
|
select<S extends readonly SelectSelector<M>[]>(): SelectOption<M, M[]>;
|
|
@@ -83,14 +85,24 @@ export declare abstract class Statement<M extends Model, A extends Adapter<any,
|
|
|
83
85
|
count<S extends SelectSelector<M>>(selector?: S): CountOption<M, number>;
|
|
84
86
|
from(selector: FromSelector<M>): WhereOption<M, R>;
|
|
85
87
|
where(condition: Condition<M>): OrderAndGroupOption<M, R>;
|
|
86
|
-
orderBy(selector: OrderBySelector<M>): LimitOption<M, R> & OffsetOption<R>;
|
|
88
|
+
orderBy(selector: OrderBySelector<M>): LimitOption<M, R> & OffsetOption<M, R>;
|
|
87
89
|
groupBy(selector: GroupBySelector<M>): LimitOption<M, R>;
|
|
88
|
-
limit(value: number): OffsetOption<R>;
|
|
89
|
-
offset(value: number):
|
|
90
|
+
limit(value: number): OffsetOption<M, R>;
|
|
91
|
+
offset(value: number): PreparableStatementExecutor<M, R>;
|
|
90
92
|
execute(...args: MaybeContextualArg<ContextOf<A>>): Promise<R>;
|
|
91
93
|
raw<R>(rawInput: Q, ...args: ContextualArgs<ContextOf<A>>): Promise<R>;
|
|
94
|
+
protected prepareCondition(condition: Condition<any>, ctx: ContextOf<A>): PreparedStatement<any>;
|
|
95
|
+
protected squash(ctx: ContextOf<A>): PreparedStatement<any> | undefined;
|
|
96
|
+
prepare(ctx?: ContextOf<A>): Promise<StatementExecutor<M, R>>;
|
|
92
97
|
protected abstract build(): Q;
|
|
93
98
|
protected abstract parseCondition(condition: Condition<M>, ...args: any[]): Q;
|
|
94
|
-
|
|
99
|
+
/**
|
|
100
|
+
* @description Creates a paginator for the query
|
|
101
|
+
* @summary Builds the query and wraps it in a RamPaginator to enable pagination of results.
|
|
102
|
+
* This allows retrieving large result sets in smaller chunks.
|
|
103
|
+
* @param {number} size - The page size (number of results per page)
|
|
104
|
+
* @return {Promise<Paginator<M, R, RawRamQuery<M>>>} A promise that resolves to a paginator for the query
|
|
105
|
+
*/
|
|
106
|
+
paginate(size: number, ...args: MaybeContextualArg<ContextOf<A>>): Promise<Paginator<M, R, Q>>;
|
|
95
107
|
toString(): string;
|
|
96
108
|
}
|
|
@@ -10,11 +10,15 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
var _a, _b, _c, _d;
|
|
11
11
|
import { Model } from "@decaf-ts/decorator-validation";
|
|
12
12
|
import { Condition } from "./Condition.js";
|
|
13
|
-
import {
|
|
14
|
-
import { final } from "@decaf-ts/logging";
|
|
15
|
-
import { Adapter } from "./../persistence/index.js";
|
|
13
|
+
import { InternalError, prefixMethod } from "@decaf-ts/db-decorators";
|
|
14
|
+
import { final, toCamelCase } from "@decaf-ts/logging";
|
|
15
|
+
import { Adapter, PersistenceKeys } from "./../persistence/index.js";
|
|
16
16
|
import { QueryError } from "./errors.js";
|
|
17
17
|
import { ContextualLoggedClass, } from "./../utils/index.js";
|
|
18
|
+
import { Context } from "./../persistence/Context.js";
|
|
19
|
+
import { QueryClause } from "./types.js";
|
|
20
|
+
import { GroupOperator, Operator, PreparedStatementKeys } from "./constants.js";
|
|
21
|
+
import { OrderDirection } from "./../repository/index.js";
|
|
18
22
|
/**
|
|
19
23
|
* @description Base class for database query statements
|
|
20
24
|
* @summary Provides a foundation for building and executing database queries
|
|
@@ -70,6 +74,21 @@ export class Statement extends ContextualLoggedClass {
|
|
|
70
74
|
constructor(adapter) {
|
|
71
75
|
super();
|
|
72
76
|
this.adapter = adapter;
|
|
77
|
+
[this.execute, this.paginate].forEach((m) => {
|
|
78
|
+
prefixMethod(this, m, async (...args) => {
|
|
79
|
+
let execArgs = args;
|
|
80
|
+
if ((!execArgs.length ||
|
|
81
|
+
!(execArgs[execArgs.length - 1] instanceof Context)) &&
|
|
82
|
+
this.fromSelector) {
|
|
83
|
+
const ctx = await this.adapter.context(PersistenceKeys.QUERY, {}, this.fromSelector);
|
|
84
|
+
execArgs = [...execArgs, ctx];
|
|
85
|
+
}
|
|
86
|
+
const { ctx, ctxArgs } = Adapter.logCtx(execArgs, m.name);
|
|
87
|
+
if (!ctx.get("allowRawStatements") && !this.prepared)
|
|
88
|
+
await this.prepare(ctx);
|
|
89
|
+
return ctxArgs;
|
|
90
|
+
}, m.name);
|
|
91
|
+
});
|
|
73
92
|
}
|
|
74
93
|
get log() {
|
|
75
94
|
return this.adapter.log.for(Statement);
|
|
@@ -124,14 +143,7 @@ export class Statement extends ContextualLoggedClass {
|
|
|
124
143
|
return this;
|
|
125
144
|
}
|
|
126
145
|
async execute(...args) {
|
|
127
|
-
|
|
128
|
-
if ((!execArgs.length ||
|
|
129
|
-
!(execArgs[execArgs.length - 1] instanceof Context)) &&
|
|
130
|
-
this.fromSelector) {
|
|
131
|
-
const ctx = await this.adapter.context(OperationKeys.READ, {}, this.fromSelector);
|
|
132
|
-
execArgs = [...execArgs, ctx];
|
|
133
|
-
}
|
|
134
|
-
const { ctx } = Adapter.logCtx(execArgs, this.toString());
|
|
146
|
+
const ctx = args.pop(); // handled by prefix
|
|
135
147
|
try {
|
|
136
148
|
const query = this.build();
|
|
137
149
|
return (await this.raw(query, ctx));
|
|
@@ -154,6 +166,248 @@ export class Statement extends ContextualLoggedClass {
|
|
|
154
166
|
return results.map(processor);
|
|
155
167
|
return processor(results);
|
|
156
168
|
}
|
|
169
|
+
prepareCondition(condition, ctx) {
|
|
170
|
+
// @ts-expect-error accessing protected properties
|
|
171
|
+
// eslint-disable-next-line prefer-const
|
|
172
|
+
let { attr1, operator, comparison } = condition;
|
|
173
|
+
const result = {};
|
|
174
|
+
switch (operator) {
|
|
175
|
+
case GroupOperator.AND:
|
|
176
|
+
case GroupOperator.OR: {
|
|
177
|
+
let side1 = attr1, side2 = comparison;
|
|
178
|
+
if (typeof attr1 !== "string") {
|
|
179
|
+
const condition1 = this.prepareCondition(attr1, ctx);
|
|
180
|
+
side1 = condition1.method;
|
|
181
|
+
result.args = [...(result.args || []), ...(condition1.args || [])];
|
|
182
|
+
}
|
|
183
|
+
if (comparison instanceof Condition) {
|
|
184
|
+
const condition2 = this.prepareCondition(comparison, ctx);
|
|
185
|
+
side2 = condition2.method;
|
|
186
|
+
result.args = [...(result.args || []), ...(condition2.args || [])];
|
|
187
|
+
}
|
|
188
|
+
result.method = `${side1} ${operator.toLowerCase()} ${side2}`;
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
case Operator.EQUAL:
|
|
192
|
+
result.method = attr1;
|
|
193
|
+
result.args = [...(result.args || []), comparison];
|
|
194
|
+
break;
|
|
195
|
+
case Operator.DIFFERENT:
|
|
196
|
+
result.method = `${attr1} diff`;
|
|
197
|
+
result.args = [...(result.args || []), comparison];
|
|
198
|
+
break;
|
|
199
|
+
case Operator.REGEXP:
|
|
200
|
+
result.method = `${attr1} matches`;
|
|
201
|
+
result.args = [...(result.args || []), comparison];
|
|
202
|
+
break;
|
|
203
|
+
case Operator.BIGGER:
|
|
204
|
+
result.method = `${attr1} bigger`;
|
|
205
|
+
result.args = [...(result.args || []), comparison];
|
|
206
|
+
break;
|
|
207
|
+
case Operator.BIGGER_EQ:
|
|
208
|
+
result.method = `${attr1} bigger than equal`;
|
|
209
|
+
break;
|
|
210
|
+
case Operator.SMALLER:
|
|
211
|
+
result.method = `${attr1} less`;
|
|
212
|
+
result.args = [...(result.args || []), comparison];
|
|
213
|
+
break;
|
|
214
|
+
case Operator.SMALLER_EQ:
|
|
215
|
+
result.method = `${attr1} less than equal`;
|
|
216
|
+
result.args = [...(result.args || []), comparison];
|
|
217
|
+
break;
|
|
218
|
+
case Operator.IN:
|
|
219
|
+
result.method = `${attr1} in`;
|
|
220
|
+
result.args = [...(result.args || []), comparison];
|
|
221
|
+
break;
|
|
222
|
+
default:
|
|
223
|
+
throw new QueryError(`Unsupported operator ${operator}`);
|
|
224
|
+
}
|
|
225
|
+
return result;
|
|
226
|
+
}
|
|
227
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
228
|
+
squash(ctx) {
|
|
229
|
+
if (this.selectSelector && this.selectSelector.length)
|
|
230
|
+
return undefined;
|
|
231
|
+
if (this.groupBySelector)
|
|
232
|
+
return undefined;
|
|
233
|
+
if (this.countSelector)
|
|
234
|
+
return undefined;
|
|
235
|
+
if (this.maxSelector)
|
|
236
|
+
return undefined;
|
|
237
|
+
if (this.minSelector)
|
|
238
|
+
return undefined;
|
|
239
|
+
let attrFromWhere;
|
|
240
|
+
if (this.whereCondition) {
|
|
241
|
+
if (this.whereCondition["comparison"] instanceof Condition)
|
|
242
|
+
return undefined;
|
|
243
|
+
attrFromWhere = this.whereCondition["attr1"];
|
|
244
|
+
}
|
|
245
|
+
const order = this.orderBySelector
|
|
246
|
+
? this.orderBySelector
|
|
247
|
+
: attrFromWhere
|
|
248
|
+
? [attrFromWhere, OrderDirection.DSC]
|
|
249
|
+
: [Model.pk(this.fromSelector), OrderDirection.DSC];
|
|
250
|
+
const [attrFromOrderBy, sort] = order;
|
|
251
|
+
const params = {
|
|
252
|
+
direction: sort,
|
|
253
|
+
};
|
|
254
|
+
if (this.limitSelector)
|
|
255
|
+
params.limit = this.limitSelector;
|
|
256
|
+
if (this.offsetSelector)
|
|
257
|
+
params.offset = this.offsetSelector;
|
|
258
|
+
const squashed = {
|
|
259
|
+
// listBy
|
|
260
|
+
class: this.fromSelector,
|
|
261
|
+
method: PreparedStatementKeys.LIST_BY,
|
|
262
|
+
args: [attrFromOrderBy],
|
|
263
|
+
params: params,
|
|
264
|
+
};
|
|
265
|
+
if (attrFromWhere) {
|
|
266
|
+
// findBy
|
|
267
|
+
squashed.method = PreparedStatementKeys.FIND_BY;
|
|
268
|
+
squashed.args = [
|
|
269
|
+
attrFromWhere,
|
|
270
|
+
this.whereCondition["comparison"],
|
|
271
|
+
];
|
|
272
|
+
squashed.params = params;
|
|
273
|
+
}
|
|
274
|
+
return squashed;
|
|
275
|
+
//
|
|
276
|
+
//
|
|
277
|
+
//
|
|
278
|
+
// let attrs = rawStatement.method.split(
|
|
279
|
+
// new RegExp(
|
|
280
|
+
// `(${[QueryClause.FIND_BY, QueryClause.SELECT, QueryClause.ORDER_BY, QueryClause.GROUP_BY, QueryClause.AND, QueryClause.OR].join("|")})`,
|
|
281
|
+
// "i"
|
|
282
|
+
// )
|
|
283
|
+
// );
|
|
284
|
+
//
|
|
285
|
+
// attrs = attrs
|
|
286
|
+
// .map((s) => s.trim())
|
|
287
|
+
// .filter(Boolean)
|
|
288
|
+
// .filter(
|
|
289
|
+
// (s) =>
|
|
290
|
+
// ![
|
|
291
|
+
// QueryClause.FIND_BY,
|
|
292
|
+
// QueryClause.SELECT,
|
|
293
|
+
// QueryClause.ORDER_BY,
|
|
294
|
+
// QueryClause.GROUP_BY,
|
|
295
|
+
// toPascalCase(OrderDirection.ASC),
|
|
296
|
+
// toPascalCase(OrderDirection.DSC),
|
|
297
|
+
// ].find((c) => s.includes(c))
|
|
298
|
+
// );
|
|
299
|
+
//
|
|
300
|
+
// const fullOrderBy = rawStatement.method.split(QueryClause.ORDER_BY);
|
|
301
|
+
// let orderBy: any;
|
|
302
|
+
// if (fullOrderBy.length) {
|
|
303
|
+
// orderBy = fullOrderBy[1]
|
|
304
|
+
// .split(
|
|
305
|
+
// new RegExp(
|
|
306
|
+
// `${[toPascalCase(OrderDirection.ASC), toPascalCase(OrderDirection.DSC), QueryClause.GROUP_BY + ".*", QueryClause.THEN_BY].join("|")}`,
|
|
307
|
+
// "i"
|
|
308
|
+
// )
|
|
309
|
+
// )
|
|
310
|
+
// .map((s) => s.trim())
|
|
311
|
+
// .filter(Boolean);
|
|
312
|
+
// orderBy = [
|
|
313
|
+
// orderBy[0] as any,
|
|
314
|
+
// fullOrderBy[1].includes(toPascalCase(OrderDirection.ASC))
|
|
315
|
+
// ? OrderDirection.ASC
|
|
316
|
+
// : OrderDirection.DSC,
|
|
317
|
+
// ];
|
|
318
|
+
// }
|
|
319
|
+
//
|
|
320
|
+
// const canBeSquashed = (!attrs.length
|
|
321
|
+
// || (attrs.length === 1 && attrs[0] === orderBy[0]
|
|
322
|
+
//
|
|
323
|
+
// if (attrs.length === 1 && attrs[0] === orderBy[0]) {
|
|
324
|
+
// // there's an order by
|
|
325
|
+
// const attr = attrs[0];
|
|
326
|
+
// if (attrFromWhere && attrFromWhere !== attr) {
|
|
327
|
+
// return rawStatement;
|
|
328
|
+
// }
|
|
329
|
+
// return Object.assign({}, rawStatement, {
|
|
330
|
+
// method: PreparedStatementKeys.LIST_BY,
|
|
331
|
+
// args: [toCamelCase(attr), orderBy[1]],
|
|
332
|
+
// // args: [toCamelCase(attr), orderBy[1], this.size],
|
|
333
|
+
// });
|
|
334
|
+
// } else {
|
|
335
|
+
// // there's no orderBy
|
|
336
|
+
// return Object.assign({}, rawStatement, {
|
|
337
|
+
// method: rawStatement.method.replace(QueryClause.FIND_BY, PreparedStatementKeys.LIST_BY),
|
|
338
|
+
// args: [...rawStatement.args],
|
|
339
|
+
// // args: [...rawStatement.args, this.size],
|
|
340
|
+
// });
|
|
341
|
+
// }
|
|
342
|
+
}
|
|
343
|
+
async prepare(ctx) {
|
|
344
|
+
ctx =
|
|
345
|
+
ctx ||
|
|
346
|
+
(await this.adapter.context(PersistenceKeys.QUERY, {}, this.fromSelector));
|
|
347
|
+
if (ctx.get("squashSimpleQueries")) {
|
|
348
|
+
const squashed = this.squash(ctx);
|
|
349
|
+
if (squashed) {
|
|
350
|
+
this.prepared = squashed;
|
|
351
|
+
return this;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
const args = [];
|
|
355
|
+
const params = {};
|
|
356
|
+
const prepared = {
|
|
357
|
+
class: this.fromSelector,
|
|
358
|
+
args,
|
|
359
|
+
params,
|
|
360
|
+
};
|
|
361
|
+
const method = [QueryClause.FIND_BY];
|
|
362
|
+
if (this.whereCondition) {
|
|
363
|
+
const parsed = this.prepareCondition(this.whereCondition, ctx);
|
|
364
|
+
method.push(parsed.method);
|
|
365
|
+
if (parsed.args && parsed.args.length)
|
|
366
|
+
args.push(...parsed.args);
|
|
367
|
+
}
|
|
368
|
+
if (this.selectSelector)
|
|
369
|
+
method.push(QueryClause.SELECT, this.selectSelector.join(` ${QueryClause.AND.toLowerCase()} `));
|
|
370
|
+
if (this.orderBySelector)
|
|
371
|
+
method.push(QueryClause.ORDER_BY, ...this.orderBySelector);
|
|
372
|
+
if (this.groupBySelector)
|
|
373
|
+
method.push(QueryClause.GROUP_BY, this.groupBySelector);
|
|
374
|
+
if (this.limitSelector)
|
|
375
|
+
params.limit = this.limitSelector;
|
|
376
|
+
if (this.offsetSelector) {
|
|
377
|
+
params.skip = this.offsetSelector;
|
|
378
|
+
}
|
|
379
|
+
prepared.method = toCamelCase(method.join(" "));
|
|
380
|
+
prepared.params = params;
|
|
381
|
+
this.prepared = prepared;
|
|
382
|
+
if (!ctx.get("squashSimpleQueries") ||
|
|
383
|
+
(this.selectSelector && this.selectSelector.length) ||
|
|
384
|
+
this.groupBySelector ||
|
|
385
|
+
this.countSelector ||
|
|
386
|
+
this.maxSelector ||
|
|
387
|
+
this.minSelector) {
|
|
388
|
+
return this;
|
|
389
|
+
}
|
|
390
|
+
this.prepared = prepared;
|
|
391
|
+
return this;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* @description Creates a paginator for the query
|
|
395
|
+
* @summary Builds the query and wraps it in a RamPaginator to enable pagination of results.
|
|
396
|
+
* This allows retrieving large result sets in smaller chunks.
|
|
397
|
+
* @param {number} size - The page size (number of results per page)
|
|
398
|
+
* @return {Promise<Paginator<M, R, RawRamQuery<M>>>} A promise that resolves to a paginator for the query
|
|
399
|
+
*/
|
|
400
|
+
async paginate(size, ...args) {
|
|
401
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
402
|
+
const ctx = args.pop(); // handled by prefix. kept for example for overrides
|
|
403
|
+
try {
|
|
404
|
+
const query = this.build();
|
|
405
|
+
return this.adapter.Paginator(query, size, this.fromSelector);
|
|
406
|
+
}
|
|
407
|
+
catch (e) {
|
|
408
|
+
throw new QueryError(e);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
157
411
|
toString() {
|
|
158
412
|
return `${this.adapter.flavour} statement`;
|
|
159
413
|
}
|