[fix](load) Fix InsertStmt prepareExpressions (#8112)

Use queryStmt.getResultExprs() instead of queryStmt.getBaseTblResultExprs() in InsertStmt prepareExpressions func.
This commit is contained in:
Arthur Yang
2022-02-24 23:12:51 +08:00
committed by GitHub
parent a6bc9cbe53
commit 0dcbfbdde0
3 changed files with 35 additions and 2 deletions

View File

@ -667,7 +667,7 @@ public class InsertStmt extends DdlStmt {
}
public void prepareExpressions() throws UserException {
List<Expr> selectList = Expr.cloneList(queryStmt.getBaseTblResultExprs());
List<Expr> selectList = Expr.cloneList(queryStmt.getResultExprs());
// check type compatibility
int numCols = targetColumns.size();
for (int i = 0; i < numCols; ++i) {

View File

@ -56,7 +56,12 @@ public class PlanTreeBuilder {
PlanTreeNode sinkNode = null;
if (sink != null) {
StringBuilder sb = new StringBuilder();
sb.append("[").append(sink.getExchNodeId().asInt()).append(": ").append(sink.getClass().getSimpleName()).append("]");
if (sink.getExchNodeId() != null) {
sb.append("[").append(sink.getExchNodeId().asInt()).append(": ")
.append(sink.getClass().getSimpleName()).append("]");
} else {
sb.append("[").append(sink.getClass().getSimpleName()).append("]");
}
sb.append("\n[Fragment: ").append(fragment.getId().asInt()).append("]");
sb.append("\n").append(sink.getExplainString("", TExplainLevel.BRIEF));
sinkNode = new PlanTreeNode(sink.getExchNodeId(), sb.toString());

View File

@ -433,6 +433,20 @@ public class QueryPlanTest {
"\"replication_num\" = \"1\"" +
");");
createTable("CREATE TABLE test.result_exprs (\n" +
" `aid` int(11) NULL,\n" +
" `bid` int(11) NULL\n" +
") ENGINE=OLAP\n" +
"DUPLICATE KEY(`aid`)\n" +
"COMMENT \"OLAP\"\n" +
"DISTRIBUTED BY HASH(`aid`) BUCKETS 7\n" +
"PROPERTIES (\n" +
"\"replication_num\" = \"1\",\n" +
"\"in_memory\" = \"false\",\n" +
"\"business_key_column_name\" = \"\",\n" +
"\"storage_medium\" = \"HDD\",\n" +
"\"storage_format\" = \"V2\"\n" +
");\n");
}
@AfterClass
@ -2026,4 +2040,18 @@ public class QueryPlanTest {
}
}
@Test
public void testResultExprs() throws Exception {
connectContext.setDatabase("default_cluster:test");
String queryStr = "EXPLAIN INSERT INTO result_exprs\n" +
"SELECT a.aid,\n" +
" b.bid\n" +
"FROM\n" +
" (SELECT 3 AS aid)a\n" +
"RIGHT JOIN\n" +
" (SELECT 4 AS bid)b ON (a.aid=b.bid)\n";
String explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, queryStr);
Assert.assertFalse(explainString.contains("OUTPUT EXPRS:3 | 4"));
Assert.assertTrue(explainString.contains("OUTPUT EXPRS:CAST(`a`.`aid` AS INT) | 4"));
}
}