@cubejs-backend/schema-compiler 1.3.84 → 1.3.86
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/dist/src/adapter/BaseQuery.d.ts +11 -3
- package/dist/src/adapter/BaseQuery.d.ts.map +1 -1
- package/dist/src/adapter/BaseQuery.js +50 -14
- package/dist/src/adapter/BaseQuery.js.map +1 -1
- package/dist/src/adapter/PreAggregations.d.ts +15 -2
- package/dist/src/adapter/PreAggregations.d.ts.map +1 -1
- package/dist/src/adapter/PreAggregations.js +100 -49
- package/dist/src/adapter/PreAggregations.js.map +1 -1
- package/dist/src/compiler/CubeEvaluator.d.ts +2 -3
- package/dist/src/compiler/CubeEvaluator.d.ts.map +1 -1
- package/dist/src/compiler/CubeEvaluator.js +10 -3
- package/dist/src/compiler/CubeEvaluator.js.map +1 -1
- package/dist/src/compiler/CubeSymbols.d.ts +14 -3
- package/dist/src/compiler/CubeSymbols.d.ts.map +1 -1
- package/dist/src/compiler/CubeSymbols.js +30 -7
- package/dist/src/compiler/CubeSymbols.js.map +1 -1
- package/dist/src/compiler/CubeValidator.d.ts.map +1 -1
- package/dist/src/compiler/CubeValidator.js +0 -1
- package/dist/src/compiler/CubeValidator.js.map +1 -1
- package/dist/src/compiler/JoinGraph.d.ts +1 -1
- package/dist/src/compiler/JoinGraph.d.ts.map +1 -1
- package/dist/src/scaffolding/ScaffoldingSchema.d.ts.map +1 -1
- package/dist/src/scaffolding/ScaffoldingSchema.js +10 -1
- package/dist/src/scaffolding/ScaffoldingSchema.js.map +1 -1
- package/package.json +6 -6
|
@@ -136,13 +136,14 @@ export class BaseQuery {
|
|
|
136
136
|
prebuildJoin(): void;
|
|
137
137
|
joinGraphPaths: Record<string, string[]> | undefined;
|
|
138
138
|
/**
|
|
139
|
-
* Is used by native
|
|
140
139
|
* This function follows the same logic as in this.collectJoinHints()
|
|
141
|
-
*
|
|
140
|
+
* skipQueryJoinMap is used by PreAggregations to build join tree without user's query all members map
|
|
141
|
+
* @public
|
|
142
142
|
* @param {Array<(Array<string> | string)>} hints
|
|
143
|
+
* @param { boolean } skipQueryJoinMap
|
|
143
144
|
* @return {import('../compiler/JoinGraph').FinishedJoinTree}
|
|
144
145
|
*/
|
|
145
|
-
|
|
146
|
+
public joinTreeForHints(hints: Array<(Array<string> | string)>, skipQueryJoinMap?: boolean): import('../compiler/JoinGraph').FinishedJoinTree;
|
|
146
147
|
cacheValue(key: any, fn: any, { contextPropNames, inputProps, cache }?: {
|
|
147
148
|
contextPropNames: any;
|
|
148
149
|
inputProps: any;
|
|
@@ -161,6 +162,13 @@ export class BaseQuery {
|
|
|
161
162
|
* @return { Record<string, string[][]>}
|
|
162
163
|
*/
|
|
163
164
|
private queryJoinMap;
|
|
165
|
+
/**
|
|
166
|
+
* @private
|
|
167
|
+
* @param { import('../compiler/JoinGraph').FinishedJoinTree } joinTree
|
|
168
|
+
* @param { string[] } joinHints
|
|
169
|
+
* @return { string[][] }
|
|
170
|
+
*/
|
|
171
|
+
private enrichedJoinHintsFromJoinTree;
|
|
164
172
|
/**
|
|
165
173
|
* @private
|
|
166
174
|
* @param { (string|string[])[] } hints
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseQuery.js"],"names":[],"mappings":"AA6DA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AAEH;;;;;GAKG;AAEH;;GAEG;AAEH;;;;;;;;;;;;GAYG;AACH;
|
|
1
|
+
{"version":3,"file":"BaseQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseQuery.js"],"names":[],"mappings":"AA6DA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AAEH;;;;;GAKG;AAEH;;GAEG;AAEH;;;;;;;;;;;;GAYG;AACH;IAwoJE;;;;;;;MASC;IAgBD,8CAcC;IAED,4GAsBC;IA6BD,yHAyCC;IAsCD,mHAuDC;IA30JD;;;;OAIG;IACH,uBAHW,SAAS,MAAE,gBAgBrB;IAhDD,0DAA0D;IAC1D,iBADW,OAAO,mBAAmB,EAAE,eAAe,CACtC;IAEhB,oDAAoD;IACpD,UADW,OAAO,eAAe,EAAE,WAAW,EAAE,CACvC;IAET,wDAAwD;IACxD,YADW,OAAO,iBAAiB,EAAE,aAAa,EAAE,CACzC;IAEX,wDAAwD;IACxD,sBADW,OAAO,iBAAiB,EAAE,aAAa,EAAE,CAC/B;IAErB,gEAAgE;IAChE,0BADW,OAAO,qBAAqB,EAAE,iBAAiB,EAAE,CACnC;IAEzB,oDAAoD;IACpD,UADW,OAAO,eAAe,EAAE,WAAW,EAAE,CACvC;IAET,6CAA6C;IAC7C,SADW,CAAC,UAAU,GAAC,eAAe,CAAC,EAAE,CACjC;IAER,6CAA6C;IAC7C,gBADW,CAAC,UAAU,GAAC,eAAe,CAAC,EAAE,CAC1B;IAEf,gEAAgE;IAChE,gBADW,OAAO,qBAAqB,EAAE,iBAAiB,EAAE,CAC7C;IAEf,+DAA+D;IAC/D,MADW,OAAO,uBAAuB,EAAE,gBAAgB,CACtD;IAQH,eAA0B;IAC1B,gEAAgE;IAChE,eADW,OAAO,2BAA2B,EAAE,aAAa,CAChB;IAC5C,wDAAwD;IACxD,WADW,OAAO,uBAAuB,EAAE,SAAS,CAChB;IACpC,aAA4B;IA6zF9B;;;OAGG;IACH,wBAHW;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,GAC3B,MAAM,GAAC,IAAI,CAevB;IA32ED;;;QA4BC;IA3fC,6BAA6B;IAC7B,gBADW,cAAc,CACiF;IAI5G,qDAoBC;IAED,sDAYC;IAED,2CAuDC;IAED;;OAEG;IACH,kCA0GC;IAzGC,oBAGC;IACD,mBAA0D;IAC1D,gBA8BE;IACF,UAA6B;IAC7B,qBAAmD;IACnD,cAAqC;IACrC,cAAqC;IACrC,YAAiC;IAsCjC,4CAAgF;IAChF;;;;;OAKG;IACH;aAFsB,MAAM;YAAM;YAAC,UAAU,WAAU;SAAC;kBAAY,MAAM,GAAG,OAAO;eAAS,MAAM;oBAExC;IAC3D,yBAAyF;IACzF,0CAAqF;IAMrF,yBAAuD;IAGvD,qBAAmD;IACnD,iCAAuG;IACvG,wBAAyD;IAIzD,WAAsD;IAMxD,4CAEC;IAED,qBAuBC;IATG,qDAA0C;IAW9C;;;;;;;OAOG;IACH,+BAJW,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,qBAC9B,OAAO,GACP,OAAO,uBAAuB,EAAE,gBAAgB,CA2C3D;IAED;;;;YAkCC;IAED,6BAKC;IAHG,yCAAiD;IAKrD;;;OAGG;IACH,0CAKC;IAHG,sDAAiD;IAKrD;;;OAGG;IACH,qBAYC;IAED;;;;;OAKG;IACH,sCAoBC;IAED;;;;;OAKG;IACH,+BAmBC;IAED,yBAMC;IAED,kCAEC;IAED;;MASC;IAED,sBAeC;IAdC,eAAuC;IAgBzC,mCAYC;IARG,0CAIC;IAML,4BAEC;IAED,2BAEC;IAgCD;;;;OAIG;IACH,8BAFa,WAAW,CAIvB;IAED;;;;OAIG;IACH,kCAFa,aAAa,CAiBzB;IAED;;;;OAIG;IACH,8BAFa,WAAW,CAIvB;IAED;;OAEG;IACH,yBAFa,eAAe,GAAC,UAAU,CAStC;IAED;;OAEG;IACH,wBAFa,UAAU,CAItB;IAED;;;;OAIG;IACH,6BAFa,eAAe,CAI3B;IAED;;;OAGG;IACH,sCAFY,iBAAiB,CAI5B;IAED;;;;OAIG;IACH,0CAFa,cAAc,CAI1B;IAED;;;OAGG;IACH,sBAFa,eAAe,CAI3B;IAED;;;;OAIG;IACH,uBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,0BAFa,MAAM,CA6ClB;IAED;;;;;OAKG;IACH,mBAHW,MAAM,GACJ,MAAM,CAOlB;IAED,6IAqBC;IAED,uCAYC;IAED,6BAGC;IAED;;;;OAIG;IACH,6DAFa,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAgDpC;IAED,gCAKC;IAED,sDA2CC;IAGD,sCAmCC;IAED,oCAIC;IAED,gCAEC;IAGD,wGAEC;IAGD,mIAEC;IAED,kIAEC;IAED,iCAEC;IAED;;;OAGG;IACH,oBAFa,OAAO,MAAM,EAAE,MAAM,MAAM,CAAC,CAAC,CAwCzC;IAED,qBAMC;IAED,oKAQC;IAED,4DAqBC;IAED,kGAoCC;IAED;;;;OAIG;IACH,uBAJW,MAAM,YACN,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,kBAJW,MAAM,YACN,MAAM,GACJ,MAAM,CAKlB;IAGD,6CAEC;IAED;;;OAGG;IACH,yBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,gCAJW,MAAM,YACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,qCAJW,MAAM,YACN,MAAM,GACJ,MAAM,CAIlB;IAED,oCAEC;IAED,qBAEC;IAED,sBAYC;IAED;;;OAGG;IACH,yBAFa,MAAM,CAqJlB;IAED,uHAWC;IAED,kGAgDC;IAED,oCAEC;IAED,gDAMC;IAED;;;;;;MAgFC;IAED,4CAaC;IAED;;MAYC;IAED,wEAeC;IAED,kGA+BC;IAED,4DAGC;IAED,mEAyDC;IAED,2FA6CC;IAED;;;MAkFC;IAED,iEAQC;IAED,gCAGC;IAED,iCAGC;IAED,4CAEC;IAED,8BA0CC;IAED,kDAEC;IAED,0DAuBC;IAED,oFAuFC;IAED,sKAKC;IAED,qFAOC;IAED;;;;OAIG;IACH,8GAqBC;IAED;;;OAGG;IACH,6BAHW,OAAO,qBAAqB,EAAE,iBAAiB,GAC9C,MAAM,CAIjB;IAED;;;;;OAKG;IACH,yBAHW,OAAO,qBAAqB,EAAE,iBAAiB,GAC9C,MAAM,CAOjB;IAED;;;OAGG;IACH,8BAHW,OAAO,iBAAiB,EAAE,aAAa,GAAC,OAAO,qBAAqB,EAAE,iBAAiB,GACtF,MAAM,CAIjB;IAED,2FAEC;IAED,gGAEC;IAED,iEAEC;IAED,qEAEC;IAED,gEAEC;IAED,oEAEC;IAED,kCAEC;IAED,iCAEC;IAED;;;;;;OAMG;IACH,iDAGC;IAED,sBAKC;IAED,6DA+CC;IAED;;MAqCC;IAED,aAMC;IAED;;;;;OAKG;IACH,2BAJW,MAAM,8CAEJ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAsBrC;IAED;;;;OAIG;IACH,gBAJW,OAAO,uBAAuB,EAAE,gBAAgB,sBAChD,MAAM,MAAM,CAAC,GACX,MAAM,CAwBlB;IAED;;;OAGG;IACH,uCAFa,MAAM,CAYlB;IAED;;;;;OAKG;IACH;aAJiB,MAAM;YAAM;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,UAAU,WAAU;SAAC;kBAAY,MAAM,GAAG,OAAO;eAAS,MAAM;QAEnG,QAAQ,CAWpB;IAED;;;;OAIG;IACH,wBAHW,MAAM,GACJ,QAAQ,CAkBpB;IAED,oDAOC;IALG,+DAEC;IAKL;;;;OAIG;IACH,+BAHW,MAAM;gBACM,MAAM;;kBAA4B,MAAM;MA4C9D;IAED;;;;;OAKG;IACH,uBAJW,MAAM,QACN,MAAM,GACJ,MAAM,CAIlB;IAED,6DAiBC;IAED;;;;;;OAMG;IACH,+BALW,MAAM,YACN,MAAM,WAAW,CAAC,WAClB,MAAM,UAAU,CAAC,GACf,MAAM,CAqElB;IAED;;;;OAIG;IACH,+CAJW,MAAM,WAAW,CAAC,eAClB,MAAM,GACJ,OAAO,CAwCnB;IAED,iJAOC;IAED,mFAKC;IAED,yCAKC;IAED,2DAYC;IAED,8CAKC;IAED,gFAaC;IAED;;OAEG;IACH,cAFW,MAAM,OA0BhB;IAED,4BAmBC;IAED;;;OAGG;IACH,oBAFa,MAAM,MAAM,CAAC,CAQzB;IAED;;;;;;OAMG;IACH,yBAqBC;IAED;;;;OAIG;IACH,yBAoDC;IAED;;;;;;;;;QAeC;IAED,oCAUC;IAED,iDAWC;IAED;;;;;;OAMG;IACH,6CALW,OAAO,UACH,MAAM,IAAI,oBACd,MAAM,GAAG,MAAM,MAAM,CAAC,KAahC;IAED;;;;OAIG;IACH,wCAHW,OAAO,GACL,MAAM,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC,CAS5D;IAED;;;;;;;OAOG;IACH,uCANW,MAAM,OAAO,CAAC,UACV,MAAM,IAAI,sBACd,MAAM,GAAG,MAAM,MAAM,CAAC,UACtB,OAAO,OAsBjB;IAED;;;;OAIG;IACH,iCAHW,MAAM,IAAI,GACR,MAAM,MAAM,CAAC,CASzB;IAED,6DAMC;IAED;;;;OAIG;IACH,kCAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,iBAFa,MAAM,CAYlB;IAED;;;;;OAKG;IACH,4BAHW,MAAM,GACJ,MAAM,GAAC,MAAM,GAAC,IAAI,CAsD9B;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,IAAI,GAAC,MAAM,CAsDvB;IAqBD,kBAgBC;IAED;;;;OAIG;IACH,uBAFa,MAAM,MAAM,CAAC,CAIzB;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,MAAM,MAAM,CAAC,CAIzB;IAED,gCAWC;IAED;;;;OAIG;IACH,8CAHW,MAAM,MAAM,CAAC,GACX,MAAM,CA0ClB;IAED;;;;;OAKG;IACH,sDAFa,MAAM,CAMlB;IAED,mBAEC;IAED,qBAEC;IAED,sDAIC;IAED;;OAEG;IACH,aAFa,MAAM,aAAa,GAAC,WAAW,CAAC,CAI5C;IAED;;;OAGG;IACH,uBAFa,CAAC,aAAa,GAAC,iBAAiB,CAAC,EAAE,CAI/C;IAED,kCAEC;IAED,8BAEC;IAED,8BAEC;IAED,6EAKC;IAED,6CAEC;IAED,0DAIC;IAED,oCAOC;IAED,uEAgBC;IAED,iCAEC;IAED,+GAkLC;IAED,+EAEC;IAED,oCAEC;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,MAAM,MAAM,CAAC,CAQzB;IAED,uDAEC;IAED,wDAuBC;IAED,wDAEC;IAED;;;;;OAKG;IACH,oBAHW,MAAM,UAYhB;IAED;;;;OAIG;IACH,8BAFa,MAAM,MAAM,CAAC,CAUzB;IAED,sCAOC;IAED;;;;OAIG;IACH,gCAFa,MAAM,MAAM,CAAC,CAUzB;IAED,kCAEC;IAED,4DAmBC;IAED,wCAWC;IAED;;;;;OAKG;IACH,0DAHW,OAAO,OAajB;IARC,2BAA0F;IAU5F,oHAwGC;IAED,6GAgBC;IAED,qDAKC;IAED,yBAEC;IAED,0BAEC;IAED,gCAEC;IAED,6BAEC;IAED,oCAEC;IAED,+BAEC;IAGD,oCAEC;IAED,sDAMC;IAED,qDASC;IAED,yDAKC;IAED,qDAGC;IAED,uEAQC;IAED,wDAEC;IAED,4DAGC;IAED;;;;OAIG;IACH,8BAJW,MAAM,YACN,MAAM,GACJ,OAAO,CASnB;IAED;;;OAGG;IACH,gDAGC;IAED,uCAEC;IAED;;OAEG;IACH,mBAFY,MAAM,CAIjB;IAED;;OAEG;IACH,sBAFY,MAAM,CAIjB;IAED;;;OAGG;IAEH,iBAJW,MAAM,GACL,MAAM,CAKjB;IAED;;;;OAIG;IAEH,+BALW,MAAM,aACN,MAAM,GACL,MAAM,CAKjB;IAED;;;;;;;OAOG;IAEH,kBANW,MAAM,UACN,MAAM,UACN,MAAM,GACJ,MAAM,CAMlB;IAED;;;;;OAKG;IACH,4CAHW,MAAM,GACJ,MAAM,CAoBlB;IAED;;;;OAIG;IACH,sCAJW,MAAM,eACN,OAAO,eAAe,EAAE,WAAW,GAClC,MAAM,CAoBjB;IAED;;;;;OAKG;IACH,gBAJW,MAAM,yBACN,OAAO,UACL,MAAM,CAoBlB;IAED;;;;OAIG;IACH,qBAHW,OAAO,GACL,IAAI,CAKhB;IAED,iDAWC;IAED,mCAeC;IAED,uCASC;IAED,sDA4CC;IAED,2EAqBC;IAED;;MAMC;IAED,wDAEC;IAED,0BAEC;IAED,2BAEC;IAED,qFAGC;IAED,4BAEC;IAED,6EAGC;IAED,8DAEC;IAED,0FAWC;IAED,iDAiBC;IAED,4EAEC;IAED,uDA6BC;IAED,qEA4CC;IAED,oEAMC;IAED,kEAEC;IAED,uFAEC;IAED;;;OAGG;IACH,uBAFa,GAAG,CAyNf;IAED;;;;;OAKG;IAEH,mFAHa,SAAS,CAWrB;IAED;;;;MA0BC;IAED;;;;MAwBC;IAED,6DA0BC;IAED,kGAoDC;IAED;;;;OAIG;IACH,kCAHW,MAAM,GACL,CAAC,MAAM,EAAE,MAAM,CAAC,CAW3B;IAED,sCAIC;IAED,2CAKC;IAED,+BAEC;IAED,8EAcC;IAED,4CAEC;IAED;;MAIC;IAED;;;;;;;;;;;;;;;OAeG;IACH,gCAHW,MAAM,GACL,MAAM,CAIjB;IAED,sEAEC;IAED,iGAqGC;IAED,0FAqBC;IAED,qFAcC;IAED,kCAcC;IAZG,qCASE;IAgBN,iCAEC;IAED;2BAlgCW,MAAM,KACL,MAAM;MAqgCjB;IAED,0CAEC;IA0CD,mBAQC;IAED,0CASC;IAED,oFAIC;IA6CD,6DAGC;IAED,gFA6BC;IA2DD;;;;OAIG;IACH,oCAHW,OAAO,GACL,MAAM,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC,CAY5D;IAED;;OAEG;IACH,8BAFa,OAAO,MAAM,EAAE,MAAM,CAAC,CAKlC;IAED;;OAEG;IACH,qCAFa,OAAO,MAAM,EAAE,MAAM,CAAC,CAIlC;IAED;;OAEG;IACH,uBAFa,OAAO,MAAM,EAAE,MAAM,CAAC,CAIlC;IAED;;;;OAIG;IACH,0BAHW,MAAM,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC,GAC9C,OAAO,MAAM,EAAE,MAAM,CAAC,CAwDlC;IAED,kDAkCC;IAED;;;;OAIG;IACH,2BAFa,mBAAkB,MAAM,CAAC,CAkBrC;CACF;;;;;cAjjKa,OAAO,gCAAgC,EAAE,kBAAkB;qBAC3D,OAAO,mCAAmC,EAAE,qBAAqB;mBACjE,OAAO,2BAA2B,EAAE,aAAa;sBACjD,OAAO,8BAA8B,EAAE,gBAAgB;eACvD,OAAO,uBAAuB,EAAE,SAAS;mBACzC,OAAO,2BAA2B,EAAE,aAAa;;;;SAMjD,MAAM;WACN,MAAM;;;SAKN,MAAM;WACN,MAAM;QACN,MAAM;;wBAIP,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC;2BAxDT,cAAc;gCACT,mBAAmB;+BAKpB,kBAAkB;kCAFf,qBAAqB;4BAF3B,eAAe;8BAHb,iBAAiB;4BAInB,eAAe;gCAIX,mBAAmB;cA3BrC,OAAO;uBAHE,aAAa"}
|
|
@@ -349,16 +349,16 @@ class BaseQuery {
|
|
|
349
349
|
}
|
|
350
350
|
}
|
|
351
351
|
/**
|
|
352
|
-
* Is used by native
|
|
353
352
|
* This function follows the same logic as in this.collectJoinHints()
|
|
354
|
-
*
|
|
353
|
+
* skipQueryJoinMap is used by PreAggregations to build join tree without user's query all members map
|
|
354
|
+
* @public
|
|
355
355
|
* @param {Array<(Array<string> | string)>} hints
|
|
356
|
+
* @param { boolean } skipQueryJoinMap
|
|
356
357
|
* @return {import('../compiler/JoinGraph').FinishedJoinTree}
|
|
357
358
|
*/
|
|
358
|
-
joinTreeForHints(hints) {
|
|
359
|
-
const
|
|
360
|
-
|
|
361
|
-
const newCollectedHints = [];
|
|
359
|
+
joinTreeForHints(hints, skipQueryJoinMap = false) {
|
|
360
|
+
const queryJoinMaps = skipQueryJoinMap ? {} : this.queryJoinMap();
|
|
361
|
+
let newCollectedHints = [];
|
|
362
362
|
const constructJH = () => ramda_1.default.uniq(this.enrichHintsWithJoinMap([
|
|
363
363
|
...newCollectedHints,
|
|
364
364
|
...hints,
|
|
@@ -377,14 +377,18 @@ class BaseQuery {
|
|
|
377
377
|
const iterationCollectedHints = joinMembersJoinHints.filter(j => !allJoinHintsFlatten.has(j));
|
|
378
378
|
newJoinHintsCollectedCnt = iterationCollectedHints.length;
|
|
379
379
|
cnt++;
|
|
380
|
-
if (newJoin) {
|
|
381
|
-
|
|
380
|
+
if (newJoin && newJoin.joins.length > 0) {
|
|
381
|
+
// Even if there is no join tree changes, we still
|
|
382
|
+
// push correctly ordered join hints, collected from the resolving of members of join tree
|
|
383
|
+
// upfront the all existing query members. This ensures the correct cube join order
|
|
384
|
+
// with transitive joins even if they are already presented among query members.
|
|
385
|
+
newCollectedHints = this.enrichedJoinHintsFromJoinTree(newJoin, joinMembersJoinHints);
|
|
382
386
|
}
|
|
383
387
|
} while (newJoin?.joins.length > 0 && !this.isJoinTreesEqual(prevJoin, newJoin) && cnt < 10000 && newJoinHintsCollectedCnt > 0);
|
|
384
388
|
if (cnt >= 10000) {
|
|
385
389
|
throw new UserError_1.UserError('Can not construct joins for the query, potential loop detected');
|
|
386
390
|
}
|
|
387
|
-
return
|
|
391
|
+
return this.joinGraph.buildJoin(constructJH());
|
|
388
392
|
}
|
|
389
393
|
cacheValue(key, fn, { contextPropNames, inputProps, cache } = {}) {
|
|
390
394
|
const currentContext = this.safeEvaluateSymbolContext();
|
|
@@ -450,6 +454,30 @@ class BaseQuery {
|
|
|
450
454
|
}
|
|
451
455
|
return joinMaps;
|
|
452
456
|
}
|
|
457
|
+
/**
|
|
458
|
+
* @private
|
|
459
|
+
* @param { import('../compiler/JoinGraph').FinishedJoinTree } joinTree
|
|
460
|
+
* @param { string[] } joinHints
|
|
461
|
+
* @return { string[][] }
|
|
462
|
+
*/
|
|
463
|
+
enrichedJoinHintsFromJoinTree(joinTree, joinHints) {
|
|
464
|
+
const joinsMap = {};
|
|
465
|
+
for (const j of joinTree.joins) {
|
|
466
|
+
joinsMap[j.to] = j.from;
|
|
467
|
+
}
|
|
468
|
+
return joinHints.map(jh => {
|
|
469
|
+
let cubeName = jh;
|
|
470
|
+
const path = [cubeName];
|
|
471
|
+
while (joinsMap[cubeName]) {
|
|
472
|
+
cubeName = joinsMap[cubeName];
|
|
473
|
+
path.push(cubeName);
|
|
474
|
+
}
|
|
475
|
+
if (path.length === 1) {
|
|
476
|
+
return path[0];
|
|
477
|
+
}
|
|
478
|
+
return path.reverse();
|
|
479
|
+
});
|
|
480
|
+
}
|
|
453
481
|
/**
|
|
454
482
|
* @private
|
|
455
483
|
* @param { (string|string[])[] } hints
|
|
@@ -2067,10 +2095,9 @@ class BaseQuery {
|
|
|
2067
2095
|
*/
|
|
2068
2096
|
collectJoinHints(excludeTimeDimensions = false) {
|
|
2069
2097
|
const allMembersJoinHints = this.collectJoinHintsFromMembers(this.allMembersConcat(excludeTimeDimensions));
|
|
2070
|
-
const explicitJoinHintMembers = new Set(allMembersJoinHints.filter(j => Array.isArray(j)).flat());
|
|
2071
2098
|
const queryJoinMaps = this.queryJoinMap();
|
|
2072
2099
|
const customSubQueryJoinHints = this.collectJoinHintsFromMembers(this.joinMembersFromCustomSubQuery());
|
|
2073
|
-
|
|
2100
|
+
let newCollectedHints = [];
|
|
2074
2101
|
// One cube may join the other cube via transitive joined cubes,
|
|
2075
2102
|
// members from which are referenced in the join `on` clauses.
|
|
2076
2103
|
// We need to collect such join hints and push them upfront of the joining one
|
|
@@ -2097,8 +2124,12 @@ class BaseQuery {
|
|
|
2097
2124
|
const iterationCollectedHints = joinMembersJoinHints.filter(j => !allJoinHintsFlatten.has(j));
|
|
2098
2125
|
newJoinHintsCollectedCnt = iterationCollectedHints.length;
|
|
2099
2126
|
cnt++;
|
|
2100
|
-
if (newJoin) {
|
|
2101
|
-
|
|
2127
|
+
if (newJoin && newJoin.joins.length > 0) {
|
|
2128
|
+
// Even if there is no join tree changes, we still
|
|
2129
|
+
// push correctly ordered join hints, collected from the resolving of members of join tree
|
|
2130
|
+
// upfront the all existing query members. This ensures the correct cube join order
|
|
2131
|
+
// with transitive joins even if they are already presented among query members.
|
|
2132
|
+
newCollectedHints = this.enrichedJoinHintsFromJoinTree(newJoin, joinMembersJoinHints);
|
|
2102
2133
|
}
|
|
2103
2134
|
} while (newJoin?.joins.length > 0 && !this.isJoinTreesEqual(prevJoin, newJoin) && cnt < 10000 && newJoinHintsCollectedCnt > 0);
|
|
2104
2135
|
if (cnt >= 10000) {
|
|
@@ -2134,9 +2165,14 @@ class BaseQuery {
|
|
|
2134
2165
|
})) : [];
|
|
2135
2166
|
}
|
|
2136
2167
|
collectJoinHintsFromMembers(members) {
|
|
2168
|
+
// Extract cube names from members to make cache key member-cubes-specific
|
|
2169
|
+
const memberCubes = members
|
|
2170
|
+
.map(m => m.cube?.()?.name)
|
|
2171
|
+
.filter(Boolean)
|
|
2172
|
+
.sort();
|
|
2137
2173
|
return [
|
|
2138
2174
|
...members.map(m => m.joinHint).filter(h => h?.length > 0),
|
|
2139
|
-
...this.collectFrom(members, this.collectJoinHintsFor.bind(this), 'collectJoinHintsFromMembers'),
|
|
2175
|
+
...this.collectFrom(members, this.collectJoinHintsFor.bind(this), ['collectJoinHintsFromMembers', ...memberCubes]),
|
|
2140
2176
|
];
|
|
2141
2177
|
}
|
|
2142
2178
|
/**
|