Skip to content

Commit e33be90

Browse files
committed
more tests
1 parent 48e0c64 commit e33be90

File tree

1 file changed

+197
-0
lines changed

1 file changed

+197
-0
lines changed

packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations.test.ts

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -789,6 +789,142 @@ describe('PreAggregations', () => {
789789
}
790790
});
791791
792+
cube('cube_a', {
793+
sql: \`SELECT 1 as id, 'dim_a' as dim_a\`,
794+
795+
joins: {
796+
cube_b: {
797+
relationship: 'many_to_one',
798+
sql: \`\${CUBE.dim_a} = \${cube_b.dim_a}\`
799+
},
800+
cube_c: {
801+
relationship: 'many_to_one',
802+
sql: \`\${CUBE.dim_a} = \${cube_c.dim_a}\`
803+
}
804+
},
805+
806+
dimensions: {
807+
id: {
808+
sql: 'id',
809+
type: 'string',
810+
primary_key: true
811+
},
812+
813+
dim_a: {
814+
sql: 'dim_a',
815+
type: 'string'
816+
},
817+
818+
dim_b: {
819+
sql: 'dim_b',
820+
type: 'string'
821+
},
822+
},
823+
824+
pre_aggregations: {
825+
aaa_rollup: {
826+
dimensions: [
827+
dim_a
828+
]
829+
},
830+
rollupJoinAB: {
831+
type: 'rollupJoin',
832+
dimensions: [
833+
dim_a,
834+
cube_b.dim_b,
835+
cube_c.dim_c
836+
],
837+
rollups: [
838+
aaa_rollup,
839+
cube_b.bbb_rollup
840+
]
841+
}
842+
}
843+
});
844+
845+
cube('cube_b', {
846+
sql: \`SELECT 2 as id, 'dim_a' as dim_a, 'dim_b' as dim_b\`,
847+
848+
joins: {
849+
cube_c: {
850+
relationship: 'many_to_one',
851+
sql: \`\${CUBE.dim_b} = \${cube_c.dim_b}\`
852+
}
853+
},
854+
855+
dimensions: {
856+
id: {
857+
sql: 'id',
858+
type: 'string',
859+
primary_key: true
860+
},
861+
862+
dim_a: {
863+
sql: 'dim_a',
864+
type: 'string'
865+
},
866+
867+
dim_b: {
868+
sql: 'dim_b',
869+
type: 'string'
870+
},
871+
},
872+
873+
pre_aggregations: {
874+
bbb_rollup: {
875+
dimensions: [
876+
dim_a,
877+
dim_b,
878+
cube_c.dim_c
879+
]
880+
}
881+
}
882+
});
883+
884+
cube('cube_c', {
885+
sql: \`SELECT 3 as id, 'dim_a' as dim_a, 'dim_b' as dim_b, 'dim_c' as dim_c\`,
886+
887+
dimensions: {
888+
id: {
889+
sql: 'id',
890+
type: 'string',
891+
primary_key: true
892+
},
893+
894+
dim_a: {
895+
sql: 'dim_a',
896+
type: 'string'
897+
},
898+
899+
dim_b: {
900+
sql: 'dim_b',
901+
type: 'string'
902+
},
903+
904+
dim_c: {
905+
sql: 'dim_c',
906+
type: 'string'
907+
},
908+
}
909+
});
910+
911+
view('view_abc', {
912+
cubes: [
913+
{
914+
join_path: cube_a,
915+
includes: ['dim_a']
916+
},
917+
{
918+
join_path: cube_a.cube_b,
919+
includes: ['dim_b']
920+
},
921+
{
922+
join_path: cube_a.cube_b.cube_c,
923+
includes: ['dim_c']
924+
}
925+
]
926+
});
927+
792928
`);
793929

794930
it('simple pre-aggregation', async () => {
@@ -3030,4 +3166,65 @@ describe('PreAggregations', () => {
30303166
);
30313167
});
30323168
});
3169+
3170+
it('rollupJoin pre-aggregation with nested joins via view (A->B->C)', async () => {
3171+
await compiler.compile();
3172+
3173+
const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, {
3174+
dimensions: ['view_abc.dim_a', 'view_abc.dim_b', 'view_abc.dim_c'],
3175+
timezone: 'America/Los_Angeles',
3176+
preAggregationsSchema: ''
3177+
});
3178+
3179+
const queryAndParams = query.buildSqlAndParams();
3180+
console.log(queryAndParams);
3181+
const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription();
3182+
console.log(preAggregationsDescription);
3183+
expect(preAggregationsDescription.length).toBe(2);
3184+
const aaa = preAggregationsDescription.find(p => p.preAggregationId === 'cube_a.aaa_rollup');
3185+
const bbb = preAggregationsDescription.find(p => p.preAggregationId === 'cube_b.bbb_rollup');
3186+
expect(aaa).toBeDefined();
3187+
expect(bbb).toBeDefined();
3188+
3189+
expect(query.preAggregations?.preAggregationForQuery?.canUsePreAggregation).toEqual(true);
3190+
expect(query.preAggregations?.preAggregationForQuery?.preAggregationName).toEqual('rollupJoinAB');
3191+
3192+
return dbRunner.evaluateQueryWithPreAggregations(query).then(res => {
3193+
expect(res).toEqual(
3194+
[{
3195+
view_abc__dim_a: 'dim_a',
3196+
view_abc__dim_b: 'dim_b',
3197+
view_abc__dim_c: 'dim_c',
3198+
}]
3199+
);
3200+
});
3201+
});
3202+
3203+
it('rollupJoin pre-aggregation with nested joins via cube (A->B->C)', async () => {
3204+
await compiler.compile();
3205+
3206+
const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, {
3207+
dimensions: ['cube_a.dim_a', 'cube_b.dim_b', 'cube_c.dim_c'],
3208+
timezone: 'America/Los_Angeles',
3209+
preAggregationsSchema: ''
3210+
});
3211+
3212+
const queryAndParams = query.buildSqlAndParams();
3213+
console.log(queryAndParams);
3214+
const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription();
3215+
console.log(preAggregationsDescription);
3216+
expect(preAggregationsDescription.length).toBe(0);
3217+
3218+
expect(query.preAggregations?.preAggregationForQuery).toBeUndefined();
3219+
3220+
return dbRunner.evaluateQueryWithPreAggregations(query).then(res => {
3221+
expect(res).toEqual(
3222+
[{
3223+
cube_a__dim_a: 'dim_a',
3224+
cube_b__dim_b: 'dim_b',
3225+
cube_c__dim_c: 'dim_c',
3226+
}]
3227+
);
3228+
});
3229+
});
30333230
});

0 commit comments

Comments
 (0)