Skip to content

Commit a0d5fa7

Browse files
committed
[fix-33004][core] fix parser sql error. Example: 'select t.* from viewOne as t' then this sql will be transformed to 'select t.* as * from viewOne as t' which cause sql error.
1 parent 8c8c977 commit a0d5fa7

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

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

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -162,23 +162,32 @@ private static void rebuildSelectNode(SqlNodeList selectList, SqlSelect sqlSelec
162162
SqlNodeList sqlNodes = new SqlNodeList(selectList.getParserPosition());
163163

164164
for (int index = 0; index < selectList.size(); index++) {
165-
if (selectList.get(index).getKind().equals(SqlKind.AS)
166-
|| (selectList.get(index).getClass().equals(SqlIdentifier.class)
167-
&& ((SqlIdentifier) selectList.get(index)).names.size() == 1)) {
168-
sqlNodes.add(selectList.get(index));
165+
SqlNode sqlNode = selectList.get(index);
166+
// 判断sqlNode的类型是否属于 't1.f1 as f2'
167+
boolean isAsNode = sqlNode.getKind().equals(SqlKind.AS);
168+
169+
// 判断sqlNode的结构是否属于'f1' 或者 't.*'
170+
boolean isIdentifierOrStar = sqlNode.getClass().equals(SqlIdentifier.class)
171+
// sqlNode like 'f1'
172+
&& (((SqlIdentifier) sqlNode).names.size() == 1
173+
// sqlNode like 't.*'
174+
|| StringUtils.isBlank(((SqlIdentifier) sqlNode).names.get(1)));
175+
176+
if (isAsNode || isIdentifierOrStar) {
177+
sqlNodes.add(sqlNode);
169178
continue;
170179
}
171180

172-
if (!selectList.get(index).getClass().equals(SqlIdentifier.class)) {
173-
if (selectList.get(index).getKind().equals(SqlKind.LITERAL)) {
181+
if (!sqlNode.getClass().equals(SqlIdentifier.class)) {
182+
if (sqlNode.getKind().equals(SqlKind.LITERAL)) {
174183
throw new IllegalArgumentException(String.format("Constants %s in the SELECT statement must be aliased!",
175-
selectList.get(index).toString()));
184+
sqlNode.toString()));
176185
}
177186
throw new RuntimeException(String.format("Illegal statement! Please check the statement: %s",
178-
selectList.get(index).toString()));
187+
sqlNode.toString()));
179188
}
180189

181-
sqlNodes.add(transformToAsNode(selectList.get(index)));
190+
sqlNodes.add(transformToAsNode(sqlNode));
182191
}
183192
sqlSelect.setSelectList(sqlNodes);
184193
}

0 commit comments

Comments
 (0)