From 382eeab850ad90078c115aa893a3dfd8f746dabf Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Tue, 9 Sep 2025 15:35:15 +0300 Subject: [PATCH] fix(schema-compiler): Fix multifact joined queries in Tesseract --- .../src/adapter/BaseQuery.js | 4 +- .../src/adapter/PreAggregations.ts | 2 +- .../postgres/multi-fact-join.test.ts | 44 ++++++++----------- 3 files changed, 22 insertions(+), 28 deletions(-) diff --git a/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js b/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js index 0993ab0221183..5f9498340b4ae 100644 --- a/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js +++ b/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js @@ -5062,7 +5062,7 @@ export class BaseQuery { return false; } - return dfs(root) ? path.join('.') : null; + return (root && dfs(root)) ? path.join('.') : null; }; } @@ -5080,7 +5080,7 @@ export class BaseQuery { const [cube, field] = member.split('.'); if (!cube || !field) return member; - if (cube === queryJoinRoot.root) { + if (cube === queryJoinRoot?.root) { return member; } diff --git a/packages/cubejs-schema-compiler/src/adapter/PreAggregations.ts b/packages/cubejs-schema-compiler/src/adapter/PreAggregations.ts index 280ed8c2a0059..8681d67c1be8b 100644 --- a/packages/cubejs-schema-compiler/src/adapter/PreAggregations.ts +++ b/packages/cubejs-schema-compiler/src/adapter/PreAggregations.ts @@ -144,7 +144,7 @@ export class PreAggregations { const { join } = this.query; if (!join) { // This can happen with Tesseract, or when there's no cubes to join - throw new Error('Unexpected missing join tree for query'); + return []; } return join.joins.map(j => j.originalTo).concat([join.root]); } diff --git a/packages/cubejs-schema-compiler/test/integration/postgres/multi-fact-join.test.ts b/packages/cubejs-schema-compiler/test/integration/postgres/multi-fact-join.test.ts index d687e383b514e..a2eac754d94b2 100644 --- a/packages/cubejs-schema-compiler/test/integration/postgres/multi-fact-join.test.ts +++ b/packages/cubejs-schema-compiler/test/integration/postgres/multi-fact-join.test.ts @@ -112,29 +112,23 @@ cube(\`city\`, { ); } - if (getEnv('nativeSqlPlanner')) { - it.skip('FIXME(tesseract): two regular sub-queries', () => { - // TODO: Fix in tesseract - }); - } else { - it('two regular sub-queries', async () => runQueryTest({ - measures: ['orders.amount', 'shipments.count'], - dimensions: [ - 'city.name' - ], - order: [{ id: 'city.name' }] - }, [{ - city__name: 'New York City', - orders__amount: '9', - shipments__count: '3', - }, { - city__name: 'San Francisco', - orders__amount: '6', - shipments__count: '1', - }, { - city__name: null, - orders__amount: '6', - shipments__count: '1', - }])); - } + it('two regular sub-queries', async () => runQueryTest({ + measures: ['orders.amount', 'shipments.count'], + dimensions: [ + 'city.name' + ], + order: [{ id: 'city.name' }] + }, [{ + city__name: 'New York City', + orders__amount: '9', + shipments__count: '3', + }, { + city__name: 'San Francisco', + orders__amount: '6', + shipments__count: '1', + }, { + city__name: null, + orders__amount: '6', + shipments__count: '1', + }])); });