Skip to content

Commit 83e919a

Browse files
committed
解决join相同字段异常
1 parent 6cc48f9 commit 83e919a

File tree

1 file changed

+30
-11
lines changed

1 file changed

+30
-11
lines changed

core/src/main/java/com/dtstack/flink/sql/parser/InsertSqlParser.java

+30-11
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,10 @@
2121
package com.dtstack.flink.sql.parser;
2222

2323
import org.apache.calcite.config.Lex;
24-
import org.apache.calcite.sql.SqlBasicCall;
25-
import org.apache.calcite.sql.SqlInsert;
26-
import org.apache.calcite.sql.SqlJoin;
27-
import org.apache.calcite.sql.SqlKind;
28-
import org.apache.calcite.sql.SqlMatchRecognize;
29-
import org.apache.calcite.sql.SqlNode;
30-
import org.apache.calcite.sql.SqlOrderBy;
31-
import org.apache.calcite.sql.SqlSelect;
24+
import org.apache.calcite.sql.*;
3225
import org.apache.calcite.sql.parser.SqlParseException;
3326
import org.apache.calcite.sql.parser.SqlParser;
27+
import org.apache.calcite.sql.parser.SqlParserPos;
3428
import org.apache.commons.lang3.StringUtils;
3529
import com.google.common.collect.Lists;
3630
import org.apache.flink.table.calcite.FlinkPlannerImpl;
@@ -81,10 +75,21 @@ private static void parseNode(SqlNode sqlNode, SqlParseResult sqlParseResult){
8175
parseNode(sqlSource, sqlParseResult);
8276
break;
8377
case SELECT:
84-
SqlNode sqlFrom = ((SqlSelect)sqlNode).getFrom();
85-
if(sqlFrom.getKind() == IDENTIFIER){
78+
SqlSelect sqlSelect = (SqlSelect) sqlNode;
79+
SqlNodeList selectList = sqlSelect.getSelectList();
80+
SqlNodeList sqlNodes = new SqlNodeList(selectList.getParserPosition());
81+
for (int index = 0; index < selectList.size(); index++) {
82+
if (selectList.get(index).getKind().equals(SqlKind.AS)) {
83+
sqlNodes.add(selectList.get(index));
84+
continue;
85+
}
86+
sqlNodes.add(transformToSqlBasicCall(selectList.get(index)));
87+
}
88+
sqlSelect.setSelectList(sqlNodes);
89+
SqlNode sqlFrom = ((SqlSelect) sqlNode).getFrom();
90+
if (sqlFrom.getKind() == IDENTIFIER) {
8691
sqlParseResult.addSourceTable(sqlFrom.toString());
87-
}else{
92+
} else {
8893
parseNode(sqlFrom, sqlParseResult);
8994
}
9095
break;
@@ -141,6 +146,20 @@ private static void parseNode(SqlNode sqlNode, SqlParseResult sqlParseResult){
141146
}
142147
}
143148

149+
// 将 sqlNode 转换为 SqlBasicCall
150+
public static SqlBasicCall transformToSqlBasicCall(SqlNode sqlNode) {
151+
String asName = "";
152+
SqlParserPos pos = new SqlParserPos(sqlNode.getParserPosition().getLineNum(),
153+
sqlNode.getParserPosition().getEndColumnNum());
154+
if (sqlNode.getKind().equals(SqlKind.IDENTIFIER)) {
155+
asName = ((SqlIdentifier) sqlNode).names.get(1);
156+
}
157+
SqlNode[] operands = new SqlNode[2];
158+
operands[0] = sqlNode;
159+
operands[1] = new SqlIdentifier(asName, null, pos);
160+
return new SqlBasicCall(new SqlAsOperator(), operands, pos);
161+
}
162+
144163
public static class SqlParseResult {
145164

146165
private List<String> sourceTableList = Lists.newArrayList();

0 commit comments

Comments
 (0)