@cubejs-backend/schema-compiler 1.1.14 → 1.1.16
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 +53 -3
- package/dist/src/adapter/BaseQuery.d.ts.map +1 -1
- package/dist/src/adapter/BaseQuery.js +44 -2
- package/dist/src/adapter/BaseQuery.js.map +1 -1
- package/dist/src/compiler/CubeEvaluator.d.ts.map +1 -1
- package/dist/src/compiler/CubeEvaluator.js +14 -11
- package/dist/src/compiler/CubeEvaluator.js.map +1 -1
- package/dist/src/compiler/CubeSymbols.d.ts.map +1 -1
- package/dist/src/compiler/CubeSymbols.js +11 -2
- package/dist/src/compiler/CubeSymbols.js.map +1 -1
- package/dist/src/compiler/CubeToMetaTransformer.js +1 -1
- package/dist/src/compiler/CubeToMetaTransformer.js.map +1 -1
- package/dist/src/compiler/CubeValidator.js +3 -3
- package/dist/src/compiler/CubeValidator.js.map +1 -1
- package/dist/src/compiler/YamlCompiler.js +1 -1
- package/dist/src/compiler/YamlCompiler.js.map +1 -1
- package/dist/src/compiler/transpilers/CubePropContextTranspiler.js +1 -1
- package/dist/src/compiler/transpilers/CubePropContextTranspiler.js.map +1 -1
- package/package.json +4 -4
|
@@ -9,6 +9,20 @@
|
|
|
9
9
|
* @property {import('../compiler/CompilerCache').CompilerCache} compilerCache
|
|
10
10
|
* @property {*} headCommitId
|
|
11
11
|
*/
|
|
12
|
+
/**
|
|
13
|
+
* @typedef {Object} JoinRoot
|
|
14
|
+
* @property {string} sql
|
|
15
|
+
* @property {string} alias
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {Object} JoinItem
|
|
19
|
+
* @property {string} sql
|
|
20
|
+
* @property {string} alias
|
|
21
|
+
* @property {string} on
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* @typedef {[JoinRoot, ...JoinItem]} JoinChain
|
|
25
|
+
*/
|
|
12
26
|
/**
|
|
13
27
|
* BaseQuery class. BaseQuery object encapsulates the logic of
|
|
14
28
|
* transforming an incoming to a specific cube request to the
|
|
@@ -90,6 +104,17 @@ export class BaseQuery {
|
|
|
90
104
|
cubeAliasPrefix: any;
|
|
91
105
|
preAggregationsSchemaOption: any;
|
|
92
106
|
externalQueryClass: any;
|
|
107
|
+
/**
|
|
108
|
+
* @type {Array<{sql: string, on: {expression: Function}, joinType: 'LEFT' | 'INNER', alias: string}>}
|
|
109
|
+
*/
|
|
110
|
+
customSubQueryJoins: {
|
|
111
|
+
sql: string;
|
|
112
|
+
on: {
|
|
113
|
+
expression: Function;
|
|
114
|
+
};
|
|
115
|
+
joinType: 'LEFT' | 'INNER';
|
|
116
|
+
alias: string;
|
|
117
|
+
}[] | undefined;
|
|
93
118
|
order: any;
|
|
94
119
|
cacheValue(key: any, fn: any, { contextPropNames, inputProps, cache }?: {
|
|
95
120
|
contextPropNames: any;
|
|
@@ -271,11 +296,26 @@ export class BaseQuery {
|
|
|
271
296
|
rewriteInlineCubeSql(cube: any, isLeftJoinCondition: any): any[];
|
|
272
297
|
joinQuery(join: any, subQueryDimensions: any): string;
|
|
273
298
|
joinSql(toJoin: any): string;
|
|
274
|
-
|
|
299
|
+
/**
|
|
300
|
+
*
|
|
301
|
+
* @param {{sql: string, on: {cubeName: string, expression: Function}, joinType: 'LEFT' | 'INNER', alias: string}} customJoin
|
|
302
|
+
* @returns {JoinItem}
|
|
303
|
+
*/
|
|
304
|
+
customSubQueryJoin(customJoin: {
|
|
275
305
|
sql: string;
|
|
306
|
+
on: {
|
|
307
|
+
cubeName: string;
|
|
308
|
+
expression: Function;
|
|
309
|
+
};
|
|
310
|
+
joinType: 'LEFT' | 'INNER';
|
|
276
311
|
alias: string;
|
|
277
|
-
|
|
278
|
-
|
|
312
|
+
}): JoinItem;
|
|
313
|
+
/**
|
|
314
|
+
*
|
|
315
|
+
* @param {string} dimension
|
|
316
|
+
* @returns {JoinItem}
|
|
317
|
+
*/
|
|
318
|
+
subQueryJoin(dimension: string): JoinItem;
|
|
279
319
|
get filtersWithoutSubQueries(): any;
|
|
280
320
|
filtersWithoutSubQueriesValue: any;
|
|
281
321
|
subQueryDescription(dimension: any): {
|
|
@@ -559,6 +599,16 @@ export type Compilers = {
|
|
|
559
599
|
compilerCache: import('../compiler/CompilerCache').CompilerCache;
|
|
560
600
|
headCommitId: any;
|
|
561
601
|
};
|
|
602
|
+
export type JoinRoot = {
|
|
603
|
+
sql: string;
|
|
604
|
+
alias: string;
|
|
605
|
+
};
|
|
606
|
+
export type JoinItem = {
|
|
607
|
+
sql: string;
|
|
608
|
+
alias: string;
|
|
609
|
+
on: string;
|
|
610
|
+
};
|
|
611
|
+
export type JoinChain = [JoinRoot, ...JoinItem];
|
|
562
612
|
import { ParamAllocator } from './ParamAllocator';
|
|
563
613
|
import { PreAggregations } from './PreAggregations';
|
|
564
614
|
import { BaseFilter } from './BaseFilter';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseQuery.js"],"names":[],"mappings":"AAkDA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;GAYG;AACH;
|
|
1
|
+
{"version":3,"file":"BaseQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseQuery.js"],"names":[],"mappings":"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"}
|
|
@@ -55,6 +55,20 @@ const SecondsDurations = {
|
|
|
55
55
|
* @property {import('../compiler/CompilerCache').CompilerCache} compilerCache
|
|
56
56
|
* @property {*} headCommitId
|
|
57
57
|
*/
|
|
58
|
+
/**
|
|
59
|
+
* @typedef {Object} JoinRoot
|
|
60
|
+
* @property {string} sql
|
|
61
|
+
* @property {string} alias
|
|
62
|
+
*/
|
|
63
|
+
/**
|
|
64
|
+
* @typedef {Object} JoinItem
|
|
65
|
+
* @property {string} sql
|
|
66
|
+
* @property {string} alias
|
|
67
|
+
* @property {string} on
|
|
68
|
+
*/
|
|
69
|
+
/**
|
|
70
|
+
* @typedef {[JoinRoot, ...JoinItem]} JoinChain
|
|
71
|
+
*/
|
|
58
72
|
/**
|
|
59
73
|
* BaseQuery class. BaseQuery object encapsulates the logic of
|
|
60
74
|
* transforming an incoming to a specific cube request to the
|
|
@@ -216,6 +230,7 @@ class BaseQuery {
|
|
|
216
230
|
multiStageQuery: this.options.multiStageQuery,
|
|
217
231
|
multiStageDimensions: this.options.multiStageDimensions,
|
|
218
232
|
multiStageTimeDimensions: this.options.multiStageTimeDimensions,
|
|
233
|
+
subqueryJoins: this.options.subqueryJoins,
|
|
219
234
|
});
|
|
220
235
|
this.from = this.options.from;
|
|
221
236
|
this.multiStageQuery = this.options.multiStageQuery;
|
|
@@ -256,6 +271,10 @@ class BaseQuery {
|
|
|
256
271
|
this.cubeAliasPrefix = this.options.cubeAliasPrefix;
|
|
257
272
|
this.preAggregationsSchemaOption = this.options.preAggregationsSchema ?? DEFAULT_PREAGGREGATIONS_SCHEMA;
|
|
258
273
|
this.externalQueryClass = this.options.externalQueryClass;
|
|
274
|
+
/**
|
|
275
|
+
* @type {Array<{sql: string, on: {expression: Function}, joinType: 'LEFT' | 'INNER', alias: string}>}
|
|
276
|
+
*/
|
|
277
|
+
this.customSubQueryJoins = this.options.subqueryJoins ?? [];
|
|
259
278
|
// Set the default order only when options.order is not provided at all
|
|
260
279
|
// if options.order is set (empty array [] or with data) - use it as is
|
|
261
280
|
this.order = this.options.order ?? this.defaultOrder();
|
|
@@ -1215,14 +1234,37 @@ class BaseQuery {
|
|
|
1215
1234
|
return this.joinSql([
|
|
1216
1235
|
{ sql: cubeSql, alias: cubeAlias },
|
|
1217
1236
|
...(subQueryDimensionsByCube[join.root] || []).map(d => this.subQueryJoin(d)),
|
|
1218
|
-
...joins
|
|
1237
|
+
...joins,
|
|
1238
|
+
...this.customSubQueryJoins.map((customJoin) => this.customSubQueryJoin(customJoin)),
|
|
1219
1239
|
]);
|
|
1220
1240
|
}
|
|
1221
1241
|
joinSql(toJoin) {
|
|
1222
1242
|
const [root, ...rest] = toJoin;
|
|
1223
|
-
const joins = rest.map(j =>
|
|
1243
|
+
const joins = rest.map(j => {
|
|
1244
|
+
const joinType = j.joinType ?? 'LEFT';
|
|
1245
|
+
return `${joinType} JOIN ${j.sql} ${this.asSyntaxJoin} ${j.alias} ON ${j.on}`;
|
|
1246
|
+
});
|
|
1224
1247
|
return [`${root.sql} ${this.asSyntaxJoin} ${root.alias}`, ...joins].join('\n');
|
|
1225
1248
|
}
|
|
1249
|
+
/**
|
|
1250
|
+
*
|
|
1251
|
+
* @param {{sql: string, on: {cubeName: string, expression: Function}, joinType: 'LEFT' | 'INNER', alias: string}} customJoin
|
|
1252
|
+
* @returns {JoinItem}
|
|
1253
|
+
*/
|
|
1254
|
+
customSubQueryJoin(customJoin) {
|
|
1255
|
+
const on = this.evaluateSql(customJoin.on.cubeName, customJoin.on.expression);
|
|
1256
|
+
return {
|
|
1257
|
+
sql: `(${customJoin.sql})`,
|
|
1258
|
+
alias: customJoin.alias,
|
|
1259
|
+
on,
|
|
1260
|
+
joinType: customJoin.joinType,
|
|
1261
|
+
};
|
|
1262
|
+
}
|
|
1263
|
+
/**
|
|
1264
|
+
*
|
|
1265
|
+
* @param {string} dimension
|
|
1266
|
+
* @returns {JoinItem}
|
|
1267
|
+
*/
|
|
1226
1268
|
subQueryJoin(dimension) {
|
|
1227
1269
|
const { prefix, subQuery, cubeName } = this.subQueryDescription(dimension);
|
|
1228
1270
|
const primaryKeys = this.cubeEvaluator.primaryKeys[cubeName];
|