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 567d2ca commit b73a914
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());

Check warning on line 161 in packages/cubejs-schema-compiler/src/adapter/PreAggregations.js

View check run for this annotation

Codecov / codecov/patch

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

Added line #L161 was not covered by tests
if (parent?.aliasMember === foundPreAggregation.references.timeDimensions[0].dimension && td.dateRange) {
return true;

Check warning on line 163 in packages/cubejs-schema-compiler/src/adapter/PreAggregations.js

View check run for this annotation

Codecov / codecov/patch

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

Added line #L163 was not covered by tests
}

return false;

Check warning on line 166 in packages/cubejs-schema-compiler/src/adapter/PreAggregations.js

View check run for this annotation

Codecov / codecov/patch

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

Added line #L166 was not covered by tests
});

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;

Check warning on line 173 in packages/cubejs-schema-compiler/src/adapter/PreAggregations.js

View check run for this annotation

Codecov / codecov/patch

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

Added line #L173 was not covered by tests
}

const parent = this.query.cubeEvaluator.byPathAnyType(td.expressionPath());

Check warning on line 176 in packages/cubejs-schema-compiler/src/adapter/PreAggregations.js

View check run for this annotation

Codecov / codecov/patch

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

Added line #L176 was not covered by tests
if (parent?.aliasMember === foundPreAggregation.references.timeDimensions[0].dimension && td.dateRange) {
return true;

Check warning on line 178 in packages/cubejs-schema-compiler/src/adapter/PreAggregations.js

View check run for this annotation

Codecov / codecov/patch

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

Added line #L178 was not covered by tests
}

return false;

Check warning on line 181 in packages/cubejs-schema-compiler/src/adapter/PreAggregations.js

View check run for this annotation

Codecov / codecov/patch

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

Added line #L181 was not covered by tests
}

return false;

Check warning on line 184 in packages/cubejs-schema-compiler/src/adapter/PreAggregations.js

View check run for this annotation

Codecov / codecov/patch

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

Added line #L184 was not covered by tests
});

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]

Check warning on line 589 in packages/cubejs-schema-compiler/src/adapter/PreAggregations.js

View check run for this annotation

Codecov / codecov/patch

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

Added line #L589 was not covered by tests
);

/**
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 b73a914

Please sign in to comment.