Skip to content

Commit d73cd4c

Browse files
committed
fix for redshift
1 parent 5bba670 commit d73cd4c

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -958,8 +958,7 @@ export class BaseQuery {
958958
.map(
959959
d => [
960960
d,
961-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
962-
(dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo) => `${dateField} >= ${dimensionDateFrom} AND ${dateField} <= ${dateTo}`
961+
(_dateFrom, dateTo, dateField, dimensionDateFrom, _dimensionDateTo) => `${dateField} >= ${dimensionDateFrom} AND ${dateField} <= ${this.timeStampCast(dateTo)}`
963962
]
964963
);
965964
}
@@ -970,7 +969,7 @@ export class BaseQuery {
970969
.map(
971970
d => [
972971
d,
973-
(dateFrom, dateTo, dateField, dimensionDateFrom, dimensionDateTo, isFromStartToEnd) => `${dateField} >= ${this.timeGroupedColumn(granularity, dateFrom)} AND ${dateField} <= ${dateTo}`
972+
(dateFrom, dateTo, dateField, _dimensionDateFrom, _dimensionDateTo, _isFromStartToEnd) => `${dateField} >= ${this.timeGroupedColumn(granularity, dateFrom)} AND ${dateField} <= ${this.timeStampCast(dateTo)}`
974973
]
975974
);
976975
}
@@ -987,13 +986,13 @@ export class BaseQuery {
987986
const startDate = isFromStartToEnd || offset === 'start' ? dateFrom : dateTo;
988987
const trailingStart = trailingInterval ? this.subtractInterval(startDate, trailingInterval) : startDate;
989988
const sign = offset === 'start' ? '>=' : '>';
990-
conditions.push(`${dateField} ${sign} ${trailingStart}`);
989+
conditions.push(`${dateField} ${sign} ${this.timeStampCast(trailingStart)}`);
991990
}
992991
if (leadingInterval !== 'unbounded') {
993992
const endDate = isFromStartToEnd || offset === 'end' ? dateTo : dateFrom;
994993
const leadingEnd = leadingInterval ? this.addInterval(endDate, leadingInterval) : endDate;
995994
const sign = offset === 'end' ? '<=' : '<';
996-
conditions.push(`${dateField} ${sign} ${leadingEnd}`);
995+
conditions.push(`${dateField} ${sign} ${this.timeStampCast(leadingEnd)}`);
997996
}
998997
return conditions.length ? conditions.join(' AND ') : '1 = 1';
999998
}]
@@ -1807,8 +1806,11 @@ export class BaseQuery {
18071806
// but some dialects (like BigQuery) require strict date types and can not automatically convert
18081807
// between date and timestamp for comparisons, at the same time, time dimensions are expected to be
18091808
// timestamps, so we need to align types for join conditions/comparisons.
1810-
this.timeStampCast(`${d.dateSeriesAliasName()}.${this.escapeColumnName('date_from')}`),
1811-
this.timeStampCast(`${d.dateSeriesAliasName()}.${this.escapeColumnName('date_to')}`),
1809+
// But we can't do it here, as it would break interval maths used in some types of
1810+
// rolling window join conditions in some dialects (like Redshift), so we need to
1811+
// do casts granularly in rolling window join conditions functions.
1812+
`${d.dateSeriesAliasName()}.${this.escapeColumnName('date_from')}`,
1813+
`${d.dateSeriesAliasName()}.${this.escapeColumnName('date_to')}`,
18121814
`${baseQueryAlias}.${d.aliasName()}`,
18131815
`'${d.dateFromFormatted()}'`,
18141816
`'${d.dateToFormatted()}'`

0 commit comments

Comments
 (0)