@cubejs-backend/schema-compiler 1.2.30 → 1.2.32
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/BaseDimension.d.ts +1 -0
- package/dist/src/adapter/BaseDimension.d.ts.map +1 -1
- package/dist/src/adapter/BaseDimension.js +10 -0
- package/dist/src/adapter/BaseDimension.js.map +1 -1
- package/dist/src/adapter/BaseMeasure.d.ts +8 -2
- package/dist/src/adapter/BaseMeasure.d.ts.map +1 -1
- package/dist/src/adapter/BaseMeasure.js +94 -0
- package/dist/src/adapter/BaseMeasure.js.map +1 -1
- package/dist/src/adapter/BaseQuery.d.ts +34 -14
- package/dist/src/adapter/BaseQuery.d.ts.map +1 -1
- package/dist/src/adapter/BaseQuery.js +75 -18
- package/dist/src/adapter/BaseQuery.js.map +1 -1
- package/dist/src/adapter/BaseSegment.d.ts +1 -0
- package/dist/src/adapter/BaseSegment.d.ts.map +1 -1
- package/dist/src/adapter/BaseSegment.js +8 -0
- package/dist/src/adapter/BaseSegment.js.map +1 -1
- package/dist/src/adapter/BigqueryQuery.d.ts.map +1 -1
- package/dist/src/adapter/BigqueryQuery.js +11 -3
- package/dist/src/adapter/BigqueryQuery.js.map +1 -1
- package/dist/src/adapter/PreAggregations.d.ts +11 -4
- package/dist/src/adapter/PreAggregations.d.ts.map +1 -1
- package/dist/src/adapter/PreAggregations.js +28 -4
- package/dist/src/adapter/PreAggregations.js.map +1 -1
- package/dist/src/compiler/CompilerCache.d.ts +1 -1
- package/dist/src/compiler/CompilerCache.d.ts.map +1 -1
- package/dist/src/compiler/CompilerCache.js +5 -8
- package/dist/src/compiler/CompilerCache.js.map +1 -1
- package/dist/src/compiler/ContextEvaluator.d.ts +1 -1
- package/dist/src/compiler/CubeEvaluator.d.ts +47 -43
- package/dist/src/compiler/CubeEvaluator.d.ts.map +1 -1
- package/dist/src/compiler/CubeEvaluator.js +7 -8
- package/dist/src/compiler/CubeEvaluator.js.map +1 -1
- package/dist/src/compiler/CubeSymbols.d.ts +24 -5
- package/dist/src/compiler/CubeSymbols.d.ts.map +1 -1
- package/dist/src/compiler/CubeSymbols.js +32 -2
- package/dist/src/compiler/CubeSymbols.js.map +1 -1
- package/dist/src/compiler/DataSchemaCompiler.d.ts +2 -0
- package/dist/src/compiler/DataSchemaCompiler.d.ts.map +1 -1
- package/dist/src/compiler/DataSchemaCompiler.js +13 -1
- package/dist/src/compiler/DataSchemaCompiler.js.map +1 -1
- package/dist/src/compiler/DynamicReference.d.ts +4 -4
- package/dist/src/compiler/DynamicReference.d.ts.map +1 -1
- package/dist/src/compiler/DynamicReference.js +2 -0
- package/dist/src/compiler/DynamicReference.js.map +1 -1
- package/dist/src/compiler/PrepareCompiler.d.ts +4 -0
- package/dist/src/compiler/PrepareCompiler.d.ts.map +1 -1
- package/dist/src/compiler/PrepareCompiler.js +3 -0
- package/dist/src/compiler/PrepareCompiler.js.map +1 -1
- package/dist/src/extensions/Reflection.d.ts +1 -1
- package/dist/src/extensions/Reflection.d.ts.map +1 -1
- package/package.json +10 -10
|
@@ -7,6 +7,7 @@ export declare class BaseDimension {
|
|
|
7
7
|
readonly expressionCubeName: any;
|
|
8
8
|
readonly expressionName: string | undefined;
|
|
9
9
|
readonly isMemberExpression: boolean;
|
|
10
|
+
readonly joinHint: Array<string>;
|
|
10
11
|
constructor(query: BaseQuery, dimension: any);
|
|
11
12
|
selectColumns(): string[] | null;
|
|
12
13
|
hasNoRemapping(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseDimension.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseDimension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAExF,qBAAa,aAAa;
|
|
1
|
+
{"version":3,"file":"BaseDimension.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseDimension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAExF,qBAAa,aAAa;IAYtB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS;aACnB,SAAS,EAAE,GAAG;IAZhC,SAAgB,UAAU,EAAE,GAAG,CAAC;IAEhC,SAAgB,kBAAkB,EAAE,GAAG,CAAC;IAExC,SAAgB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnD,SAAgB,kBAAkB,EAAE,OAAO,CAAS;IAEpD,SAAgB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;gBAGxB,KAAK,EAAE,SAAS,EACnB,SAAS,EAAE,GAAG;IAmBzB,aAAa,IAAI,MAAM,EAAE,GAAG,IAAI;IAIhC,cAAc;IAId,uBAAuB;IAIvB,YAAY;IAWZ,oCAAoC,CAAC,GAAG,KAAA;IAUxC,aAAa;IAIb,UAAU;IAIV,YAAY;IAOZ,IAAI;IAOJ,mBAAmB,IAAI,mBAAmB,GAAG,iBAAiB;IAQ9D,UAAU,IAAI,mBAAmB,GAAG,iBAAiB;IAYrD,SAAS,IAAI,MAAM,GAAG,IAAI;IAK1B,kBAAkB,IAAI,MAAM;IAQ5B,aAAa;IAIb,IAAI;IAYJ,cAAc;CAMtB"}
|
|
@@ -8,6 +8,7 @@ class BaseDimension {
|
|
|
8
8
|
expressionCubeName;
|
|
9
9
|
expressionName;
|
|
10
10
|
isMemberExpression = false;
|
|
11
|
+
joinHint = [];
|
|
11
12
|
constructor(query, dimension) {
|
|
12
13
|
this.query = query;
|
|
13
14
|
this.dimension = dimension;
|
|
@@ -18,6 +19,15 @@ class BaseDimension {
|
|
|
18
19
|
this.expressionName = dimension.expressionName || `${dimension.cubeName}.${dimension.name}`;
|
|
19
20
|
this.isMemberExpression = !!dimension.definition;
|
|
20
21
|
}
|
|
22
|
+
else {
|
|
23
|
+
// TODO move this `as` to static types
|
|
24
|
+
const dimensionPath = dimension;
|
|
25
|
+
if (dimensionPath !== null) {
|
|
26
|
+
const { path, joinHint } = this.query.cubeEvaluator.joinHintFromPath(dimensionPath);
|
|
27
|
+
this.dimension = path;
|
|
28
|
+
this.joinHint = joinHint;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
21
31
|
}
|
|
22
32
|
selectColumns() {
|
|
23
33
|
return [`${this.dimensionSql()} ${this.aliasName()}`];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseDimension.js","sourceRoot":"","sources":["../../../src/adapter/BaseDimension.ts"],"names":[],"mappings":";;;AAGA,MAAa,aAAa;
|
|
1
|
+
{"version":3,"file":"BaseDimension.js","sourceRoot":"","sources":["../../../src/adapter/BaseDimension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BaseQuery } from './BaseQuery';
|
|
2
|
+
import { MeasureDefinition } from "../compiler/CubeEvaluator";
|
|
2
3
|
export declare class BaseMeasure {
|
|
3
4
|
protected readonly query: BaseQuery;
|
|
4
5
|
readonly measure: any;
|
|
@@ -6,6 +7,11 @@ export declare class BaseMeasure {
|
|
|
6
7
|
readonly expressionCubeName: any;
|
|
7
8
|
readonly expressionName: any;
|
|
8
9
|
readonly isMemberExpression: boolean;
|
|
10
|
+
protected readonly patchedMeasure: MeasureDefinition | null;
|
|
11
|
+
readonly joinHint: Array<string>;
|
|
12
|
+
protected preparePatchedMeasure(sourceMeasure: string, newMeasureType: string | null, addFilters: Array<{
|
|
13
|
+
sql: Function;
|
|
14
|
+
}>): MeasureDefinition;
|
|
9
15
|
constructor(query: BaseQuery, measure: any);
|
|
10
16
|
getMembers(): this[];
|
|
11
17
|
selectColumns(): string[];
|
|
@@ -15,7 +21,7 @@ export declare class BaseMeasure {
|
|
|
15
21
|
measureSql(): any;
|
|
16
22
|
convertTzForRawTimeDimensionIfNeeded(sql: any): any;
|
|
17
23
|
cube(): any;
|
|
18
|
-
measureDefinition():
|
|
24
|
+
measureDefinition(): MeasureDefinition;
|
|
19
25
|
definition(): any;
|
|
20
26
|
aliasName(): string;
|
|
21
27
|
unescapedAliasName(): string;
|
|
@@ -27,7 +33,7 @@ export declare class BaseMeasure {
|
|
|
27
33
|
dateJoinCondition(): any;
|
|
28
34
|
windowGranularity(): any;
|
|
29
35
|
minGranularity(granularityA: string | undefined, granularityB: string | undefined): any;
|
|
30
|
-
granularityFromInterval(interval: string): "
|
|
36
|
+
granularityFromInterval(interval: string): "hour" | "day" | "week" | "month" | "year" | undefined;
|
|
31
37
|
shouldUngroupForCumulative(): any;
|
|
32
38
|
sqlDefinition(): Function;
|
|
33
39
|
path(): any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseMeasure.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseMeasure.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseMeasure.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseMeasure.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,qBAAa,WAAW;IA0GpB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS;aACnB,OAAO,EAAE,GAAG;IA1G9B,SAAgB,UAAU,EAAE,GAAG,CAAC;IAEhC,SAAgB,kBAAkB,EAAE,GAAG,CAAC;IAExC,SAAgB,cAAc,EAAE,GAAG,CAAC;IAEpC,SAAgB,kBAAkB,EAAE,OAAO,CAAS;IAEpD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAEnE,SAAgB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;IAE7C,SAAS,CAAC,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,QAAQ,CAAA;KAAC,CAAC,GAAG,iBAAiB;gBA6FvH,KAAK,EAAE,SAAS,EACnB,OAAO,EAAE,GAAG;IAyBvB,UAAU;IAIV,aAAa;IAIb,cAAc;IAId,uBAAuB;IAIvB,oBAAoB;IASpB,UAAU;IAQV,oCAAoC,CAAC,GAAG,KAAA;IAUxC,IAAI;IAOJ,iBAAiB;IAOjB,UAAU,IAAI,GAAG;IAcjB,SAAS;IAIT,kBAAkB;IAOlB,YAAY;IAOZ,YAAY;IAOZ,UAAU;WAYH,YAAY,CAAC,UAAU,KAAA;IAI9B,uBAAuB;IAWvB,iBAAiB;IAqBjB,iBAAiB;IAWjB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS;IAIjF,uBAAuB,CAAC,QAAQ,EAAE,MAAM;IAkBxC,0BAA0B;IAI1B,aAAa;IAIb,IAAI;IAOJ,cAAc;CAMtB"}
|
|
@@ -9,6 +9,84 @@ class BaseMeasure {
|
|
|
9
9
|
expressionCubeName;
|
|
10
10
|
expressionName;
|
|
11
11
|
isMemberExpression = false;
|
|
12
|
+
patchedMeasure = null;
|
|
13
|
+
joinHint = [];
|
|
14
|
+
preparePatchedMeasure(sourceMeasure, newMeasureType, addFilters) {
|
|
15
|
+
const source = this.query.cubeEvaluator.measureByPath(sourceMeasure);
|
|
16
|
+
let resultMeasureType = source.type;
|
|
17
|
+
if (newMeasureType !== null) {
|
|
18
|
+
switch (source.type) {
|
|
19
|
+
case 'sum':
|
|
20
|
+
case 'avg':
|
|
21
|
+
case 'min':
|
|
22
|
+
case 'max':
|
|
23
|
+
switch (newMeasureType) {
|
|
24
|
+
case 'sum':
|
|
25
|
+
case 'avg':
|
|
26
|
+
case 'min':
|
|
27
|
+
case 'max':
|
|
28
|
+
case 'count_distinct':
|
|
29
|
+
case 'count_distinct_approx':
|
|
30
|
+
// Can change from avg/... to count_distinct
|
|
31
|
+
// Latter does not care what input value is
|
|
32
|
+
// ok, do nothing
|
|
33
|
+
break;
|
|
34
|
+
default:
|
|
35
|
+
throw new UserError_1.UserError(`Unsupported measure type replacement for ${sourceMeasure}: ${source.type} => ${newMeasureType}`);
|
|
36
|
+
}
|
|
37
|
+
break;
|
|
38
|
+
case 'count_distinct':
|
|
39
|
+
case 'count_distinct_approx':
|
|
40
|
+
switch (newMeasureType) {
|
|
41
|
+
case 'count_distinct':
|
|
42
|
+
case 'count_distinct_approx':
|
|
43
|
+
// ok, do nothing
|
|
44
|
+
break;
|
|
45
|
+
default:
|
|
46
|
+
// Can not change from count_distinct to avg/...
|
|
47
|
+
// Latter do care what input value is, and original measure can be defined on strings
|
|
48
|
+
throw new UserError_1.UserError(`Unsupported measure type replacement for ${sourceMeasure}: ${source.type} => ${newMeasureType}`);
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
default:
|
|
52
|
+
// Can not change from string, time, boolean, number
|
|
53
|
+
// Aggregation is already included in SQL, it's hard to patch that
|
|
54
|
+
// Can not change from count
|
|
55
|
+
// There's no SQL at all
|
|
56
|
+
throw new UserError_1.UserError(`Unsupported measure type replacement for ${sourceMeasure}: ${source.type} => ${newMeasureType}`);
|
|
57
|
+
}
|
|
58
|
+
resultMeasureType = newMeasureType;
|
|
59
|
+
}
|
|
60
|
+
const resultFilters = source.filters ?? [];
|
|
61
|
+
if (addFilters.length > 0) {
|
|
62
|
+
switch (resultMeasureType) {
|
|
63
|
+
case 'sum':
|
|
64
|
+
case 'avg':
|
|
65
|
+
case 'min':
|
|
66
|
+
case 'max':
|
|
67
|
+
case 'count':
|
|
68
|
+
case 'count_distinct':
|
|
69
|
+
case 'count_distinct_approx':
|
|
70
|
+
// ok, do nothing
|
|
71
|
+
break;
|
|
72
|
+
default:
|
|
73
|
+
// Can not add filters to string, time, boolean, number
|
|
74
|
+
// Aggregation is already included in SQL, it's hard to patch that
|
|
75
|
+
throw new UserError_1.UserError(`Unsupported additional filters for measure ${sourceMeasure} type ${source.type}`);
|
|
76
|
+
}
|
|
77
|
+
resultFilters.push(...addFilters);
|
|
78
|
+
}
|
|
79
|
+
const patchedFrom = this.query.cubeEvaluator.parsePath('measures', sourceMeasure);
|
|
80
|
+
return {
|
|
81
|
+
...source,
|
|
82
|
+
type: resultMeasureType,
|
|
83
|
+
filters: resultFilters,
|
|
84
|
+
patchedFrom: {
|
|
85
|
+
cubeName: patchedFrom[0],
|
|
86
|
+
name: patchedFrom[1],
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
12
90
|
constructor(query, measure) {
|
|
13
91
|
this.query = query;
|
|
14
92
|
this.measure = measure;
|
|
@@ -18,6 +96,16 @@ class BaseMeasure {
|
|
|
18
96
|
// In case of SQL push down expressionName doesn't contain cube name. It's just a column name.
|
|
19
97
|
this.expressionName = measure.expressionName || `${measure.cubeName}.${measure.name}`;
|
|
20
98
|
this.isMemberExpression = !!measure.definition;
|
|
99
|
+
if (measure.expression.type === 'PatchMeasure') {
|
|
100
|
+
this.patchedMeasure = this.preparePatchedMeasure(measure.expression.sourceMeasure, measure.expression.replaceAggregationType, measure.expression.addFilters);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// TODO move this `as` to static types
|
|
105
|
+
const measurePath = measure;
|
|
106
|
+
const { path, joinHint } = this.query.cubeEvaluator.joinHintFromPath(measurePath);
|
|
107
|
+
this.measure = path;
|
|
108
|
+
this.joinHint = joinHint;
|
|
21
109
|
}
|
|
22
110
|
}
|
|
23
111
|
getMembers() {
|
|
@@ -61,9 +149,15 @@ class BaseMeasure {
|
|
|
61
149
|
return this.query.cubeEvaluator.cubeFromPath(this.measure);
|
|
62
150
|
}
|
|
63
151
|
measureDefinition() {
|
|
152
|
+
if (this.patchedMeasure) {
|
|
153
|
+
return this.patchedMeasure;
|
|
154
|
+
}
|
|
64
155
|
return this.query.cubeEvaluator.measureByPath(this.measure);
|
|
65
156
|
}
|
|
66
157
|
definition() {
|
|
158
|
+
if (this.patchedMeasure) {
|
|
159
|
+
return this.patchedMeasure;
|
|
160
|
+
}
|
|
67
161
|
if (this.expression) {
|
|
68
162
|
return {
|
|
69
163
|
sql: this.expression,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseMeasure.js","sourceRoot":"","sources":["../../../src/adapter/BaseMeasure.ts"],"names":[],"mappings":";;;AAAA,qDAAkD;
|
|
1
|
+
{"version":3,"file":"BaseMeasure.js","sourceRoot":"","sources":["../../../src/adapter/BaseMeasure.ts"],"names":[],"mappings":"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"}
|
|
@@ -123,10 +123,14 @@ export class BaseQuery {
|
|
|
123
123
|
inputProps: any;
|
|
124
124
|
cache: any;
|
|
125
125
|
}): any;
|
|
126
|
-
get allCubeNames(): any;
|
|
127
|
-
collectedCubeNames: any;
|
|
128
|
-
|
|
129
|
-
|
|
126
|
+
get allCubeNames(): any[];
|
|
127
|
+
collectedCubeNames: any[] | undefined;
|
|
128
|
+
/**
|
|
129
|
+
*
|
|
130
|
+
* @returns {Array<Array<string>>}
|
|
131
|
+
*/
|
|
132
|
+
get allJoinHints(): string[][];
|
|
133
|
+
collectedJoinHints: string[][] | undefined;
|
|
130
134
|
get dataSource(): any;
|
|
131
135
|
cubeDataSource(cube: any): any;
|
|
132
136
|
get aliasNameToMember(): {
|
|
@@ -134,8 +138,8 @@ export class BaseQuery {
|
|
|
134
138
|
};
|
|
135
139
|
initUngrouped(): void;
|
|
136
140
|
ungrouped: any;
|
|
137
|
-
get subQueryDimensions(): any;
|
|
138
|
-
_subQueryDimensions: any;
|
|
141
|
+
get subQueryDimensions(): any[];
|
|
142
|
+
_subQueryDimensions: any[] | undefined;
|
|
139
143
|
get asSyntaxTable(): string;
|
|
140
144
|
get asSyntaxJoin(): string;
|
|
141
145
|
newMeasure(measurePath: any): BaseMeasure;
|
|
@@ -336,7 +340,12 @@ export class BaseQuery {
|
|
|
336
340
|
* @returns {string}
|
|
337
341
|
*/
|
|
338
342
|
aggregateSubQuery(keyCubeName: string, measures: Array<BaseMeasure>, filters: Array<BaseFilter>): string;
|
|
339
|
-
|
|
343
|
+
/**
|
|
344
|
+
* @param {Array<BaseMeasure>} measures
|
|
345
|
+
* @param {string} keyCubeName
|
|
346
|
+
* @returns {boolean}
|
|
347
|
+
*/
|
|
348
|
+
checkShouldBuildJoinForMeasureSelect(measures: Array<BaseMeasure>, keyCubeName: string): boolean;
|
|
340
349
|
aggregateSubQueryMeasureJoin(keyCubeName: any, measures: any, measuresJoin: any, primaryKeyDimensions: any, measureSubQueryDimensions: any): any;
|
|
341
350
|
groupedUngroupedSelect(select: any, ungrouped: any, granularityOverride: any): any;
|
|
342
351
|
ungroupedMeasureSelect(select: any): any;
|
|
@@ -345,10 +354,21 @@ export class BaseQuery {
|
|
|
345
354
|
keyDimensions(primaryKeyDimensions: any): (BaseDimension | BaseTimeDimension)[];
|
|
346
355
|
cubeSql(cube: any): any;
|
|
347
356
|
traverseSymbol(s: any): any;
|
|
348
|
-
collectCubeNames(excludeTimeDimensions: any): any;
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
357
|
+
collectCubeNames(excludeTimeDimensions: any): any[];
|
|
358
|
+
/**
|
|
359
|
+
*
|
|
360
|
+
* @param {boolean} [excludeTimeDimensions=false]
|
|
361
|
+
* @returns {Array<Array<string>>}
|
|
362
|
+
*/
|
|
363
|
+
collectJoinHints(excludeTimeDimensions?: boolean | undefined): Array<Array<string>>;
|
|
364
|
+
collectJoinHintsFromMembers(members: any): any[];
|
|
365
|
+
collectFromMembers(excludeTimeDimensions: any, fn: any, methodName: any): any[];
|
|
366
|
+
/**
|
|
367
|
+
*
|
|
368
|
+
* @param {boolean} excludeTimeDimensions
|
|
369
|
+
* @returns {Array<BaseMeasure | BaseDimension | BaseSegment>}
|
|
370
|
+
*/
|
|
371
|
+
allMembersConcat(excludeTimeDimensions: boolean): Array<BaseMeasure | BaseDimension | BaseSegment>;
|
|
352
372
|
collectFrom(membersToCollectFrom: any, fn: any, methodName: any, cache: any): any[];
|
|
353
373
|
collectSubQueryDimensionsFor(fn: any): never[];
|
|
354
374
|
rewriteInlineWhere(fn: any, inlineWhereConditions: any): any;
|
|
@@ -445,7 +465,7 @@ export class BaseQuery {
|
|
|
445
465
|
castToString(sql: any): string;
|
|
446
466
|
countDistinctApprox(sql: any): void;
|
|
447
467
|
primaryKeyCount(cubeName: any, distinct: any): any;
|
|
448
|
-
renderDimensionCase(symbol: any, cubeName: any):
|
|
468
|
+
renderDimensionCase(symbol: any, cubeName: any): any;
|
|
449
469
|
renderDimensionCaseLabel(label: any, cubeName: any): any;
|
|
450
470
|
caseWhenStatement(when: any, elseLabel: any): string;
|
|
451
471
|
applyMeasureFilters(evaluateSql: any, symbol: any, cubeName: any): any;
|
|
@@ -509,7 +529,7 @@ export class BaseQuery {
|
|
|
509
529
|
refreshKeysByCubes(cubes: any, transformFn: any): any;
|
|
510
530
|
aggSelectForDimension(cube: any, dimension: any, aggFunction: any): string | null;
|
|
511
531
|
cubeCardinalityQueries(): {
|
|
512
|
-
[index: string]:
|
|
532
|
+
[index: string]: [string, unknown[]];
|
|
513
533
|
};
|
|
514
534
|
renewalThreshold(refreshKeyAllSetManually: any): number;
|
|
515
535
|
nowTimestampSql(): string;
|
|
@@ -543,7 +563,7 @@ export class BaseQuery {
|
|
|
543
563
|
dayOffset: number;
|
|
544
564
|
};
|
|
545
565
|
everyRefreshKeySql(refreshKey: any, external?: boolean): any;
|
|
546
|
-
granularityFor(momentDate: any): "
|
|
566
|
+
granularityFor(momentDate: any): "hour" | "day" | "week" | "month" | "year" | "minute" | "second";
|
|
547
567
|
/**
|
|
548
568
|
* @protected
|
|
549
569
|
* @param {string} interval
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseQuery.js"],"names":[],"mappings":"AA2DA;;;;;;;;;;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":"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"}
|
|
@@ -280,19 +280,19 @@ class BaseQuery {
|
|
|
280
280
|
this.initUngrouped();
|
|
281
281
|
}
|
|
282
282
|
prebuildJoin() {
|
|
283
|
-
|
|
284
|
-
//
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
283
|
+
try {
|
|
284
|
+
// TODO allJoinHints should contain join hints form pre-agg
|
|
285
|
+
this.join = this.joinGraph.buildJoin(this.allJoinHints);
|
|
286
|
+
}
|
|
287
|
+
catch (e) {
|
|
288
|
+
if (this.useNativeSqlPlanner) {
|
|
289
|
+
// Tesseract doesn't require join to be prebuilt and there's a case where single join can't be built for multi-fact query
|
|
290
|
+
// But we need this join for a fallback when using pre-aggregations. So we’ll try to obtain the join but ignore any errors (which may occur if the query is a multi-fact one).
|
|
288
291
|
}
|
|
289
|
-
|
|
290
|
-
|
|
292
|
+
else {
|
|
293
|
+
throw e;
|
|
291
294
|
}
|
|
292
295
|
}
|
|
293
|
-
else {
|
|
294
|
-
this.join = this.joinGraph.buildJoin(this.allJoinHints);
|
|
295
|
-
}
|
|
296
296
|
}
|
|
297
297
|
cacheValue(key, fn, { contextPropNames, inputProps, cache } = {}) {
|
|
298
298
|
const currentContext = this.safeEvaluateSymbolContext();
|
|
@@ -333,6 +333,10 @@ class BaseQuery {
|
|
|
333
333
|
}
|
|
334
334
|
return this.collectedCubeNames;
|
|
335
335
|
}
|
|
336
|
+
/**
|
|
337
|
+
*
|
|
338
|
+
* @returns {Array<Array<string>>}
|
|
339
|
+
*/
|
|
336
340
|
get allJoinHints() {
|
|
337
341
|
if (!this.collectedJoinHints) {
|
|
338
342
|
this.collectedJoinHints = this.collectJoinHints();
|
|
@@ -578,7 +582,8 @@ class BaseQuery {
|
|
|
578
582
|
rowLimit: this.options.rowLimit ? this.options.rowLimit.toString() : null,
|
|
579
583
|
offset: this.options.offset ? this.options.offset.toString() : null,
|
|
580
584
|
baseTools: this,
|
|
581
|
-
ungrouped: this.options.ungrouped
|
|
585
|
+
ungrouped: this.options.ungrouped,
|
|
586
|
+
exportAnnotatedSql: exportAnnotatedSql === true
|
|
582
587
|
};
|
|
583
588
|
const buildResult = (0, native_1.buildSqlAndParams)(queryParams);
|
|
584
589
|
if (buildResult.error) {
|
|
@@ -899,7 +904,16 @@ class BaseQuery {
|
|
|
899
904
|
}
|
|
900
905
|
collectAllMultiStageMembers(allMemberChildren) {
|
|
901
906
|
const allMembers = ramda_1.default.uniq(ramda_1.default.flatten(Object.keys(allMemberChildren).map(k => [k].concat(allMemberChildren[k]))));
|
|
902
|
-
return ramda_1.default.fromPairs(allMembers.map(m =>
|
|
907
|
+
return ramda_1.default.fromPairs(allMembers.map(m => {
|
|
908
|
+
// When `m` is coming from `collectAllMemberChildren`, it can contain `granularities.customGranularityName` in path
|
|
909
|
+
// And it would mess up with join hints detection
|
|
910
|
+
const trimmedPath = this
|
|
911
|
+
.cubeEvaluator
|
|
912
|
+
.parsePathAnyType(m)
|
|
913
|
+
.slice(0, 2)
|
|
914
|
+
.join('.');
|
|
915
|
+
return [m, this.memberInstanceByPath(trimmedPath).isMultiStage()];
|
|
916
|
+
}));
|
|
903
917
|
}
|
|
904
918
|
memberInstanceByPath(m) {
|
|
905
919
|
let member;
|
|
@@ -1504,7 +1518,7 @@ class BaseQuery {
|
|
|
1504
1518
|
let keyCubeInlineLeftJoinConditions;
|
|
1505
1519
|
const measureSubQueryDimensions = this.collectFrom(measures, this.collectSubQueryDimensionsFor.bind(this), 'collectSubQueryDimensionsFor');
|
|
1506
1520
|
if (shouldBuildJoinForMeasureSelect) {
|
|
1507
|
-
const joinHints = this.
|
|
1521
|
+
const joinHints = this.collectJoinHintsFromMembers(measures);
|
|
1508
1522
|
const measuresJoin = this.joinGraph.buildJoin(joinHints);
|
|
1509
1523
|
if (measuresJoin.multiplicationFactor[keyCubeName]) {
|
|
1510
1524
|
throw new UserError_1.UserError(`'${measures.map(m => m.measure).join(', ')}' reference cubes that lead to row multiplication.`);
|
|
@@ -1544,6 +1558,11 @@ class BaseQuery {
|
|
|
1544
1558
|
return `SELECT ${columnsForSelect} FROM ${joinSql}` +
|
|
1545
1559
|
(!this.safeEvaluateSymbolContext().ungrouped && this.aggregateSubQueryGroupByClause() || '');
|
|
1546
1560
|
}
|
|
1561
|
+
/**
|
|
1562
|
+
* @param {Array<BaseMeasure>} measures
|
|
1563
|
+
* @param {string} keyCubeName
|
|
1564
|
+
* @returns {boolean}
|
|
1565
|
+
*/
|
|
1547
1566
|
checkShouldBuildJoinForMeasureSelect(measures, keyCubeName) {
|
|
1548
1567
|
// When member expression references view, it would have to collect join hints from view
|
|
1549
1568
|
// Consider join A->B, as many-to-one, so B is multiplied and A is not, and member expression like SUM(AB_view.dimB)
|
|
@@ -1558,7 +1577,11 @@ class BaseQuery {
|
|
|
1558
1577
|
.map(member => this.memberInstanceByPath(member))
|
|
1559
1578
|
.filter(member => member.definition().ownedByCube);
|
|
1560
1579
|
const cubes = this.collectFrom(nonViewMembers, this.collectCubeNamesFor.bind(this), 'collectCubeNamesFor');
|
|
1561
|
-
|
|
1580
|
+
// Not using `collectJoinHintsFromMembers([measure])` because it would collect too many join hints from view
|
|
1581
|
+
const joinHints = [
|
|
1582
|
+
measure.joinHint,
|
|
1583
|
+
...this.collectJoinHintsFromMembers(nonViewMembers),
|
|
1584
|
+
];
|
|
1562
1585
|
if (ramda_1.default.any(cubeName => keyCubeName !== cubeName, cubes)) {
|
|
1563
1586
|
const measuresJoin = this.joinGraph.buildJoin(joinHints);
|
|
1564
1587
|
if (measuresJoin.multiplicationFactor[keyCubeName]) {
|
|
@@ -1624,15 +1647,41 @@ class BaseQuery {
|
|
|
1624
1647
|
return `(${evaluatedSql})`;
|
|
1625
1648
|
}
|
|
1626
1649
|
traverseSymbol(s) {
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
this.
|
|
1650
|
+
// TODO why not just evaluateSymbolSql for every branch?
|
|
1651
|
+
if (s.path()) {
|
|
1652
|
+
return [s.cube().name].concat(this.evaluateSymbolSql(s.path()[0], s.path()[1], s.definition()));
|
|
1653
|
+
}
|
|
1654
|
+
else if (s.patchedMeasure?.patchedFrom) {
|
|
1655
|
+
return [s.patchedMeasure.patchedFrom.cubeName].concat(this.evaluateSymbolSql(s.patchedMeasure.patchedFrom.cubeName, s.patchedMeasure.patchedFrom.name, s.definition()));
|
|
1656
|
+
}
|
|
1657
|
+
else {
|
|
1658
|
+
return this.evaluateSql(s.cube().name, s.definition().sql);
|
|
1659
|
+
}
|
|
1630
1660
|
}
|
|
1631
1661
|
collectCubeNames(excludeTimeDimensions) {
|
|
1632
1662
|
return this.collectFromMembers(excludeTimeDimensions, this.collectCubeNamesFor.bind(this), 'collectCubeNamesFor');
|
|
1633
1663
|
}
|
|
1664
|
+
/**
|
|
1665
|
+
*
|
|
1666
|
+
* @param {boolean} [excludeTimeDimensions=false]
|
|
1667
|
+
* @returns {Array<Array<string>>}
|
|
1668
|
+
*/
|
|
1634
1669
|
collectJoinHints(excludeTimeDimensions = false) {
|
|
1635
|
-
|
|
1670
|
+
const membersToCollectFrom = this.allMembersConcat(excludeTimeDimensions)
|
|
1671
|
+
.concat(this.join ? this.join.joins.map(j => ({
|
|
1672
|
+
getMembers: () => [{
|
|
1673
|
+
path: () => null,
|
|
1674
|
+
cube: () => this.cubeEvaluator.cubeFromPath(j.originalFrom),
|
|
1675
|
+
definition: () => j.join,
|
|
1676
|
+
}]
|
|
1677
|
+
})) : []);
|
|
1678
|
+
return this.collectJoinHintsFromMembers(membersToCollectFrom);
|
|
1679
|
+
}
|
|
1680
|
+
collectJoinHintsFromMembers(members) {
|
|
1681
|
+
return [
|
|
1682
|
+
...members.map(m => m.joinHint).filter(h => h?.length > 0),
|
|
1683
|
+
...this.collectFrom(members, this.collectJoinHintsFor.bind(this), 'collectJoinHintsFromMembers'),
|
|
1684
|
+
];
|
|
1636
1685
|
}
|
|
1637
1686
|
collectFromMembers(excludeTimeDimensions, fn, methodName) {
|
|
1638
1687
|
const membersToCollectFrom = this.allMembersConcat(excludeTimeDimensions)
|
|
@@ -1645,6 +1694,11 @@ class BaseQuery {
|
|
|
1645
1694
|
})) : []);
|
|
1646
1695
|
return this.collectFrom(membersToCollectFrom, fn, methodName);
|
|
1647
1696
|
}
|
|
1697
|
+
/**
|
|
1698
|
+
*
|
|
1699
|
+
* @param {boolean} excludeTimeDimensions
|
|
1700
|
+
* @returns {Array<BaseMeasure | BaseDimension | BaseSegment>}
|
|
1701
|
+
*/
|
|
1648
1702
|
allMembersConcat(excludeTimeDimensions) {
|
|
1649
1703
|
return this.measures
|
|
1650
1704
|
.concat(this.dimensions)
|
|
@@ -1888,6 +1942,9 @@ class BaseQuery {
|
|
|
1888
1942
|
if (!memberExpressionType) {
|
|
1889
1943
|
this.pushMemberNameForCollectionIfNecessary(cubeName, name);
|
|
1890
1944
|
}
|
|
1945
|
+
if (symbol.patchedFrom) {
|
|
1946
|
+
this.pushMemberNameForCollectionIfNecessary(symbol.patchedFrom.cubeName, symbol.patchedFrom.name);
|
|
1947
|
+
}
|
|
1891
1948
|
const memberPathArray = [cubeName, name];
|
|
1892
1949
|
// Member path needs to be expanded to granularity if subPropertyName is provided.
|
|
1893
1950
|
// Without this: infinite recursion with maximum call stack size exceeded.
|