Skip to content

Commit c4de4c5

Browse files
committed
fix(schema-compiler): Fix rolling window queries with expressions from SQP API
1 parent 7b4e4ad commit c4de4c5

File tree

1 file changed

+37
-31
lines changed

1 file changed

+37
-31
lines changed

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

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -945,45 +945,51 @@ export class BaseQuery {
945945
}
946946

947947
runningTotalDateJoinCondition() {
948-
return this.timeDimensions.map(
949-
d => [
950-
d,
951-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
952-
(dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo) => `${dateField} >= ${dimensionDateFrom} AND ${dateField} <= ${dateTo}`
953-
]
954-
);
948+
return this.timeDimensions
949+
// .filter(td => td.granularity)
950+
.map(
951+
d => [
952+
d,
953+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
954+
(dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo) => `${dateField} >= ${dimensionDateFrom} AND ${dateField} <= ${dateTo}`
955+
]
956+
);
955957
}
956958

957959
rollingWindowToDateJoinCondition(granularity) {
958-
return this.timeDimensions.map(
959-
d => [
960-
d,
961-
(dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo, isFromStartToEnd) => `${dateField} >= ${this.timeGroupedColumn(granularity, dateFrom)} AND ${dateField} <= ${dateTo}`
962-
]
963-
);
960+
return this.timeDimensions
961+
.filter(td => td.granularity)
962+
.map(
963+
d => [
964+
d,
965+
(dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo, isFromStartToEnd) => `${dateField} >= ${this.timeGroupedColumn(granularity, dateFrom)} AND ${dateField} <= ${dateTo}`
966+
]
967+
);
964968
}
965969

966970
rollingWindowDateJoinCondition(trailingInterval, leadingInterval, offset) {
967971
offset = offset || 'end';
968-
return this.timeDimensions.map(
969-
d => [d, (dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo, isFromStartToEnd) => {
972+
return this.timeDimensions
973+
.filter(td => td.granularity)
974+
.map(
975+
d => [d, (dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo, isFromStartToEnd) => {
970976
// dateFrom based window
971-
const conditions = [];
972-
if (trailingInterval !== 'unbounded') {
973-
const startDate = isFromStartToEnd || offset === 'start' ? dateFrom : dateTo;
974-
const trailingStart = trailingInterval ? this.subtractInterval(startDate, trailingInterval) : startDate;
975-
const sign = offset === 'start' ? '>=' : '>';
976-
conditions.push(`${dateField} ${sign} ${trailingStart}`);
977-
}
978-
if (leadingInterval !== 'unbounded') {
979-
const endDate = isFromStartToEnd || offset === 'end' ? dateTo : dateFrom;
980-
const leadingEnd = leadingInterval ? this.addInterval(endDate, leadingInterval) : endDate;
981-
const sign = offset === 'end' ? '<=' : '<';
982-
conditions.push(`${dateField} ${sign} ${leadingEnd}`);
983-
}
984-
return conditions.length ? conditions.join(' AND ') : '1 = 1';
985-
}]
986-
);
977+
const conditions = [];
978+
if (trailingInterval !== 'unbounded') {
979+
const startDate = isFromStartToEnd || offset === 'start' ? dateFrom : dateTo;
980+
const trailingStart = trailingInterval ? this.subtractInterval(startDate, trailingInterval) : startDate;
981+
const sign = offset === 'start' ? '>=' : '>';
982+
conditions.push(`${dateField} ${sign} ${trailingStart}`);
983+
}
984+
if (leadingInterval !== 'unbounded') {
985+
const endDate = isFromStartToEnd || offset === 'end' ? dateTo : dateFrom;
986+
const leadingEnd = leadingInterval ? this.addInterval(endDate, leadingInterval) : endDate;
987+
const sign = offset === 'end' ? '<=' : '<';
988+
conditions.push(`${dateField} ${sign} ${leadingEnd}`);
989+
}
990+
return conditions.length ? conditions.join(' AND ') : '1 = 1';
991+
}]
992+
);
987993
}
988994

989995
/**

0 commit comments

Comments
 (0)