Skip to content

Commit

Permalink
fix(schema-compiler): Partitioned pre-aggregates queried through view…
Browse files Browse the repository at this point in the history
…s always union all partitions, fix #6623
  • Loading branch information
ovr committed Nov 23, 2023
1 parent 7f8d4a4 commit a7a6327
Showing 1 changed file with 35 additions and 14 deletions.
49 changes: 35 additions & 14 deletions packages/cubejs-schema-compiler/src/adapter/PreAggregations.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ export class PreAggregations {
if (foundPreAggregation.preAggregation.type === 'rollupLambda') {
preAggregations = foundPreAggregation.referencedPreAggregations;
}

return preAggregations.map(preAggregation => {
if (this.canPartitionsBeUsed(preAggregation)) {
const { dimension, partitionDimension } = this.partitionDimension(preAggregation);
Expand Down Expand Up @@ -151,17 +152,37 @@ export class PreAggregations {
const queryForSqlEvaluation = this.query.preAggregationQueryForSqlEvaluation(cube, preAggregation);
const partitionInvalidateKeyQueries = queryForSqlEvaluation.partitionInvalidateKeyQueries && queryForSqlEvaluation.partitionInvalidateKeyQueries(cube, preAggregation);

const matchedTimeDimension =
preAggregation.partitionGranularity &&
!this.hasCumulativeMeasures &&
this.query.timeDimensions.find(
td => td.dimension === foundPreAggregation.references.timeDimensions[0].dimension && td.dateRange
);
const filters = preAggregation.partitionGranularity && this.query.filters.filter(
td => td.dimension === foundPreAggregation.references.timeDimensions[0].dimension &&
td.isDateOperator() &&
td.camelizeOperator === 'inDateRange' // TODO support all date operators
);
const matchedTimeDimension = preAggregation.partitionGranularity && !this.hasCumulativeMeasures &&
this.query.timeDimensions.find(td => {
if (td.dimension === foundPreAggregation.references.timeDimensions[0].dimension && td.dateRange) {
return true;
}

const parent = this.query.cubeEvaluator.byPathAnyType(td.expressionPath());
if (parent?.aliasMember === foundPreAggregation.references.timeDimensions[0].dimension && td.dateRange) {
return true;
}

return false;
});

const filters = preAggregation.partitionGranularity && this.query.filters.filter(td => {
// TODO support all date operators
if (td.isDateOperator() && td.camelizeOperator === 'inDateRange') {
if (td.dimension === foundPreAggregation.references.timeDimensions[0].dimension) {
return true;
}

const parent = this.query.cubeEvaluator.byPathAnyType(td.expressionPath());
if (parent?.aliasMember === foundPreAggregation.references.timeDimensions[0].dimension && td.dateRange) {
return true;
}

return false;
}

return false;
});

const uniqueKeyColumnsDefault = () => null;
const uniqueKeyColumns = ({
Expand Down Expand Up @@ -557,15 +578,15 @@ export class PreAggregations {
R.all(m => backAliasMeasures.indexOf(m) !== -1, transformedQuery.leafMeasures)
));
};

/**
* Wrap granularity string into an array.
* @param {string} granularity
* @returns {Array<string>}
*/
const expandGranularity = (granularity) => (
transformedQuery.granularityHierarchies[granularity] ||
[granularity]
[granularity]
);

/**
Expand Down Expand Up @@ -666,7 +687,7 @@ export class PreAggregations {
transformedQuery.leafMeasureAdditive &&
!transformedQuery.hasMultipliedMeasures
? (r) => canUsePreAggregationLeafMeasureAdditive(r) ||
canUsePreAggregationNotAdditive(r)
canUsePreAggregationNotAdditive(r)
: canUsePreAggregationNotAdditive;

if (refs) {
Expand Down

0 comments on commit a7a6327

Please sign in to comment.