Skip to content

Commit 82ba01a

Browse files
authored
fix(schema-compiler): Fix ungrouped cumulative queries incorrect sql generation (#8981)
* fix(schema-compiler): Fix ungrouped cumulative queries incorrect sql generation * add tests * Revert "fix(schema-compiler): Fix ungrouped cumulative queries incorrect sql generation" This reverts commit ca365fa. * fix(schema-compiler): Fix ungrouped cumulative queries incorrect sql generation * fix tests: have to add alias, because of too long identifiers
1 parent 3e203e8 commit 82ba01a

File tree

2 files changed

+108
-44
lines changed

2 files changed

+108
-44
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2539,6 +2539,10 @@ export class BaseQuery {
25392539
return evaluateSql === '*' ? '1' : evaluateSql;
25402540
}
25412541
if (this.ungrouped) {
2542+
if ((this.safeEvaluateSymbolContext().ungroupedAliasesForCumulative || {})[measurePath]) {
2543+
evaluateSql = this.safeEvaluateSymbolContext().ungroupedAliasesForCumulative[measurePath];
2544+
}
2545+
25422546
if (symbol.type === 'count' || symbol.type === 'countDistinct' || symbol.type === 'countDistinctApprox') {
25432547
const sql = this.caseWhenStatement([{ sql: `(${evaluateSql}) IS NOT NULL`, label: '1' }]);
25442548
return evaluateSql === '*' ? '1' : sql;

packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts

Lines changed: 104 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ describe('SQL Generation', () => {
296296
\${FILTER_PARAMS.visitor_checkins.created_at.filter('created_at')} AND
297297
\${FILTER_GROUP(FILTER_PARAMS.visitor_checkins.created_at.filter("(created_at - INTERVAL '3 DAY')"), FILTER_PARAMS.visitor_checkins.source.filter('source'))}
298298
\`,
299+
sql_alias: \`vc\`,
299300
300301
rewriteQueries: true,
301302
@@ -568,28 +569,28 @@ describe('SQL Generation', () => {
568569
visitors__created_at_day: '2017-01-02T00:00:00.000Z',
569570
visitors__visitor_revenue: '100',
570571
visitors__visitor_count: '1',
571-
visitor_checkins__visitor_checkins_count: '3',
572+
vc__visitor_checkins_count: '3',
572573
visitors__per_visitor_revenue: '100'
573574
},
574575
{
575576
visitors__created_at_day: '2017-01-04T00:00:00.000Z',
576577
visitors__visitor_revenue: '200',
577578
visitors__visitor_count: '1',
578-
visitor_checkins__visitor_checkins_count: '2',
579+
vc__visitor_checkins_count: '2',
579580
visitors__per_visitor_revenue: '200'
580581
},
581582
{
582583
visitors__created_at_day: '2017-01-05T00:00:00.000Z',
583584
visitors__visitor_revenue: null,
584585
visitors__visitor_count: '1',
585-
visitor_checkins__visitor_checkins_count: '1',
586+
vc__visitor_checkins_count: '1',
586587
visitors__per_visitor_revenue: null
587588
},
588589
{
589590
visitors__created_at_day: '2017-01-06T00:00:00.000Z',
590591
visitors__visitor_revenue: null,
591592
visitors__visitor_count: '2',
592-
visitor_checkins__visitor_checkins_count: '0',
593+
vc__visitor_checkins_count: '0',
593594
visitors__per_visitor_revenue: null
594595
}
595596
]
@@ -627,7 +628,7 @@ describe('SQL Generation', () => {
627628
}, [{
628629
visitors__visitor_revenue: '300',
629630
visitors__visitor_count: '5',
630-
visitor_checkins__visitor_checkins_count: '6',
631+
vc__visitor_checkins_count: '6',
631632
visitors__per_visitor_revenue: '60'
632633
}]));
633634

@@ -748,22 +749,22 @@ describe('SQL Generation', () => {
748749
{
749750
visitors__created_at_day: '2017-01-02T00:00:00.000Z',
750751
visitors__revenue_rolling: null,
751-
visitor_checkins__visitor_checkins_count: '3'
752+
vc__visitor_checkins_count: '3'
752753
},
753754
{
754755
visitors__created_at_day: '2017-01-04T00:00:00.000Z',
755756
visitors__revenue_rolling: '100',
756-
visitor_checkins__visitor_checkins_count: '2'
757+
vc__visitor_checkins_count: '2'
757758
},
758759
{
759760
visitors__created_at_day: '2017-01-05T00:00:00.000Z',
760761
visitors__revenue_rolling: '200',
761-
visitor_checkins__visitor_checkins_count: '1'
762+
vc__visitor_checkins_count: '1'
762763
},
763764
{
764765
visitors__created_at_day: '2017-01-06T00:00:00.000Z',
765766
visitors__revenue_rolling: '500',
766-
visitor_checkins__visitor_checkins_count: '0'
767+
vc__visitor_checkins_count: '0'
767768
}
768769
]));
769770

@@ -979,7 +980,7 @@ describe('SQL Generation', () => {
979980
return dbRunner.testQuery(query.buildSqlAndParams()).then(res => {
980981
console.log(JSON.stringify(res));
981982
expect(res).toEqual(
982-
[{ visitor_checkins__revenue_per_checkin: '50' }]
983+
[{ vc__revenue_per_checkin: '50' }]
983984
);
984985
});
985986
});
@@ -1000,7 +1001,7 @@ describe('SQL Generation', () => {
10001001
return dbRunner.testQuery(query.buildSqlAndParams()).then(res => {
10011002
console.log(JSON.stringify(res));
10021003
expect(res).toEqual(
1003-
[{ visitor_checkins__google_sourced_checkins: '1' }]
1004+
[{ vc__google_sourced_checkins: '1' }]
10041005
);
10051006
});
10061007
});
@@ -1024,7 +1025,7 @@ describe('SQL Generation', () => {
10241025
return dbRunner.testQuery(query.buildSqlAndParams()).then(res => {
10251026
console.log(JSON.stringify(res));
10261027
expect(res).toEqual(
1027-
[{ visitor_checkins__google_sourced_checkins: '1' }]
1028+
[{ vc__google_sourced_checkins: '1' }]
10281029
);
10291030
});
10301031
});
@@ -1435,19 +1436,78 @@ describe('SQL Generation', () => {
14351436
}]
14361437
}, [
14371438
{
1438-
visitor_checkins__cards_count: '0',
1439+
vc__cards_count: '0',
14391440
visitors__visitor_revenue: '300'
14401441
},
14411442
{
1442-
visitor_checkins__cards_count: '1',
1443+
vc__cards_count: '1',
14431444
visitors__visitor_revenue: '100'
14441445
},
14451446
{
1446-
visitor_checkins__cards_count: null,
1447+
vc__cards_count: null,
14471448
visitors__visitor_revenue: null
14481449
}
14491450
]));
14501451

1452+
it('ungrouped cumulative query', async () => {
1453+
await compiler.compile();
1454+
1455+
const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, {
1456+
measures: [
1457+
'visitor_checkins.visitor_checkins_count',
1458+
'visitor_checkins.visitorCheckinsRolling',
1459+
],
1460+
dimensions: [
1461+
'visitor_checkins.id'
1462+
],
1463+
timeDimensions: [{
1464+
dimension: 'visitor_checkins.created_at',
1465+
granularity: 'day',
1466+
dateRange: ['2017-01-01', '2017-01-30']
1467+
}],
1468+
timezone: 'America/Los_Angeles',
1469+
filters: [],
1470+
order: [{
1471+
id: 'visitor_checkins.id'
1472+
}],
1473+
ungrouped: true
1474+
});
1475+
1476+
console.log(query.buildSqlAndParams());
1477+
1478+
return dbRunner.testQuery(query.buildSqlAndParams()).then(res => {
1479+
console.log(JSON.stringify(res));
1480+
expect(res).toEqual(
1481+
[
1482+
{
1483+
vc__id: 3,
1484+
vc__created_at_day: '2017-01-04T00:00:00.000Z',
1485+
vc__visitor_checkins_count: 1,
1486+
vc__visitor_checkins_rolling: 1
1487+
},
1488+
{
1489+
vc__id: 4,
1490+
vc__created_at_day: '2017-01-04T00:00:00.000Z',
1491+
vc__visitor_checkins_count: 1,
1492+
vc__visitor_checkins_rolling: 1
1493+
},
1494+
{
1495+
vc__id: 5,
1496+
vc__created_at_day: '2017-01-04T00:00:00.000Z',
1497+
vc__visitor_checkins_count: 1,
1498+
vc__visitor_checkins_rolling: 1
1499+
},
1500+
{
1501+
vc__id: 6,
1502+
vc__created_at_day: '2017-01-05T00:00:00.000Z',
1503+
vc__visitor_checkins_count: 1,
1504+
vc__visitor_checkins_rolling: 1
1505+
}
1506+
]
1507+
);
1508+
});
1509+
});
1510+
14511511
it('join rollup pre-aggregation', async () => {
14521512
await compiler.compile();
14531513

@@ -1490,7 +1550,7 @@ describe('SQL Generation', () => {
14901550
expect(res).toEqual(
14911551
[
14921552
{
1493-
visitor_checkins__source: 'google',
1553+
vc__source: 'google',
14941554
visitors__created_at_day: '2017-01-02T00:00:00.000Z',
14951555
visitors__per_visitor_revenue: '100'
14961556
}
@@ -1537,7 +1597,7 @@ describe('SQL Generation', () => {
15371597
console.log(JSON.stringify(res));
15381598
expect(res).toEqual(
15391599
[{
1540-
visitor_checkins__source: 'google',
1600+
vc__source: 'google',
15411601
visitors__created_at_day: '2017-01-02T00:00:00.000Z',
15421602
visitors__visitor_revenue: '100'
15431603
}]
@@ -1564,7 +1624,7 @@ describe('SQL Generation', () => {
15641624
return dbRunner.testQuery(query.buildSqlAndParams()).then(res => {
15651625
console.log(JSON.stringify(res));
15661626
expect(res).toEqual(
1567-
[{ visitor_checkins__revenue_per_checkin: '60' }]
1627+
[{ vc__revenue_per_checkin: '60' }]
15681628
);
15691629
});
15701630
});
@@ -1590,7 +1650,7 @@ describe('SQL Generation', () => {
15901650
return dbRunner.testQuery(query.buildSqlAndParams()).then(res => {
15911651
console.log(JSON.stringify(res));
15921652
expect(res).toEqual(
1593-
[{ visitor_checkins__revenue_per_checkin: '50' }]
1653+
[{ vc__revenue_per_checkin: '50' }]
15941654
);
15951655
});
15961656
});
@@ -1635,12 +1695,12 @@ describe('SQL Generation', () => {
16351695
ungrouped: true,
16361696
allowUngroupedWithoutPrimaryKey: true,
16371697
}, [
1638-
{ visitor_checkins__created_at_day: '2017-01-02T00:00:00.000Z', visitor_checkins__google_sourced_checkins: null },
1639-
{ visitor_checkins__created_at_day: '2017-01-03T00:00:00.000Z', visitor_checkins__google_sourced_checkins: null },
1640-
{ visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__google_sourced_checkins: null },
1641-
{ visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__google_sourced_checkins: null },
1642-
{ visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__google_sourced_checkins: null },
1643-
{ visitor_checkins__created_at_day: '2017-01-05T00:00:00.000Z', visitor_checkins__google_sourced_checkins: 1 },
1698+
{ vc__created_at_day: '2017-01-02T00:00:00.000Z', vc__google_sourced_checkins: null },
1699+
{ vc__created_at_day: '2017-01-03T00:00:00.000Z', vc__google_sourced_checkins: null },
1700+
{ vc__created_at_day: '2017-01-04T00:00:00.000Z', vc__google_sourced_checkins: null },
1701+
{ vc__created_at_day: '2017-01-04T00:00:00.000Z', vc__google_sourced_checkins: null },
1702+
{ vc__created_at_day: '2017-01-04T00:00:00.000Z', vc__google_sourced_checkins: null },
1703+
{ vc__created_at_day: '2017-01-05T00:00:00.000Z', vc__google_sourced_checkins: 1 },
16441704
]));
16451705

16461706
it('ungrouped filtered distinct count', () => runQueryTest({
@@ -1659,12 +1719,12 @@ describe('SQL Generation', () => {
16591719
ungrouped: true,
16601720
allowUngroupedWithoutPrimaryKey: true,
16611721
}, [
1662-
{ visitor_checkins__created_at_day: '2017-01-02T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: null },
1663-
{ visitor_checkins__created_at_day: '2017-01-03T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: null },
1664-
{ visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: null },
1665-
{ visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: null },
1666-
{ visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: null },
1667-
{ visitor_checkins__created_at_day: '2017-01-05T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: 1 },
1722+
{ vc__created_at_day: '2017-01-02T00:00:00.000Z', vc__unique_google_sourced_checkins: null },
1723+
{ vc__created_at_day: '2017-01-03T00:00:00.000Z', vc__unique_google_sourced_checkins: null },
1724+
{ vc__created_at_day: '2017-01-04T00:00:00.000Z', vc__unique_google_sourced_checkins: null },
1725+
{ vc__created_at_day: '2017-01-04T00:00:00.000Z', vc__unique_google_sourced_checkins: null },
1726+
{ vc__created_at_day: '2017-01-04T00:00:00.000Z', vc__unique_google_sourced_checkins: null },
1727+
{ vc__created_at_day: '2017-01-05T00:00:00.000Z', vc__unique_google_sourced_checkins: 1 },
16681728
]));
16691729

16701730
it('ungrouped ratio measure', () => runQueryTest({
@@ -1683,12 +1743,12 @@ describe('SQL Generation', () => {
16831743
ungrouped: true,
16841744
allowUngroupedWithoutPrimaryKey: true,
16851745
}, [
1686-
{ visitor_checkins__created_at_day: '2017-01-02T00:00:00.000Z', visitor_checkins__unique_sources_per_checking: 1 },
1687-
{ visitor_checkins__created_at_day: '2017-01-03T00:00:00.000Z', visitor_checkins__unique_sources_per_checking: 1 },
1688-
{ visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__unique_sources_per_checking: 1 },
1689-
{ visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__unique_sources_per_checking: 1 },
1690-
{ visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__unique_sources_per_checking: 1 },
1691-
{ visitor_checkins__created_at_day: '2017-01-05T00:00:00.000Z', visitor_checkins__unique_sources_per_checking: 1 },
1746+
{ vc__created_at_day: '2017-01-02T00:00:00.000Z', vc__unique_sources_per_checking: 1 },
1747+
{ vc__created_at_day: '2017-01-03T00:00:00.000Z', vc__unique_sources_per_checking: 1 },
1748+
{ vc__created_at_day: '2017-01-04T00:00:00.000Z', vc__unique_sources_per_checking: 1 },
1749+
{ vc__created_at_day: '2017-01-04T00:00:00.000Z', vc__unique_sources_per_checking: 1 },
1750+
{ vc__created_at_day: '2017-01-04T00:00:00.000Z', vc__unique_sources_per_checking: 1 },
1751+
{ vc__created_at_day: '2017-01-05T00:00:00.000Z', vc__unique_sources_per_checking: 1 },
16921752
]));
16931753

16941754
it('builds geo dimension', () => runQueryTest({
@@ -2116,7 +2176,7 @@ describe('SQL Generation', () => {
21162176
}],
21172177
order: []
21182178
}, [
2119-
{ visitor_checkins__visitor_checkins_count: '4' }
2179+
{ vc__visitor_checkins_count: '4' }
21202180
])
21212181
);
21222182

@@ -2150,7 +2210,7 @@ describe('SQL Generation', () => {
21502210
}],
21512211
order: []
21522212
}, [
2153-
{ visitor_checkins__visitor_checkins_count: '4' }
2213+
{ vc__visitor_checkins_count: '4' }
21542214
])
21552215
);
21562216

@@ -2168,7 +2228,7 @@ describe('SQL Generation', () => {
21682228
}],
21692229
order: []
21702230
}, [
2171-
{ visitor_checkins__visitor_checkins_count: '4' }
2231+
{ vc__visitor_checkins_count: '4' }
21722232
])
21732233
);
21742234

@@ -2204,7 +2264,7 @@ describe('SQL Generation', () => {
22042264
}],
22052265
order: []
22062266
}, [
2207-
{ visitor_checkins__visitor_checkins_count: '1' }
2267+
{ vc__visitor_checkins_count: '1' }
22082268
])
22092269
);
22102270

@@ -2244,7 +2304,7 @@ describe('SQL Generation', () => {
22442304
}],
22452305
order: []
22462306
}, [
2247-
{ visitor_checkins__visitor_checkins_count: '1' }
2307+
{ vc__visitor_checkins_count: '1' }
22482308
])
22492309
);
22502310

@@ -2711,11 +2771,11 @@ describe('SQL Generation', () => {
27112771
[{
27122772
visitors__percentage_of_total: 9,
27132773
visitors__revenue: '100',
2714-
visitor_checkins__source: 'google'
2774+
vc__source: 'google'
27152775
}, {
27162776
visitors__percentage_of_total: 91,
27172777
visitors__revenue: '1000',
2718-
visitor_checkins__source: null
2778+
vc__source: null
27192779
}]
27202780
));
27212781

0 commit comments

Comments
 (0)