@@ -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