1+ import { getEnv } from '@cubejs-backend/shared' ;
12import { prepareJsCompiler } from '../../unit/PrepareCompiler' ;
23import { dbRunner } from './PostgresDBRunner' ;
34import { transformResultsForTesseractIfNeeded } from '../../unit/utils' ;
4- import { getEnv } from '@cubejs-backend/shared' ;
55
66describe ( 'Views Join Order using join maps' , ( ) => {
77 jest . setTimeout ( 200000 ) ;
@@ -14,7 +14,7 @@ view(\`View\`, {
1414 cubes: [
1515 {
1616 join_path: A,
17- includes: ['id', 'name', 'd_name'],
17+ includes: ['id', 'name', 'c_name', ' d_name'],
1818 prefix: true,
1919 },
2020 {
@@ -88,7 +88,9 @@ cube('B', {
8888
8989cube('C', {
9090 sql: \`
91- SELECT 3 id, 2 as fk, 1 as fk_a, 'c'::text as "name"\`,
91+ SELECT 3 id, 2 as fk, 2 as fk_a, 'c1'::text as "name"
92+ UNION ALL
93+ SELECT 4 id, 3 as fk, 1 as fk_a, 'c2'::text as "name"\`,
9294 joins: {
9395 D: {
9496 relationship: \`many_to_one\`,
@@ -159,4 +161,71 @@ cube('D', {
159161 expect ( sql ) . not . toMatch ( / O N " a " .i d = " d " .f k / ) ;
160162 } ) ;
161163 }
164+
165+ if ( getEnv ( 'nativeSqlPlanner' ) ) {
166+ it ( 'querying A member proxied to non-leaf C' , ( ) => {
167+ // TODO: Fix in tesseract
168+ } ) ;
169+ } else {
170+ it ( 'querying A member proxied to non-leaf C' , async ( ) => {
171+ const [ sql , _params ] = await dbRunner . runQueryTest ( {
172+ dimensions : [
173+ 'View.A_id' ,
174+ 'View.A_name' ,
175+ 'View.A_c_name' ,
176+ ] ,
177+ timeDimensions : [ ] ,
178+ segments : [ ] ,
179+ filters : [ ] ,
180+ total : true ,
181+ } , transformResultsForTesseractIfNeeded ( [ {
182+ view___a_id : 1 ,
183+ view___a_name : 'a' ,
184+ view___a_c_name : 'c1' ,
185+ } ] ) , { compiler, joinGraph, cubeEvaluator } ) ;
186+
187+ expect ( sql ) . toMatch ( / A S " b " / ) ;
188+ expect ( sql ) . toMatch ( / A S " c " / ) ;
189+ expect ( sql ) . toMatch ( / O N " a " .i d = " b " .f k / ) ;
190+ expect ( sql ) . toMatch ( / O N " b " .i d = " c " .f k / ) ;
191+ expect ( sql ) . not . toMatch ( / O N " c " .i d = " d " .f k _ d / ) ;
192+ expect ( sql ) . not . toMatch ( / A S " d " / ) ;
193+ expect ( sql ) . not . toMatch ( / O N " a " .i d = " c " .f k _ a / ) ;
194+ } ) ;
195+ }
196+
197+ if ( getEnv ( 'nativeSqlPlanner' ) ) {
198+ it ( 'querying A member proxied to non-leaf C' , ( ) => {
199+ // TODO: Fix in tesseract
200+ } ) ;
201+ } else {
202+ it ( 'querying A member proxied to non-leaf C' , async ( ) => {
203+ const [ sql , _params ] = await dbRunner . runQueryTest ( {
204+ dimensions : [
205+ 'View.A_id' ,
206+ 'View.A_name' ,
207+ 'View.A_c_name' ,
208+ 'View.A_d_name' ,
209+ ] ,
210+ timeDimensions : [ ] ,
211+ segments : [ ] ,
212+ filters : [ ] ,
213+ total : true ,
214+ } , transformResultsForTesseractIfNeeded ( [ {
215+ view___a_id : 1 ,
216+ view___a_name : 'a' ,
217+ view___a_c_name : 'c1' ,
218+ view___a_d_name : 'd3' ,
219+ } ] ) , { compiler, joinGraph, cubeEvaluator } ) ;
220+
221+ expect ( sql ) . toMatch ( / A S " b " / ) ;
222+ expect ( sql ) . toMatch ( / A S " c " / ) ;
223+ expect ( sql ) . toMatch ( / A S " d " / ) ;
224+ expect ( sql ) . toMatch ( / O N " a " .i d = " b " .f k / ) ;
225+ expect ( sql ) . toMatch ( / O N " b " .i d = " c " .f k / ) ;
226+ expect ( sql ) . toMatch ( / O N " c " .i d = " d " .f k _ d / ) ;
227+ expect ( sql ) . not . toMatch ( / O N " a " .i d = " c " .f k _ a / ) ;
228+ expect ( sql ) . not . toMatch ( / O N " a " .i d = " d " .f k / ) ;
229+ } ) ;
230+ }
162231} ) ;
0 commit comments