@@ -489,4 +489,35 @@ def test_join_one_integration(self):
489489 )
490490 plan = plan_query (query , integrations = ['int' ], default_namespace = 'int' )
491491
492- assert plan .steps == expected_plan .steps
492+ assert plan .steps == expected_plan .steps
493+
494+ def test_cte (self ):
495+ query = parse_sql ('''
496+ with t1 as (
497+ select * from int1.tbl1
498+ )
499+ select t1.id, t2.* from t1
500+ join int2.tbl2 t2 on t1.id>t2.id
501+ ''' )
502+
503+ subquery = copy .deepcopy (query )
504+ subquery .from_table = None
505+
506+ plan = plan_query (query , integrations = ['int1' , 'int2' ], default_namespace = 'mindsdb' )
507+
508+ expected_plan = QueryPlan (
509+ steps = [
510+ FetchDataframeStep (integration = 'int1' , query = parse_sql ('select * from tbl1' )),
511+ SubSelectStep (dataframe = Result (0 ), query = Select (targets = [Star ()]), table_name = 't1' ),
512+ FetchDataframeStep (integration = 'int2' , query = parse_sql ('select * from tbl2 as t2' )),
513+ JoinStep (left = Result (1 ),
514+ right = Result (2 ),
515+ query = Join (left = Identifier ('tab1' ),
516+ right = Identifier ('tab2' ),
517+ condition = BinaryOperation (op = '>' , args = [Identifier ('t1.id' ), Identifier ('t2.id' )]),
518+ join_type = JoinType .JOIN )),
519+ QueryStep (parse_sql ('SELECT t1.`id`, t2.*' ), from_table = Result (3 )),
520+ ]
521+ )
522+
523+ assert plan .steps == expected_plan .steps
0 commit comments