Skip to content

Commit

Permalink
fix(schema-compiler): Fix allowNonStrictDateRangeMatch pre-agg match …
Browse files Browse the repository at this point in the history
…for dateRange queries without granularities (#9258)
  • Loading branch information
KSDaemon authored Feb 21, 2025
1 parent 7ea098b commit 00fe682
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ export class BaseTimeDimension extends BaseFilter {
}

public resolvedGranularity() {
return this.granularityObj ? this.granularityObj.resolvedGranularity() : this.dateRangeGranularity();
return this.granularityObj ? this.granularityObj.resolvedGranularity() : null;
}

public wildcardRange() {
Expand Down
11 changes: 10 additions & 1 deletion packages/cubejs-schema-compiler/src/adapter/PreAggregations.js
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,9 @@ export class PreAggregations {
*/
const expandTimeDimension = (timeDimension) => {
const [dimension, resolvedGranularity] = timeDimension;
if (!resolvedGranularity) {
return [[dimension, '*']]; // Any granularity should fit
}
return expandGranularity(dimension, resolvedGranularity)
.map((newGranularity) => [dimension, newGranularity]);
};
Expand Down Expand Up @@ -638,7 +641,13 @@ export class PreAggregations {

const timeDimensionsMatch = (timeDimensionsList, doBackAlias) => R.allPass(
timeDimensionsList.map(
tds => R.anyPass(tds.map(td => R.contains(td)))
tds => R.anyPass(tds.map(td => {
if (td[1] === '*') {
return R.any(tdtc => tdtc[0] === td[0]); // need to match the dimension at least
} else {
return R.contains(td);
}
}))
)
)(
doBackAlias ?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,16 @@ const getQueries = (compiler, joinGraph, cubeEvaluator) => ([
}],
timezone: 'America/Los_Angeles',
}),
// no granularity
new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, {
measures: ['cube.totalQuantity', 'cube.totalProfit'],
dimensions: ['cube.city'],
timeDimensions: [{
dimension: 'cube.orderDate',
dateRange: ['2020-01-01 00:00:00.000', '2020-03-30 22:50:50.999'],
}],
timezone: 'America/Los_Angeles',
}),
]);

describe(
Expand Down Expand Up @@ -259,6 +269,15 @@ describe(
expect(query.indexOf('cube__daily_data')).toEqual(-1);
expect(query.indexOf('cube__hourly_data')).toEqual(-1);
});

it('query with no granularity match MonthlyData', async () => {
await compiler.compile();
const [,,,,,, request] = getQueries(compiler, joinGraph, cubeEvaluator);
const [query] = request.buildSqlAndParams();
expect(query.indexOf('cube__monthly_data')).toBeGreaterThanOrEqual(0);
expect(query.indexOf('cube__daily_data')).toEqual(-1);
expect(query.indexOf('cube__hourly_data')).toEqual(-1);
});
});

describe('The `DailyData` pre-aggregation with the `allowNonStrictDateRangeMatch` enabled', () => {
Expand Down Expand Up @@ -320,6 +339,15 @@ describe(
expect(query.indexOf('cube__daily_data')).toBeGreaterThanOrEqual(0);
expect(query.indexOf('cube__hourly_data')).toEqual(-1);
});

it('query with no granularity match MonthlyData', async () => {
await compiler.compile();
const [,,,,,, request] = getQueries(compiler, joinGraph, cubeEvaluator);
const [query] = request.buildSqlAndParams();
expect(query.indexOf('cube__monthly_data')).toEqual(-1);
expect(query.indexOf('cube__daily_data')).toBeGreaterThanOrEqual(0);
expect(query.indexOf('cube__hourly_data')).toEqual(-1);
});
});

describe('The `HourlyData` pre-aggregation with the `allowNonStrictDateRangeMatch` enabled', () => {
Expand Down Expand Up @@ -381,6 +409,15 @@ describe(
expect(query.indexOf('cube__daily_data')).toEqual(-1);
expect(query.indexOf('cube__hourly_data')).toBeGreaterThanOrEqual(0);
});

it('query with no granularity match HourlyData', async () => {
await compiler.compile();
const [,,,,,, request] = getQueries(compiler, joinGraph, cubeEvaluator);
const [query] = request.buildSqlAndParams();
expect(query.indexOf('cube__monthly_data')).toEqual(-1);
expect(query.indexOf('cube__daily_data')).toEqual(-1);
expect(query.indexOf('cube__hourly_data')).toBeGreaterThanOrEqual(0);
});
});

describe('`MonthlyData` and `DailyData` pre-aggregations with the `allowNonStrictDateRangeMatch` enabled', () => {
Expand Down

0 comments on commit 00fe682

Please sign in to comment.