@cubejs-backend/schema-compiler 1.3.15 → 1.3.17
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 +15 -6
- package/dist/src/adapter/BaseQuery.d.ts.map +1 -1
- package/dist/src/adapter/BaseQuery.js +58 -16
- package/dist/src/adapter/BaseQuery.js.map +1 -1
- package/dist/src/adapter/BigqueryQuery.d.ts +1 -0
- package/dist/src/adapter/BigqueryQuery.d.ts.map +1 -1
- package/dist/src/adapter/BigqueryQuery.js +34 -3
- package/dist/src/adapter/BigqueryQuery.js.map +1 -1
- package/dist/src/adapter/CubeStoreQuery.d.ts +1 -0
- package/dist/src/adapter/CubeStoreQuery.d.ts.map +1 -1
- package/dist/src/adapter/CubeStoreQuery.js +4 -0
- package/dist/src/adapter/CubeStoreQuery.js.map +1 -1
- package/dist/src/adapter/PostgresQuery.d.ts.map +1 -1
- package/dist/src/adapter/PostgresQuery.js +6 -3
- package/dist/src/adapter/PostgresQuery.js.map +1 -1
- package/dist/src/compiler/CubeSymbols.js +2 -2
- package/dist/src/compiler/CubeSymbols.js.map +1 -1
- package/package.json +7 -8
|
@@ -102,12 +102,6 @@ export class BaseQuery {
|
|
|
102
102
|
rowLimit: any;
|
|
103
103
|
offset: any;
|
|
104
104
|
allFilters: BaseTimeDimension[] | undefined;
|
|
105
|
-
useNativeSqlPlanner: any;
|
|
106
|
-
canUseNativeSqlPlannerPreAggregation: boolean | undefined;
|
|
107
|
-
queryLevelJoinHints: any;
|
|
108
|
-
cubeAliasPrefix: any;
|
|
109
|
-
preAggregationsSchemaOption: any;
|
|
110
|
-
externalQueryClass: any;
|
|
111
105
|
/**
|
|
112
106
|
* @type {Array<{sql: string, on: {expression: Function}, joinType: 'LEFT' | 'INNER', alias: string}>}
|
|
113
107
|
*/
|
|
@@ -119,7 +113,14 @@ export class BaseQuery {
|
|
|
119
113
|
joinType: 'LEFT' | 'INNER';
|
|
120
114
|
alias: string;
|
|
121
115
|
}[] | undefined;
|
|
116
|
+
useNativeSqlPlanner: any;
|
|
117
|
+
canUseNativeSqlPlannerPreAggregation: boolean | undefined;
|
|
118
|
+
queryLevelJoinHints: any;
|
|
119
|
+
cubeAliasPrefix: any;
|
|
120
|
+
preAggregationsSchemaOption: any;
|
|
121
|
+
externalQueryClass: any;
|
|
122
122
|
order: any;
|
|
123
|
+
neverUseSqlPlannerPreaggregation(): boolean;
|
|
123
124
|
prebuildJoin(): void;
|
|
124
125
|
join: any;
|
|
125
126
|
cacheValue(key: any, fn: any, { contextPropNames, inputProps, cache }?: {
|
|
@@ -328,6 +329,14 @@ export class BaseQuery {
|
|
|
328
329
|
afterOrOnDateFilter(dimensionSql: any, timeStampParam: any): string;
|
|
329
330
|
timeStampCast(value: any): string;
|
|
330
331
|
dateTimeCast(value: any): string;
|
|
332
|
+
/**
|
|
333
|
+
* Converts the input interval (e.g. "2 years", "3 months", "5 days")
|
|
334
|
+
* into a format compatible with the target SQL dialect.
|
|
335
|
+
* Also returns the minimal time unit required (e.g. for use in DATEDIFF).
|
|
336
|
+
*
|
|
337
|
+
* Returns a tuple: (formatted interval, minimal time unit)
|
|
338
|
+
*/
|
|
339
|
+
intervalAndMinimalTimeUnit(interval: any): any[];
|
|
331
340
|
commonQuery(): string;
|
|
332
341
|
dimensionOnlyMeasureToHierarchy(context: any, m: any): any[];
|
|
333
342
|
collectRootMeasureToHierarchy(context: any): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseQuery.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/BaseQuery.js"],"names":[],"mappings":"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"}
|
|
@@ -293,9 +293,13 @@ class BaseQuery {
|
|
|
293
293
|
return dimension;
|
|
294
294
|
}).filter(ramda_1.default.identity).map(this.newTimeDimension.bind(this));
|
|
295
295
|
this.allFilters = this.timeDimensions.concat(this.segments).concat(this.filters);
|
|
296
|
+
/**
|
|
297
|
+
* @type {Array<{sql: string, on: {expression: Function}, joinType: 'LEFT' | 'INNER', alias: string}>}
|
|
298
|
+
*/
|
|
299
|
+
this.customSubQueryJoins = this.options.subqueryJoins ?? [];
|
|
296
300
|
this.useNativeSqlPlanner = this.options.useNativeSqlPlanner ?? (0, shared_1.getEnv)('nativeSqlPlanner');
|
|
297
301
|
this.canUseNativeSqlPlannerPreAggregation = false;
|
|
298
|
-
if (this.useNativeSqlPlanner) {
|
|
302
|
+
if (this.useNativeSqlPlanner && !this.neverUseSqlPlannerPreaggregation()) {
|
|
299
303
|
const hasMultiStageMeasures = this.fullKeyQueryAggregateMeasures({ hasMultipliedForPreAggregation: true }).multiStageMembers.length > 0;
|
|
300
304
|
this.canUseNativeSqlPlannerPreAggregation = hasMultiStageMeasures;
|
|
301
305
|
}
|
|
@@ -304,15 +308,15 @@ class BaseQuery {
|
|
|
304
308
|
this.cubeAliasPrefix = this.options.cubeAliasPrefix;
|
|
305
309
|
this.preAggregationsSchemaOption = this.options.preAggregationsSchema ?? DEFAULT_PREAGGREGATIONS_SCHEMA;
|
|
306
310
|
this.externalQueryClass = this.options.externalQueryClass;
|
|
307
|
-
/**
|
|
308
|
-
* @type {Array<{sql: string, on: {expression: Function}, joinType: 'LEFT' | 'INNER', alias: string}>}
|
|
309
|
-
*/
|
|
310
|
-
this.customSubQueryJoins = this.options.subqueryJoins ?? [];
|
|
311
311
|
// Set the default order only when options.order is not provided at all
|
|
312
312
|
// if options.order is set (empty array [] or with data) - use it as is
|
|
313
313
|
this.order = this.options.order ?? this.defaultOrder();
|
|
314
314
|
this.initUngrouped();
|
|
315
315
|
}
|
|
316
|
+
// Temporary workaround to avoid checking for multistage in CubeStoreQuery, since that could lead to errors when HLL functions are present in the query.
|
|
317
|
+
neverUseSqlPlannerPreaggregation() {
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
316
320
|
prebuildJoin() {
|
|
317
321
|
try {
|
|
318
322
|
// TODO allJoinHints should contain join hints form pre-agg
|
|
@@ -661,7 +665,8 @@ class BaseQuery {
|
|
|
661
665
|
baseTools: this,
|
|
662
666
|
ungrouped: this.options.ungrouped,
|
|
663
667
|
exportAnnotatedSql: exportAnnotatedSql === true,
|
|
664
|
-
preAggregationQuery: this.options.preAggregationQuery
|
|
668
|
+
preAggregationQuery: this.options.preAggregationQuery,
|
|
669
|
+
totalQuery: this.options.totalQuery,
|
|
665
670
|
};
|
|
666
671
|
const buildResult = (0, native_1.buildSqlAndParams)(queryParams);
|
|
667
672
|
if (buildResult.error) {
|
|
@@ -727,11 +732,11 @@ class BaseQuery {
|
|
|
727
732
|
}
|
|
728
733
|
// FIXME helper for native generator, maybe should be moved entirely to rust
|
|
729
734
|
generateTimeSeries(granularity, dateRange) {
|
|
730
|
-
return (0, shared_1.timeSeries)(granularity, dateRange);
|
|
735
|
+
return (0, shared_1.timeSeries)(granularity, dateRange, { timestampPrecision: this.timestampPrecision() });
|
|
731
736
|
}
|
|
732
737
|
// FIXME helper for native generator, maybe should be moved entirely to rust
|
|
733
738
|
generateCustomTimeSeries(granularityInterval, dateRange, origin) {
|
|
734
|
-
return (0, shared_1.timeSeriesFromCustomInterval)(granularityInterval, dateRange, (0, moment_timezone_1.default)(origin), { timestampPrecision:
|
|
739
|
+
return (0, shared_1.timeSeriesFromCustomInterval)(granularityInterval, dateRange, (0, moment_timezone_1.default)(origin), { timestampPrecision: this.timestampPrecision() });
|
|
735
740
|
}
|
|
736
741
|
getPreAggregationByName(cube, preAggregationName) {
|
|
737
742
|
return this.preAggregations.getRollupPreAggregationByName(cube, preAggregationName);
|
|
@@ -785,21 +790,26 @@ class BaseQuery {
|
|
|
785
790
|
});
|
|
786
791
|
}
|
|
787
792
|
runningTotalDateJoinCondition() {
|
|
788
|
-
return this.timeDimensions
|
|
793
|
+
return this.timeDimensions
|
|
794
|
+
.map(d => [
|
|
789
795
|
d,
|
|
790
796
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
791
797
|
(dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo) => `${dateField} >= ${dimensionDateFrom} AND ${dateField} <= ${dateTo}`
|
|
792
798
|
]);
|
|
793
799
|
}
|
|
794
800
|
rollingWindowToDateJoinCondition(granularity) {
|
|
795
|
-
return this.timeDimensions
|
|
801
|
+
return this.timeDimensions
|
|
802
|
+
.filter(td => td.granularity)
|
|
803
|
+
.map(d => [
|
|
796
804
|
d,
|
|
797
805
|
(dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo, isFromStartToEnd) => `${dateField} >= ${this.timeGroupedColumn(granularity, dateFrom)} AND ${dateField} <= ${dateTo}`
|
|
798
806
|
]);
|
|
799
807
|
}
|
|
800
808
|
rollingWindowDateJoinCondition(trailingInterval, leadingInterval, offset) {
|
|
801
809
|
offset = offset || 'end';
|
|
802
|
-
return this.timeDimensions
|
|
810
|
+
return this.timeDimensions
|
|
811
|
+
.filter(td => td.granularity)
|
|
812
|
+
.map(d => [d, (dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo, isFromStartToEnd) => {
|
|
803
813
|
// dateFrom based window
|
|
804
814
|
const conditions = [];
|
|
805
815
|
if (trailingInterval !== 'unbounded') {
|
|
@@ -1454,6 +1464,18 @@ class BaseQuery {
|
|
|
1454
1464
|
dateTimeCast(value) {
|
|
1455
1465
|
return `${value}::timestamp`;
|
|
1456
1466
|
}
|
|
1467
|
+
/**
|
|
1468
|
+
* Converts the input interval (e.g. "2 years", "3 months", "5 days")
|
|
1469
|
+
* into a format compatible with the target SQL dialect.
|
|
1470
|
+
* Also returns the minimal time unit required (e.g. for use in DATEDIFF).
|
|
1471
|
+
*
|
|
1472
|
+
* Returns a tuple: (formatted interval, minimal time unit)
|
|
1473
|
+
*/
|
|
1474
|
+
intervalAndMinimalTimeUnit(interval) {
|
|
1475
|
+
const intervalParsed = (0, shared_1.parseSqlInterval)(interval);
|
|
1476
|
+
const minGranularity = this.diffTimeUnitForInterval(interval);
|
|
1477
|
+
return [interval, minGranularity];
|
|
1478
|
+
}
|
|
1457
1479
|
commonQuery() {
|
|
1458
1480
|
return `SELECT${this.topLimit()}
|
|
1459
1481
|
${this.baseSelect()}
|
|
@@ -1826,14 +1848,32 @@ class BaseQuery {
|
|
|
1826
1848
|
* @returns {Array<Array<string>>}
|
|
1827
1849
|
*/
|
|
1828
1850
|
collectJoinHints(excludeTimeDimensions = false) {
|
|
1829
|
-
const
|
|
1830
|
-
|
|
1851
|
+
const customSubQueryJoinMembers = this.customSubQueryJoins.map(j => {
|
|
1852
|
+
const res = {
|
|
1853
|
+
path: () => null,
|
|
1854
|
+
cube: () => this.cubeEvaluator.cubeFromPath(j.on.cubeName),
|
|
1855
|
+
definition: () => ({
|
|
1856
|
+
sql: j.on.expression,
|
|
1857
|
+
// TODO use actual type even though it isn't used right now
|
|
1858
|
+
type: 'number'
|
|
1859
|
+
}),
|
|
1860
|
+
};
|
|
1861
|
+
return {
|
|
1862
|
+
getMembers: () => [res],
|
|
1863
|
+
};
|
|
1864
|
+
});
|
|
1865
|
+
const joinMembers = this.join ? this.join.joins.map(j => ({
|
|
1831
1866
|
getMembers: () => [{
|
|
1832
1867
|
path: () => null,
|
|
1833
1868
|
cube: () => this.cubeEvaluator.cubeFromPath(j.originalFrom),
|
|
1834
1869
|
definition: () => j.join,
|
|
1835
1870
|
}]
|
|
1836
|
-
})) : []
|
|
1871
|
+
})) : [];
|
|
1872
|
+
const membersToCollectFrom = [
|
|
1873
|
+
...this.allMembersConcat(excludeTimeDimensions),
|
|
1874
|
+
...joinMembers,
|
|
1875
|
+
...customSubQueryJoinMembers,
|
|
1876
|
+
];
|
|
1837
1877
|
return this.collectJoinHintsFromMembers(membersToCollectFrom);
|
|
1838
1878
|
}
|
|
1839
1879
|
collectJoinHintsFromMembers(members) {
|
|
@@ -2213,8 +2253,7 @@ class BaseQuery {
|
|
|
2213
2253
|
});
|
|
2214
2254
|
// for time dimension with granularity convertedToTz() is called internally in dimensionSql() flow,
|
|
2215
2255
|
// so we need to ignore convertTz later even if context convertTzForRawTimeDimension is set to true
|
|
2216
|
-
this.
|
|
2217
|
-
return td.dimensionSql();
|
|
2256
|
+
return this.evaluateSymbolSqlWithContext(() => td.dimensionSql(), { ignoreConvertTzForTimeDimension: true });
|
|
2218
2257
|
}
|
|
2219
2258
|
else {
|
|
2220
2259
|
let res = this.autoPrefixAndEvaluateSql(cubeName, symbol.sql, isMemberExpr);
|
|
@@ -3042,6 +3081,9 @@ class BaseQuery {
|
|
|
3042
3081
|
like_escape: '{{ like_expr }} ESCAPE {{ escape_char }}',
|
|
3043
3082
|
concat_strings: '{{ strings | join(\' || \' ) }}',
|
|
3044
3083
|
},
|
|
3084
|
+
tesseract: {
|
|
3085
|
+
ilike: '{{ expr }} {% if negated %}NOT {% endif %}ILIKE {{ pattern }}', // May require different overloads in Tesseract than the ilike from expressions used in SQLAPI.
|
|
3086
|
+
},
|
|
3045
3087
|
filters: {
|
|
3046
3088
|
equals: '{{ column }} = {{ value }}{{ is_null_check }}',
|
|
3047
3089
|
not_equals: '{{ column }} <> {{ value }}{{ is_null_check }}',
|