@cubejs-backend/schema-compiler 0.29.35 → 0.29.48
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/CHANGELOG.md +34 -0
- package/dist/src/adapter/AWSElasticSearchQuery.d.ts.map +1 -1
- package/dist/src/adapter/BaseGroupFilter.d.ts +2 -0
- package/dist/src/adapter/BaseGroupFilter.d.ts.map +1 -1
- package/dist/src/adapter/BaseGroupFilter.js +6 -0
- package/dist/src/adapter/BaseGroupFilter.js.map +1 -1
- package/dist/src/adapter/BaseQuery.d.ts +32 -8
- package/dist/src/adapter/BaseQuery.d.ts.map +1 -1
- package/dist/src/adapter/BaseQuery.js +105 -45
- package/dist/src/adapter/BaseQuery.js.map +1 -1
- package/dist/src/adapter/BigqueryQuery.d.ts.map +1 -1
- package/dist/src/adapter/BigqueryQuery.js +3 -0
- package/dist/src/adapter/BigqueryQuery.js.map +1 -1
- package/dist/src/adapter/ClickHouseQuery.d.ts.map +1 -1
- package/dist/src/adapter/ClickHouseQuery.js +7 -1
- package/dist/src/adapter/ClickHouseQuery.js.map +1 -1
- package/dist/src/adapter/ElasticSearchQuery.d.ts.map +1 -1
- package/dist/src/adapter/HiveQuery.d.ts.map +1 -1
- package/dist/src/adapter/MongoBiQuery.d.ts.map +1 -1
- package/dist/src/adapter/MssqlQuery.d.ts.map +1 -1
- package/dist/src/adapter/MysqlQuery.d.ts.map +1 -1
- package/dist/src/adapter/OracleQuery.d.ts.map +1 -1
- package/dist/src/adapter/PostgresQuery.d.ts.map +1 -1
- package/dist/src/adapter/PreAggregations.d.ts.map +1 -1
- package/dist/src/adapter/PreAggregations.js +13 -6
- package/dist/src/adapter/PreAggregations.js.map +1 -1
- package/dist/src/adapter/PrestodbQuery.d.ts.map +1 -1
- package/dist/src/adapter/RedshiftQuery.d.ts.map +1 -1
- package/dist/src/adapter/SnowflakeQuery.d.ts.map +1 -1
- package/dist/src/adapter/SqliteQuery.d.ts.map +1 -1
- package/dist/src/adapter/VerticaQuery.d.ts.map +1 -1
- package/dist/src/compiler/CubeEvaluator.d.ts.map +1 -1
- package/dist/src/compiler/CubeEvaluator.js +2 -5
- package/dist/src/compiler/CubeEvaluator.js.map +1 -1
- package/dist/src/compiler/JoinGraph.js +2 -2
- package/dist/src/compiler/JoinGraph.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,40 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.29.48](https://github.com/cube-js/cube.js/compare/v0.29.47...v0.29.48) (2022-04-14)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **query-language:** "total" flag support ([#4134](https://github.com/cube-js/cube.js/issues/4134)) ([51aef5e](https://github.com/cube-js/cube.js/commit/51aef5ede6e9b0c0e0e8749119e98102f168b8ca))
|
|
12
|
+
* Support Compound Primary Keys ([#4370](https://github.com/cube-js/cube.js/issues/4370)) Thanks [@rccoe](https://github.com/rccoe)! ([0e3983c](https://github.com/cube-js/cube.js/commit/0e3983ccb30a3f6815ba5ee28aa09807e55fd2a3)), closes [#4364](https://github.com/cube-js/cube.js/issues/4364)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## [0.29.42](https://github.com/cube-js/cube.js/compare/v0.29.41...v0.29.42) (2022-04-04)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* **playground:** rollup designer count distinct warning ([#4309](https://github.com/cube-js/cube.js/issues/4309)) ([add2dd3](https://github.com/cube-js/cube.js/commit/add2dd3106f7fd9deb3ea88fa74467ccd1b9244f))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
## [0.29.37](https://github.com/cube-js/cube.js/compare/v0.29.36...v0.29.37) (2022-03-29)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
* **@cubejs-backend/schema-compiler:** Allow filtering with or/and in FILTER_PARAMS ([#4253](https://github.com/cube-js/cube.js/issues/4253)) Thanks [@tchell](https://github.com/tchell)! ([cb1446c](https://github.com/cube-js/cube.js/commit/cb1446c4e788bcb43bdc90fc0a48ffc49fd0d891))
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
6
40
|
## [0.29.35](https://github.com/cube-js/cube.js/compare/v0.29.34...v0.29.35) (2022-03-24)
|
|
7
41
|
|
|
8
42
|
**Note:** Version bump only for package @cubejs-backend/schema-compiler
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AWSElasticSearchQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/AWSElasticSearchQuery.js"],"names":[],"mappings":"AAqBA;
|
|
1
|
+
{"version":3,"file":"AWSElasticSearchQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/AWSElasticSearchQuery.js"],"names":[],"mappings":"AAqBA;IA6D6D,0CAmBgC;IA1B3F,4BAoBC;CAKF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseGroupFilter.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseGroupFilter.js"],"names":[],"mappings":"AAEA;IACE,qCAKC;IAJC,YAA2B;IAC3B,cAA+B;IAC/B,aAA6B;IAC7B,eAAiC;IAGnC,qBAaC;IAED,kBAOC;CACF"}
|
|
1
|
+
{"version":3,"file":"BaseGroupFilter.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseGroupFilter.js"],"names":[],"mappings":"AAEA;IACE,qCAKC;IAJC,YAA2B;IAC3B,cAA+B;IAC/B,aAA6B;IAC7B,eAAiC;IAGnC,kCAEC;IAED,qBAaC;IAED,oBAEC;IAED,kBAOC;CACF"}
|
|
@@ -12,6 +12,9 @@ class BaseGroupFilter {
|
|
|
12
12
|
this.measure = filter.measure;
|
|
13
13
|
this.dimension = filter.dimension;
|
|
14
14
|
}
|
|
15
|
+
conditionSql(column) {
|
|
16
|
+
return `(\n${this.values.map(f => f.conditionSql(column)).join(` ${this.operator.toUpperCase()} `)}\n)`;
|
|
17
|
+
}
|
|
15
18
|
filterToWhere() {
|
|
16
19
|
const r = this.values.map(f => {
|
|
17
20
|
const sql = f.filterToWhere();
|
|
@@ -25,6 +28,9 @@ class BaseGroupFilter {
|
|
|
25
28
|
}
|
|
26
29
|
return r;
|
|
27
30
|
}
|
|
31
|
+
filterParams() {
|
|
32
|
+
return this.values.map(f => f.filterParams());
|
|
33
|
+
}
|
|
28
34
|
getMembers() {
|
|
29
35
|
return this.values.map(f => {
|
|
30
36
|
if (f.getMembers) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseGroupFilter.js","sourceRoot":"","sources":["../../../src/adapter/BaseGroupFilter.js"],"names":[],"mappings":";;;;;;AAAA,kDAAsB;AAEtB,MAAa,eAAe;IAC1B,YAAY,KAAK,EAAE,MAAM;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,aAAa;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,EAAE;gBACR,OAAO,IAAI,CAAC;aACb;YACD,OAAO,IAAI,GAAG,GAAG,CAAC;QACpB,CAAC,CAAC,CAAC,MAAM,CAAC,eAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAEjD,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;YACb,OAAO,IAAI,CAAC;SACb;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACzB,IAAI,CAAC,CAAC,UAAU,EAAE;gBAChB,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;aACvB;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"BaseGroupFilter.js","sourceRoot":"","sources":["../../../src/adapter/BaseGroupFilter.js"],"names":[],"mappings":";;;;;;AAAA,kDAAsB;AAEtB,MAAa,eAAe;IAC1B,YAAY,KAAK,EAAE,MAAM;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,MAAM;QACjB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC;IAC1G,CAAC;IAED,aAAa;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,EAAE;gBACR,OAAO,IAAI,CAAC;aACb;YACD,OAAO,IAAI,GAAG,GAAG,CAAC;QACpB,CAAC,CAAC,CAAC,MAAM,CAAC,eAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAEjD,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;YACb,OAAO,IAAI,CAAC;SACb;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACzB,IAAI,CAAC,CAAC,UAAU,EAAE;gBAChB,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;aACvB;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAvCD,0CAuCC"}
|
|
@@ -79,11 +79,29 @@ export class BaseQuery {
|
|
|
79
79
|
newTimeDimension(timeDimension: any): BaseTimeDimension;
|
|
80
80
|
newParamAllocator(): ParamAllocator;
|
|
81
81
|
newPreAggregations(): PreAggregations;
|
|
82
|
+
/**
|
|
83
|
+
* Wrap cpecified column with the double quote.
|
|
84
|
+
*/
|
|
82
85
|
escapeColumnName(name: any): string;
|
|
83
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Returns SQL query string.
|
|
88
|
+
* @returns {string}
|
|
89
|
+
*/
|
|
90
|
+
buildParamAnnotatedSql(): string;
|
|
91
|
+
/**
|
|
92
|
+
* Generate SQL query to calculate total number of rows of the
|
|
93
|
+
* specified SQL query.
|
|
94
|
+
* @param {string} sql
|
|
95
|
+
* @returns {string}
|
|
96
|
+
*/
|
|
97
|
+
countAllQuery(sql: string): string;
|
|
84
98
|
regularAndTimeSeriesRollupQuery(regularMeasures: any, multipliedMeasures: any, cumulativeMeasures: any, preAggregationForQuery: any): string;
|
|
85
99
|
externalPreAggregationQuery(): boolean;
|
|
86
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Returns an array of SQL query strings for the query.
|
|
102
|
+
* @returns {Array<string>}
|
|
103
|
+
*/
|
|
104
|
+
buildSqlAndParams(): Array<string>;
|
|
87
105
|
externalQuery(): any;
|
|
88
106
|
runningTotalDateJoinCondition(): any;
|
|
89
107
|
rollingWindowDateJoinCondition(trailingInterval: any, leadingInterval: any, offset: any): any;
|
|
@@ -94,6 +112,10 @@ export class BaseQuery {
|
|
|
94
112
|
cumulativeMeasures(): any;
|
|
95
113
|
isRolling(): boolean;
|
|
96
114
|
simpleQuery(): string;
|
|
115
|
+
/**
|
|
116
|
+
* Returns SQL query string.
|
|
117
|
+
* @returns {string}
|
|
118
|
+
*/
|
|
97
119
|
fullKeyQueryAggregate(): string;
|
|
98
120
|
joinFullKeyQueryAggregate(multipliedMeasures: any, regularMeasures: any, cumulativeMeasures: any, toJoin: any): string;
|
|
99
121
|
fullKeyQueryAggregateMeasures(): {
|
|
@@ -139,7 +161,7 @@ export class BaseQuery {
|
|
|
139
161
|
subQueryJoin(dimension: any): {
|
|
140
162
|
sql: string;
|
|
141
163
|
alias: string;
|
|
142
|
-
on:
|
|
164
|
+
on: any;
|
|
143
165
|
};
|
|
144
166
|
get filtersWithoutSubQueries(): any;
|
|
145
167
|
filtersWithoutSubQueriesValue: any;
|
|
@@ -152,12 +174,12 @@ export class BaseQuery {
|
|
|
152
174
|
regularMeasuresSubQuery(measures: any, filters: any): string;
|
|
153
175
|
aggregateSubQuery(keyCubeName: any, measures: any, filters: any): string;
|
|
154
176
|
checkShouldBuildJoinForMeasureSelect(measures: any, keyCubeName: any): any;
|
|
155
|
-
aggregateSubQueryMeasureJoin(keyCubeName: any, measures: any, measuresJoin: any,
|
|
177
|
+
aggregateSubQueryMeasureJoin(keyCubeName: any, measures: any, measuresJoin: any, primaryKeyDimensions: any, measureSubQueryDimensions: any): any;
|
|
156
178
|
groupedUngroupedSelect(select: any, ungrouped: any, granularityOverride: any): any;
|
|
157
179
|
ungroupedMeasureSelect(select: any): any;
|
|
158
|
-
keysQuery(
|
|
159
|
-
keysSelect(
|
|
160
|
-
keyDimensions(
|
|
180
|
+
keysQuery(primaryKeyDimensions: any, filters: any): string;
|
|
181
|
+
keysSelect(primaryKeyDimensions: any): string;
|
|
182
|
+
keyDimensions(primaryKeyDimensions: any): any[];
|
|
161
183
|
cubeSql(cube: any): any;
|
|
162
184
|
traverseSymbol(s: any): any;
|
|
163
185
|
collectCubeNames(excludeTimeDimensions: any): any;
|
|
@@ -187,7 +209,8 @@ export class BaseQuery {
|
|
|
187
209
|
evaluateSymbolSql(cubeName: any, name: any, symbol: any): any;
|
|
188
210
|
autoPrefixAndEvaluateSql(cubeName: any, sql: any): any;
|
|
189
211
|
concatStringsSql(strings: any): any;
|
|
190
|
-
|
|
212
|
+
primaryKeyNames(cubeName: any): any;
|
|
213
|
+
primaryKeyName(cubeName: any, primaryKey: any): string;
|
|
191
214
|
evaluateSql(cubeName: any, sql: any, options: any): any;
|
|
192
215
|
withCubeAliasPrefix(cubeAliasPrefix: any, fn: any): any;
|
|
193
216
|
/**
|
|
@@ -211,6 +234,7 @@ export class BaseQuery {
|
|
|
211
234
|
hllCardinality(sql: any): void;
|
|
212
235
|
hllMergeOnly(sql: any): void;
|
|
213
236
|
hllCardinalityMerge(sql: any): void;
|
|
237
|
+
castToString(sql: any): string;
|
|
214
238
|
countDistinctApprox(sql: any): void;
|
|
215
239
|
primaryKeyCount(cubeName: any, distinct: any): any;
|
|
216
240
|
renderDimensionCase(symbol: any, cubeName: any): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseQuery.js"],"names":[],"mappings":"AA+CA;;;;;;;;;;GAUG;AAEH;IAgBE;;;;OAIG;IACH,uBAHW,SAAS,MAAE,gBAarB;IATC,eAA0B;IAC1B,mBAA4C;IAC5C,eAAoC;IACpC,aAA4B;
|
|
1
|
+
{"version":3,"file":"BaseQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseQuery.js"],"names":[],"mappings":"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"}
|
|
@@ -275,7 +275,7 @@ class BaseQuery {
|
|
|
275
275
|
if (this.ungrouped) {
|
|
276
276
|
if (!this.options.allowUngroupedWithoutPrimaryKey) {
|
|
277
277
|
const cubes = ramda_1.default.uniq([this.join.root].concat(this.join.joins.map(j => j.originalTo)));
|
|
278
|
-
const primaryKeyNames = cubes.
|
|
278
|
+
const primaryKeyNames = cubes.flatMap(c => this.primaryKeyNames(c));
|
|
279
279
|
const missingPrimaryKeys = primaryKeyNames.filter(key => !this.dimensions.find(d => d.dimension === key));
|
|
280
280
|
if (missingPrimaryKeys.length) {
|
|
281
281
|
throw new UserError_1.UserError(`Ungrouped query requires primary keys to be present in dimensions: ${missingPrimaryKeys.map(k => `'${k}'`).join(', ')}. Pass allowUngroupedWithoutPrimaryKey option to disable this check.`);
|
|
@@ -363,27 +363,55 @@ class BaseQuery {
|
|
|
363
363
|
newPreAggregations() {
|
|
364
364
|
return new PreAggregations_1.PreAggregations(this, this.options.historyQueries || [], this.options.cubeLatticeCache);
|
|
365
365
|
}
|
|
366
|
+
/**
|
|
367
|
+
* Wrap cpecified column with the double quote.
|
|
368
|
+
*/
|
|
366
369
|
escapeColumnName(name) {
|
|
367
370
|
return `"${name}"`;
|
|
368
371
|
}
|
|
372
|
+
/**
|
|
373
|
+
* Returns SQL query string.
|
|
374
|
+
* @returns {string}
|
|
375
|
+
*/
|
|
369
376
|
buildParamAnnotatedSql() {
|
|
377
|
+
let sql;
|
|
378
|
+
let preAggForQuery;
|
|
370
379
|
if (!this.options.preAggregationQuery && !this.ungrouped) {
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
380
|
+
preAggForQuery =
|
|
381
|
+
this.preAggregations.findPreAggregationForQuery();
|
|
382
|
+
}
|
|
383
|
+
if (preAggForQuery) {
|
|
384
|
+
const { multipliedMeasures, regularMeasures, cumulativeMeasures, } = this.fullKeyQueryAggregateMeasures();
|
|
385
|
+
if (cumulativeMeasures.length === 0) {
|
|
386
|
+
sql = this.preAggregations.rollupPreAggregation(preAggForQuery, this.measures, true);
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
sql = this.regularAndTimeSeriesRollupQuery(regularMeasures, multipliedMeasures, cumulativeMeasures, preAggForQuery);
|
|
378
390
|
}
|
|
379
391
|
}
|
|
380
|
-
|
|
392
|
+
else {
|
|
393
|
+
sql = this.fullKeyQueryAggregate();
|
|
394
|
+
}
|
|
395
|
+
return this.options.totalQuery
|
|
396
|
+
? this.countAllQuery(sql)
|
|
397
|
+
: sql;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Generate SQL query to calculate total number of rows of the
|
|
401
|
+
* specified SQL query.
|
|
402
|
+
* @param {string} sql
|
|
403
|
+
* @returns {string}
|
|
404
|
+
*/
|
|
405
|
+
countAllQuery(sql) {
|
|
406
|
+
return `select count(*) ${this.escapeColumnName(shared_1.QueryAlias.TOTAL_COUNT)} from (\n${sql}\n) ${this.escapeColumnName(shared_1.QueryAlias.ORIGINAL_QUERY)}`;
|
|
381
407
|
}
|
|
382
408
|
regularAndTimeSeriesRollupQuery(regularMeasures, multipliedMeasures, cumulativeMeasures, preAggregationForQuery) {
|
|
383
409
|
const regularAndMultiplied = regularMeasures.concat(multipliedMeasures);
|
|
384
410
|
const toJoin = (regularAndMultiplied.length ? [
|
|
385
411
|
this.withCubeAliasPrefix('main', () => this.preAggregations.rollupPreAggregation(preAggregationForQuery, regularAndMultiplied, false)),
|
|
386
|
-
] : []).concat(ramda_1.default.map(
|
|
412
|
+
] : []).concat(ramda_1.default.map(
|
|
413
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
414
|
+
([multiplied, measure]) => this.withCubeAliasPrefix(`${this.aliasName(measure.measure.replace('.', '_'))}_cumulative`, () => this.overTimeSeriesQuery((measures, filters) => this.preAggregations.rollupPreAggregation(preAggregationForQuery, measures, false, filters), measure, true)))(cumulativeMeasures));
|
|
387
415
|
return this.joinFullKeyQueryAggregate(multipliedMeasures, regularMeasures, cumulativeMeasures, toJoin);
|
|
388
416
|
}
|
|
389
417
|
externalPreAggregationQuery() {
|
|
@@ -397,6 +425,10 @@ class BaseQuery {
|
|
|
397
425
|
}
|
|
398
426
|
return false;
|
|
399
427
|
}
|
|
428
|
+
/**
|
|
429
|
+
* Returns an array of SQL query strings for the query.
|
|
430
|
+
* @returns {Array<string>}
|
|
431
|
+
*/
|
|
400
432
|
buildSqlAndParams() {
|
|
401
433
|
if (!this.options.preAggregationQuery && this.externalQueryClass) {
|
|
402
434
|
if (this.externalPreAggregationQuery()) { // TODO performance
|
|
@@ -415,6 +447,7 @@ class BaseQuery {
|
|
|
415
447
|
runningTotalDateJoinCondition() {
|
|
416
448
|
return this.timeDimensions.map(d => [
|
|
417
449
|
d,
|
|
450
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
418
451
|
(dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo) => `${dateField} >= ${dimensionDateFrom} AND ${dateField} <= ${dateTo}`
|
|
419
452
|
]);
|
|
420
453
|
}
|
|
@@ -466,15 +499,23 @@ class BaseQuery {
|
|
|
466
499
|
this.orderBy() +
|
|
467
500
|
this.groupByDimensionLimit();
|
|
468
501
|
}
|
|
502
|
+
/**
|
|
503
|
+
* Returns SQL query string.
|
|
504
|
+
* @returns {string}
|
|
505
|
+
*/
|
|
469
506
|
fullKeyQueryAggregate() {
|
|
470
|
-
const { multipliedMeasures, regularMeasures, cumulativeMeasures } = this.fullKeyQueryAggregateMeasures();
|
|
507
|
+
const { multipliedMeasures, regularMeasures, cumulativeMeasures, } = this.fullKeyQueryAggregateMeasures();
|
|
471
508
|
if (!multipliedMeasures.length && !cumulativeMeasures.length) {
|
|
472
509
|
return this.simpleQuery();
|
|
473
510
|
}
|
|
474
511
|
let toJoin;
|
|
475
512
|
if (this.options.preAggregationQuery) {
|
|
476
|
-
const allRegular = regularMeasures.concat(cumulativeMeasures
|
|
477
|
-
|
|
513
|
+
const allRegular = regularMeasures.concat(cumulativeMeasures
|
|
514
|
+
.map(([multiplied, measure]) => (multiplied ? null : measure))
|
|
515
|
+
.filter(m => !!m));
|
|
516
|
+
const allMultiplied = multipliedMeasures.concat(cumulativeMeasures
|
|
517
|
+
.map(([multiplied, measure]) => (multiplied ? measure : null))
|
|
518
|
+
.filter(m => !!m));
|
|
478
519
|
toJoin = (allRegular.length ? [
|
|
479
520
|
this.withCubeAliasPrefix('main', () => this.regularMeasuresSubQuery(allRegular))
|
|
480
521
|
] : [])
|
|
@@ -483,15 +524,16 @@ class BaseQuery {
|
|
|
483
524
|
else {
|
|
484
525
|
toJoin =
|
|
485
526
|
(regularMeasures.length ? [
|
|
486
|
-
this.withCubeAliasPrefix('main', () => this.regularMeasuresSubQuery(regularMeasures))
|
|
527
|
+
this.withCubeAliasPrefix('main', () => this.regularMeasuresSubQuery(regularMeasures)),
|
|
487
528
|
] : [])
|
|
488
529
|
.concat(ramda_1.default.pipe(ramda_1.default.groupBy(m => m.cube().name), ramda_1.default.toPairs, ramda_1.default.map(([keyCubeName, measures]) => this
|
|
489
|
-
.withCubeAliasPrefix(`${this.aliasName(keyCubeName)}_key`, () => this.aggregateSubQuery(keyCubeName, measures))))(multipliedMeasures)).concat(ramda_1.default.map(([multiplied, measure]) => this.withCubeAliasPrefix(`${this.aliasName(measure.measure.replace('.', '_'))}_cumulative`, () => this.overTimeSeriesQuery(multiplied
|
|
490
|
-
(measures, filters) => this.aggregateSubQuery(measures[0].cube().name, measures, filters)
|
|
491
|
-
this.regularMeasuresSubQuery.bind(this), measure, false)))(cumulativeMeasures));
|
|
530
|
+
.withCubeAliasPrefix(`${this.aliasName(keyCubeName)}_key`, () => this.aggregateSubQuery(keyCubeName, measures))))(multipliedMeasures)).concat(ramda_1.default.map(([multiplied, measure]) => this.withCubeAliasPrefix(`${this.aliasName(measure.measure.replace('.', '_'))}_cumulative`, () => this.overTimeSeriesQuery(multiplied
|
|
531
|
+
? (measures, filters) => this.aggregateSubQuery(measures[0].cube().name, measures, filters)
|
|
532
|
+
: this.regularMeasuresSubQuery.bind(this), measure, false)))(cumulativeMeasures));
|
|
492
533
|
}
|
|
493
|
-
// Move regular measures to multiplied ones if there're same
|
|
494
|
-
// Most of the times it'll be much faster to
|
|
534
|
+
// Move regular measures to multiplied ones if there're same
|
|
535
|
+
// cubes to calculate. Most of the times it'll be much faster to
|
|
536
|
+
// calculate as there will be only single scan per cube.
|
|
495
537
|
if (regularMeasures.length &&
|
|
496
538
|
multipliedMeasures.length &&
|
|
497
539
|
!cumulativeMeasures.length) {
|
|
@@ -716,7 +758,7 @@ class BaseQuery {
|
|
|
716
758
|
}
|
|
717
759
|
subQueryJoin(dimension) {
|
|
718
760
|
const { prefix, subQuery, cubeName } = this.subQueryDescription(dimension);
|
|
719
|
-
const
|
|
761
|
+
const primaryKeys = this.cubeEvaluator.primaryKeys[cubeName];
|
|
720
762
|
const subQueryAlias = this.escapeColumnName(this.aliasName(prefix));
|
|
721
763
|
const { collectOriginalSqlPreAggregations } = this.safeEvaluateSymbolContext();
|
|
722
764
|
const sql = subQuery.evaluateSymbolSqlWithContext(() => subQuery.buildParamAnnotatedSql(), {
|
|
@@ -725,7 +767,7 @@ class BaseQuery {
|
|
|
725
767
|
return {
|
|
726
768
|
sql: `(${sql})`,
|
|
727
769
|
alias: subQueryAlias,
|
|
728
|
-
on: `${subQueryAlias}.${
|
|
770
|
+
on: primaryKeys.map((pk) => `${subQueryAlias}.${this.newDimension(this.primaryKeyName(cubeName, pk)).aliasName()} = ${this.primaryKeySql(pk, cubeName)}`)
|
|
729
771
|
};
|
|
730
772
|
}
|
|
731
773
|
get filtersWithoutSubQueries() {
|
|
@@ -761,7 +803,7 @@ class BaseQuery {
|
|
|
761
803
|
cubeName,
|
|
762
804
|
name
|
|
763
805
|
}],
|
|
764
|
-
dimensions:
|
|
806
|
+
dimensions: this.primaryKeyNames(cubeName),
|
|
765
807
|
filters,
|
|
766
808
|
segments,
|
|
767
809
|
timeDimensions,
|
|
@@ -781,7 +823,7 @@ class BaseQuery {
|
|
|
781
823
|
}
|
|
782
824
|
aggregateSubQuery(keyCubeName, measures, filters) {
|
|
783
825
|
filters = filters || this.allFilters;
|
|
784
|
-
const
|
|
826
|
+
const primaryKeyDimensions = this.primaryKeyNames(keyCubeName).map((k) => this.newDimension(k));
|
|
785
827
|
const shouldBuildJoinForMeasureSelect = this.checkShouldBuildJoinForMeasureSelect(measures, keyCubeName);
|
|
786
828
|
let keyCubeSql;
|
|
787
829
|
let keyCubeAlias;
|
|
@@ -793,7 +835,7 @@ class BaseQuery {
|
|
|
793
835
|
if (measuresJoin.multiplicationFactor[keyCubeName]) {
|
|
794
836
|
throw new UserError_1.UserError(`'${measures.map(m => m.measure).join(', ')}' reference cubes that lead to row multiplication.`);
|
|
795
837
|
}
|
|
796
|
-
keyCubeSql = `(${this.aggregateSubQueryMeasureJoin(keyCubeName, measures, measuresJoin,
|
|
838
|
+
keyCubeSql = `(${this.aggregateSubQueryMeasureJoin(keyCubeName, measures, measuresJoin, primaryKeyDimensions, measureSubQueryDimensions)})`;
|
|
797
839
|
keyCubeAlias = this.cubeAlias(keyCubeName);
|
|
798
840
|
}
|
|
799
841
|
else {
|
|
@@ -804,16 +846,16 @@ class BaseQuery {
|
|
|
804
846
|
ungroupedAliases: ramda_1.default.fromPairs(measures.map(m => [m.measure, m.aliasName()]))
|
|
805
847
|
}) : measureSelectFn();
|
|
806
848
|
const columnsForSelect = this.dimensionColumns(this.escapeColumnName('keys')).concat(selectedMeasures).filter(s => !!s).join(', ');
|
|
807
|
-
const
|
|
808
|
-
`${this.cubeAlias(keyCubeName)}.${
|
|
809
|
-
this.dimensionSql(
|
|
849
|
+
const primaryKeyJoinConditions = primaryKeyDimensions.map((pkd) => `${this.escapeColumnName('keys')}.${pkd.aliasName()} = ${shouldBuildJoinForMeasureSelect ?
|
|
850
|
+
`${this.cubeAlias(keyCubeName)}.${pkd.aliasName()}` :
|
|
851
|
+
this.dimensionSql(pkd)}`).join(' AND ');
|
|
810
852
|
const subQueryJoins = shouldBuildJoinForMeasureSelect ? [] : measureSubQueryDimensions.map(d => this.subQueryJoin(d));
|
|
811
853
|
const joinSql = this.joinSql([
|
|
812
|
-
{ sql: `(${this.keysQuery(
|
|
854
|
+
{ sql: `(${this.keysQuery(primaryKeyDimensions, filters)})`, alias: this.escapeColumnName('keys') },
|
|
813
855
|
{
|
|
814
856
|
sql: keyCubeSql,
|
|
815
857
|
alias: keyCubeAlias,
|
|
816
|
-
on: `${
|
|
858
|
+
on: `${primaryKeyJoinConditions}
|
|
817
859
|
${keyCubeInlineLeftJoinConditions ? ` AND (${keyCubeInlineLeftJoinConditions})` : ''}`
|
|
818
860
|
},
|
|
819
861
|
...subQueryJoins
|
|
@@ -834,9 +876,9 @@ class BaseQuery {
|
|
|
834
876
|
return false;
|
|
835
877
|
}).reduce((a, b) => a || b);
|
|
836
878
|
}
|
|
837
|
-
aggregateSubQueryMeasureJoin(keyCubeName, measures, measuresJoin,
|
|
879
|
+
aggregateSubQueryMeasureJoin(keyCubeName, measures, measuresJoin, primaryKeyDimensions, measureSubQueryDimensions) {
|
|
838
880
|
return this.ungroupedMeasureSelect(() => this.withCubeAliasPrefix(`${keyCubeName}_measure_join`, () => {
|
|
839
|
-
const columns =
|
|
881
|
+
const columns = primaryKeyDimensions.map(p => p.selectColumns()).concat(measures.map(m => m.selectColumns()))
|
|
840
882
|
.filter(s => !!s).join(', ');
|
|
841
883
|
return `SELECT ${columns} FROM ${this.joinQuery(measuresJoin, measureSubQueryDimensions)}`;
|
|
842
884
|
}));
|
|
@@ -847,18 +889,18 @@ class BaseQuery {
|
|
|
847
889
|
ungroupedMeasureSelect(select) {
|
|
848
890
|
return this.evaluateSymbolSqlWithContext(select, { ungrouped: true });
|
|
849
891
|
}
|
|
850
|
-
keysQuery(
|
|
892
|
+
keysQuery(primaryKeyDimensions, filters) {
|
|
851
893
|
const inlineWhereConditions = [];
|
|
852
|
-
const query = this.rewriteInlineWhere(() => this.joinQuery(this.join, this.collectFrom(this.keyDimensions(
|
|
853
|
-
return `SELECT DISTINCT ${this.keysSelect(
|
|
894
|
+
const query = this.rewriteInlineWhere(() => this.joinQuery(this.join, this.collectFrom(this.keyDimensions(primaryKeyDimensions), this.collectSubQueryDimensionsFor.bind(this), 'collectSubQueryDimensionsFor')), inlineWhereConditions);
|
|
895
|
+
return `SELECT DISTINCT ${this.keysSelect(primaryKeyDimensions)} FROM ${query} ${this.baseWhere(filters.concat(inlineWhereConditions))}`;
|
|
854
896
|
}
|
|
855
|
-
keysSelect(
|
|
856
|
-
return ramda_1.default.flatten(this.keyDimensions(
|
|
897
|
+
keysSelect(primaryKeyDimensions) {
|
|
898
|
+
return ramda_1.default.flatten(this.keyDimensions(primaryKeyDimensions)
|
|
857
899
|
.map(s => s.selectColumns())).filter(s => !!s).join(', ');
|
|
858
900
|
}
|
|
859
|
-
keyDimensions(
|
|
860
|
-
return this.dimensionsForSelect()
|
|
861
|
-
.concat(
|
|
901
|
+
keyDimensions(primaryKeyDimensions) {
|
|
902
|
+
return ramda_1.default.uniqBy((d) => d.dimension, this.dimensionsForSelect()
|
|
903
|
+
.concat(primaryKeyDimensions));
|
|
862
904
|
}
|
|
863
905
|
cubeSql(cube) {
|
|
864
906
|
const foundPreAggregation = this.preAggregations.findPreAggregationToUseForCube(cube);
|
|
@@ -1043,8 +1085,11 @@ class BaseQuery {
|
|
|
1043
1085
|
this.safeEvaluateSymbolContext().leafMeasures[this.safeEvaluateSymbolContext().currentMeasure] = true;
|
|
1044
1086
|
}
|
|
1045
1087
|
}
|
|
1088
|
+
const primaryKeys = this.cubeEvaluator.primaryKeys[cubeName];
|
|
1046
1089
|
const result = this.renderSqlMeasure(name, this.applyMeasureFilters(this.autoPrefixWithCubeName(cubeName, symbol.sql && this.evaluateSql(cubeName, symbol.sql) ||
|
|
1047
|
-
|
|
1090
|
+
primaryKeys.length && (primaryKeys.length > 1 ?
|
|
1091
|
+
this.concatStringsSql(primaryKeys.map((pk) => this.castToString(this.primaryKeySql(pk, cubeName))))
|
|
1092
|
+
: this.primaryKeySql(primaryKeys[0], cubeName)) || '*'), symbol, cubeName), symbol, cubeName, parentMeasure);
|
|
1048
1093
|
if (this.safeEvaluateSymbolContext().compositeCubeMeasures ||
|
|
1049
1094
|
this.safeEvaluateSymbolContext().leafMeasures) {
|
|
1050
1095
|
this.safeEvaluateSymbolContext().currentMeasure = parentMeasure;
|
|
@@ -1084,11 +1129,14 @@ class BaseQuery {
|
|
|
1084
1129
|
concatStringsSql(strings) {
|
|
1085
1130
|
return strings.join(' || ');
|
|
1086
1131
|
}
|
|
1087
|
-
|
|
1088
|
-
const
|
|
1089
|
-
if (!
|
|
1090
|
-
throw new UserError_1.UserError(`Primary key is required for '${cubeName}`);
|
|
1132
|
+
primaryKeyNames(cubeName) {
|
|
1133
|
+
const primaryKeys = this.cubeEvaluator.primaryKeys[cubeName];
|
|
1134
|
+
if (!primaryKeys || !primaryKeys.length) {
|
|
1135
|
+
throw new UserError_1.UserError(`One or more Primary key is required for '${cubeName}`);
|
|
1091
1136
|
}
|
|
1137
|
+
return primaryKeys.map((pk) => this.primaryKeyName(cubeName, pk));
|
|
1138
|
+
}
|
|
1139
|
+
primaryKeyName(cubeName, primaryKey) {
|
|
1092
1140
|
return `${cubeName}.${primaryKey}`;
|
|
1093
1141
|
}
|
|
1094
1142
|
evaluateSql(cubeName, sql, options) {
|
|
@@ -1246,12 +1294,15 @@ class BaseQuery {
|
|
|
1246
1294
|
}
|
|
1247
1295
|
return evaluateSql;
|
|
1248
1296
|
}
|
|
1297
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1249
1298
|
hllInit(sql) {
|
|
1250
1299
|
throw new UserError_1.UserError('Distributed approximate distinct count is not supported by this DB');
|
|
1251
1300
|
}
|
|
1301
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1252
1302
|
hllMerge(sql) {
|
|
1253
1303
|
throw new UserError_1.UserError('Distributed approximate distinct count is not supported by this DB');
|
|
1254
1304
|
}
|
|
1305
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1255
1306
|
hllCardinality(sql) {
|
|
1256
1307
|
throw new UserError_1.UserError('Distributed approximate distinct count is not supported by this DB');
|
|
1257
1308
|
}
|
|
@@ -1261,11 +1312,18 @@ class BaseQuery {
|
|
|
1261
1312
|
hllCardinalityMerge(sql) {
|
|
1262
1313
|
return this.hllMerge(sql);
|
|
1263
1314
|
}
|
|
1315
|
+
castToString(sql) {
|
|
1316
|
+
return `CAST(${sql} as TEXT)`;
|
|
1317
|
+
}
|
|
1318
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1264
1319
|
countDistinctApprox(sql) {
|
|
1265
1320
|
throw new UserError_1.UserError('Approximate distinct count is not supported by this DB');
|
|
1266
1321
|
}
|
|
1267
1322
|
primaryKeyCount(cubeName, distinct) {
|
|
1268
|
-
const
|
|
1323
|
+
const primaryKeys = this.cubeEvaluator.primaryKeys[cubeName];
|
|
1324
|
+
const primaryKeySql = primaryKeys.length > 1 ?
|
|
1325
|
+
this.concatStringsSql(primaryKeys.map((pk) => this.castToString(this.primaryKeySql(pk, cubeName)))) :
|
|
1326
|
+
this.primaryKeySql(primaryKeys[0], cubeName);
|
|
1269
1327
|
return `count(${distinct ? 'distinct ' : ''}${primaryKeySql})`;
|
|
1270
1328
|
}
|
|
1271
1329
|
renderDimensionCase(symbol, cubeName) {
|
|
@@ -1323,9 +1381,11 @@ class BaseQuery {
|
|
|
1323
1381
|
* @param {string} field
|
|
1324
1382
|
* @return {string}
|
|
1325
1383
|
*/
|
|
1384
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1326
1385
|
convertTz(field) {
|
|
1327
1386
|
throw new Error('Not implemented');
|
|
1328
1387
|
}
|
|
1388
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1329
1389
|
timeGroupedColumn(granularity, dimension) {
|
|
1330
1390
|
throw new Error('Not implemented');
|
|
1331
1391
|
}
|