[Fix](Planner) fix create view tosql not include partition (#22482)

Problem:
When create view with join in table partitions, an error would rise like "Unknown column"

Example:
CREATE VIEW my_view AS SELECT t1.* FROM t1 PARTITION(p1) JOIN t2 PARTITION(p2) ON t1.k1 = t2.k1;
select * from my_view ==> errCode = 2, detailMessage = Unknown column 'k1' in 't2'

Reason:
When create view, we do tosql first in order to persistent view sql. And when doing tosql of table reference, partition key
word was removed to keep neat of sql string. But here when we remove partition keyword it would regarded as an alias.
So "PARTITION" keyword can not be removed.

Solved:
Add “PARTITION” keyword back to tosql string.
This commit is contained in:
LiBinfeng
2023-08-02 20:04:59 +08:00
committed by GitHub
parent 4d9f4c7a68
commit 8cac8df40c
2 changed files with 49 additions and 7 deletions

View File

@ -249,13 +249,6 @@ public class TableRef implements ParseNode, Writable {
output.append("[").append(Joiner.on(", ").join(joinHints)).append("] ");
}
output.append(tableRefToSql()).append(" ");
if (partitionNames != null) {
StringJoiner sj = new StringJoiner(",", "", " ");
for (String partName : partitionNames.getPartitionNames()) {
sj.add(partName);
}
output.append(sj.toString());
}
if (usingColNames != null) {
output.append("USING (").append(Joiner.on(", ").join(usingColNames)).append(")");
} else if (onClause != null) {
@ -781,6 +774,13 @@ public class TableRef implements ParseNode, Writable {
tblName += " " + viewRef.toSql();
}
}
if (partitionNames != null) {
StringJoiner sj = new StringJoiner(",", "", " ");
for (String partName : partitionNames.getPartitionNames()) {
sj.add(partName);
}
return tblName + " PARTITION(" + sj.toString() + ")";
}
return tblName;
}