fix leading with cte and same subqueryalias name Example: with tbl1 as select t1.c1 from t1 select tbl2.c2 from (select / * + leading(t2 tbl1) * / tbl1.c1, t2.c2 from tbl1 join t2) as tbl2 join t3; Reason: in this case, before getting analyzed preprocess would change subquery tbl2 to cte plan, and this cte plan should be in upper level cte plan, but not in logical result sink plan
This commit is contained in:
@ -79,6 +79,15 @@ public class PullUpSubqueryAliasToCTE extends PlanPreprocessor {
|
||||
subQueryAlias = new LogicalSubQueryAlias<>(subQueryAlias.getAlias(), newSubQueryAlias);
|
||||
}
|
||||
}
|
||||
return visitChildren(this, logicalCTE, context);
|
||||
Plan cte = visitChildren(this, logicalCTE, context);
|
||||
if (!aliasQueries.isEmpty()) {
|
||||
LogicalCTE newLogicalCTE = (LogicalCTE) cte;
|
||||
List<LogicalSubQueryAlias<Plan>> subQueryAliasesOfCte = new ArrayList<>();
|
||||
subQueryAliasesOfCte.addAll(logicalCTE.getAliasQueries());
|
||||
subQueryAliasesOfCte.addAll(aliasQueries);
|
||||
aliasQueries = new ArrayList<>();
|
||||
return new LogicalCTE<>(subQueryAliasesOfCte, (LogicalPlan) newLogicalCTE.child());
|
||||
}
|
||||
return cte;
|
||||
}
|
||||
}
|
||||
|
||||
@ -254,7 +254,7 @@ PhysicalResultSink
|
||||
----------------PhysicalOlapScan[t1]
|
||||
|
||||
Hint log:
|
||||
Used: leading(t2 t1 ) leading(t2 t1 ) leading(t2 t1 ) leading(t3 alias1 cte )
|
||||
Used: leading(t2 t1 ) leading(t2 t1 ) leading(t3 alias1 cte )
|
||||
UnUsed:
|
||||
SyntaxError:
|
||||
|
||||
|
||||
1000
regression-test/data/nereids_p0/hint/t5.csv
Normal file
1000
regression-test/data/nereids_p0/hint/t5.csv
Normal file
File diff suppressed because it is too large
Load Diff
1000
regression-test/data/nereids_p0/hint/t6.csv
Normal file
1000
regression-test/data/nereids_p0/hint/t6.csv
Normal file
File diff suppressed because it is too large
Load Diff
@ -79,6 +79,24 @@ suite("fix_leading") {
|
||||
time 10000
|
||||
}
|
||||
|
||||
streamLoad {
|
||||
table "t5"
|
||||
db "fix_leading"
|
||||
set 'column_separator', '|'
|
||||
set 'format', 'csv'
|
||||
file 't5.csv'
|
||||
time 10000
|
||||
}
|
||||
|
||||
streamLoad {
|
||||
table "t6"
|
||||
db "fix_leading"
|
||||
set 'column_separator', '|'
|
||||
set 'format', 'csv'
|
||||
file 't6.csv'
|
||||
time 10000
|
||||
}
|
||||
|
||||
// bug fix 1: {t1 t2}{t3 t4} miss levels
|
||||
qt_select1 """explain shape plan select /*+ leading({t1 t2}{t3 t4}) */ * from t1 join t2 on c2 = c2 join t3 on c1 = c3 join t4 on c1 = c4;"""
|
||||
|
||||
@ -222,4 +240,31 @@ suite("fix_leading") {
|
||||
5;"""
|
||||
contains("Used: leading({ tbl2 tbl3 } tbl1 )")
|
||||
}
|
||||
|
||||
// check cte as input in alias leading query
|
||||
explain {
|
||||
sql """shape plan WITH tbl1 AS (
|
||||
SELECT
|
||||
tbl1.c1 AS c111,
|
||||
tbl2.c2 as c222
|
||||
FROM
|
||||
t1 AS tbl1
|
||||
RIGHT JOIN t2 AS tbl2 ON tbl1.c1 = tbl2.c2
|
||||
)
|
||||
SELECT
|
||||
tbl3.c3,
|
||||
tbl2.c2
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
/*+ leading( tbl2 tbl1 ) */
|
||||
tbl1.c111 AS c1,
|
||||
tbl2.c2 AS c2
|
||||
FROM
|
||||
t2 AS tbl2
|
||||
JOIN tbl1 ON tbl2.c2 = tbl1.c111
|
||||
) AS tbl2
|
||||
RIGHT JOIN t3 AS tbl3 ON tbl2.c2 = tbl3.c3;"""
|
||||
contains("Used: leading(tbl2 tbl1 )")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user