Skip to content

Commit ca51a46

Browse files
committed
[DEBUG] pre-aggregation with custom granularities
1 parent 48e7347 commit ca51a46

File tree

2 files changed

+59
-4
lines changed

2 files changed

+59
-4
lines changed

packages/cubejs-schema-compiler/src/adapter/PreAggregations.js

+25-4
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,11 @@ export class PreAggregations {
403403
filterDimensionsSingleValueEqual =
404404
allValuesEq1(filterDimensionsSingleValueEqual) ? new Set(filterDimensionsSingleValueEqual?.keys()) : null;
405405

406+
407+
console.log('transformQueryToCanUseForm query.timeDimensions', query.timeDimensions);
408+
console.log('transformQueryToCanUseForm ownedTimeDimensions', ownedTimeDimensions);
409+
console.log('transformQueryToCanUseForm timeDimensions', timeDimensions);
410+
406411
return {
407412
sortedDimensions,
408413
sortedTimeDimensions,
@@ -575,12 +580,20 @@ export class PreAggregations {
575580
// TODO remove this in favor of matching with join path
576581
const referencesTrimmed = trimmedReferences(references);
577582

583+
console.log('canUsePreAggregationNotAdditive transformedQuery.timeDimensions', transformedQuery.timeDimensions);
584+
585+
578586
const refTimeDimensions = backAlias(sortTimeDimensions(referencesTrimmed.timeDimensions));
579587
const qryTimeDimensions = references.allowNonStrictDateRangeMatch
580588
? transformedQuery.timeDimensions
581589
: transformedQuery.sortedTimeDimensions;
582590
const backAliasMeasures = backAlias(referencesTrimmed.measures);
583591
const backAliasDimensions = backAlias(referencesTrimmed.dimensions);
592+
593+
console.log('canUsePreAggregationNotAdditive qryTimeDimensions', qryTimeDimensions);
594+
console.log('canUsePreAggregationNotAdditive refTimeDimensions', refTimeDimensions);
595+
console.log('canUsePreAggregationNotAdditive TD equals', R.equals(qryTimeDimensions, refTimeDimensions));
596+
584597
return ((
585598
transformedQuery.hasNoTimeDimensionsWithoutGranularity
586599
) && (
@@ -609,10 +622,18 @@ export class PreAggregations {
609622
* @param {string} granularity Granularity
610623
* @returns {Array<string>}
611624
*/
612-
const expandGranularity = (dimension, granularity) => (
613-
transformedQuery.granularityHierarchies[`${dimension}.${granularity}`] ||
614-
[granularity]
615-
);
625+
const expandGranularity = (dimension, granularity) => {
626+
console.log("expandGranularity dimension", dimension);
627+
console.log("expandGranularity granularity", granularity);
628+
console.log("expandGranularity granularityHierarchies", transformedQuery.granularityHierarchies[
629+
`${dimension}.${granularity}`
630+
]);
631+
return (
632+
transformedQuery.granularityHierarchies[
633+
`${dimension}.${granularity}`
634+
] || [granularity]
635+
);
636+
};
616637

617638
/**
618639
* Determine whether time dimensions match to the window granularity or not.

packages/cubejs-schema-compiler/test/integration/postgres/custom-granularities.test.ts

+34
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@ describe('Custom Granularities', () => {
8181
type: count
8282
rolling_window:
8383
trailing: unbounded
84+
pre_aggregations:
85+
- name: half_year_preagg
86+
timeDimension: createdAt
87+
granularity: half_year
88+
# granularity: quarter
8489
8590
views:
8691
- name: orders_view
@@ -984,4 +989,33 @@ describe('Custom Granularities', () => {
984989
],
985990
{ joinGraph, cubeEvaluator, compiler }
986991
));
992+
993+
it('pre-aggregation with custom granularity should match its own references', async () => {
994+
await compiler.compile();
995+
996+
const preAggregationId = 'orders.half_year_preagg';
997+
const preAggregations = cubeEvaluator.preAggregations({});
998+
console.log('preAggregations', preAggregations);
999+
1000+
const preAggregation = preAggregations
1001+
.find(p => p.id === preAggregationId);
1002+
if (preAggregation === undefined) {
1003+
throw expect(preAggregation).toBeDefined();
1004+
}
1005+
1006+
console.log('references', preAggregation.references);
1007+
1008+
const query = dbRunner.newTestQuery({ joinGraph, cubeEvaluator, compiler }, {
1009+
...preAggregation.references,
1010+
preAggregationId: preAggregation.id,
1011+
});
1012+
1013+
const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription();
1014+
const preAggregationFromQuery = preAggregationsDescription.find(p => p.preAggregationId === preAggregation.id);
1015+
if (preAggregationFromQuery === undefined) {
1016+
throw expect(preAggregationFromQuery).toBeDefined();
1017+
}
1018+
1019+
expect(preAggregationFromQuery.preAggregationId).toBe(preAggregationId);
1020+
});
9871021
});

0 commit comments

Comments
 (0)