3535import org .apache .calcite .sql .SqlLiteral ;
3636import org .apache .calcite .sql .SqlNode ;
3737import org .apache .calcite .sql .SqlNodeList ;
38+ import org .apache .calcite .sql .SqlOrderBy ;
3839import org .apache .calcite .sql .SqlSelect ;
3940import org .apache .calcite .sql .fun .SqlCase ;
4041import org .apache .calcite .sql .parser .SqlParseException ;
@@ -240,11 +241,50 @@ private void replaceFieldName(SqlNode sqlNode, HashBasedTable<String, String, St
240241 }
241242
242243 break ;
244+
245+ case UNION :
246+ SqlNode unionLeft = ((SqlBasicCall ) sqlNode ).getOperands ()[0 ];
247+
248+ SqlNode unionRight = ((SqlBasicCall ) sqlNode ).getOperands ()[1 ];
249+
250+ replaceFieldName (unionLeft , mappingTable , targetTableName , tableAlias );
251+
252+ replaceFieldName (unionRight , mappingTable , targetTableName , tableAlias );
253+
254+ break ;
255+
256+ case ORDER_BY :
257+ SqlOrderBy sqlOrderBy = (SqlOrderBy ) sqlNode ;
258+ replaceFieldName (sqlOrderBy .query , mappingTable , targetTableName , tableAlias );
259+ SqlNodeList orderFiledList = sqlOrderBy .orderList ;
260+ for (int i =0 ;i <orderFiledList .size ();i ++) {
261+ SqlNode replaceNode = replaceOrderByTableName (orderFiledList .get (i ), tableAlias );
262+ orderFiledList .set (i , replaceNode );
263+ }
243264 default :
244265 break ;
245266 }
246267 }
247268
269+ private SqlNode replaceOrderByTableName (SqlNode orderNode , String tableAlias ) {
270+ if (orderNode .getKind () == IDENTIFIER ){
271+ SqlIdentifier sqlIdentifier = (SqlIdentifier ) orderNode ;
272+ if (sqlIdentifier .names .size () == 1 ) {
273+ return orderNode ;
274+ }
275+ return sqlIdentifier .setName (0 , tableAlias );
276+ } else if (orderNode instanceof SqlBasicCall ) {
277+ SqlBasicCall sqlBasicCall = (SqlBasicCall ) orderNode ;
278+ for (int i =0 ; i <sqlBasicCall .getOperandList ().size (); i ++){
279+ SqlNode sqlNode = sqlBasicCall .getOperandList ().get (i );
280+ sqlBasicCall .getOperands ()[i ] = replaceOrderByTableName (sqlNode , tableAlias );
281+ }
282+ return sqlBasicCall ;
283+ } else {
284+ return orderNode ;
285+ }
286+ }
287+
248288 private SqlNode replaceNodeInfo (SqlNode groupNode , HashBasedTable <String , String , String > mappingTable , String tableAlias ){
249289 if (groupNode .getKind () == IDENTIFIER ){
250290 SqlIdentifier sqlIdentifier = (SqlIdentifier ) groupNode ;
@@ -359,7 +399,7 @@ private SqlNode replaceSelectFieldName(SqlNode selectNode, HashBasedTable<String
359399 SqlIdentifier sqlIdentifier = (SqlIdentifier ) selectNode ;
360400
361401 if (sqlIdentifier .names .size () == 1 ){
362- return null ;
402+ return selectNode ;
363403 }
364404
365405 String mappingFieldName = mappingTable .get (sqlIdentifier .getComponent (0 ).getSimple (), sqlIdentifier .getComponent (1 ).getSimple ());
@@ -372,39 +412,33 @@ private SqlNode replaceSelectFieldName(SqlNode selectNode, HashBasedTable<String
372412 return sqlIdentifier ;
373413 }else if (selectNode .getKind () == LITERAL || selectNode .getKind () == LITERAL_CHAIN ){//字面含义
374414 return selectNode ;
375- }else if (selectNode .getKind () == OTHER_FUNCTION
415+ }else if ( AGGREGATE .contains (selectNode .getKind ())
416+ || AVG_AGG_FUNCTIONS .contains (selectNode .getKind ())
417+ || COMPARISON .contains (selectNode .getKind ())
418+ || selectNode .getKind () == OTHER_FUNCTION
376419 || selectNode .getKind () == DIVIDE
377420 || selectNode .getKind () == CAST
378- || selectNode .getKind () == SUM
379- || selectNode .getKind () == AVG
380- || selectNode .getKind () == MAX
381- || selectNode .getKind () == MIN
382421 || selectNode .getKind () == TRIM
383422 || selectNode .getKind () == TIMES
384423 || selectNode .getKind () == PLUS
385- || selectNode .getKind () == IN
424+ || selectNode .getKind () == NOT_IN
386425 || selectNode .getKind () == OR
387426 || selectNode .getKind () == AND
388- || selectNode .getKind () == COUNT
389- || selectNode .getKind () == SUM0
390- || selectNode .getKind () == LEAD
391- || selectNode .getKind () == LAG
392- || selectNode .getKind () == EQUALS
393- || selectNode .getKind () == NOT_EQUALS
394427 || selectNode .getKind () == MINUS
395428 || selectNode .getKind () == TUMBLE
396429 || selectNode .getKind () == TUMBLE_START
397430 || selectNode .getKind () == TUMBLE_END
398431 || selectNode .getKind () == SESSION
399432 || selectNode .getKind () == SESSION_START
400433 || selectNode .getKind () == SESSION_END
434+ || selectNode .getKind () == HOP
435+ || selectNode .getKind () == HOP_START
436+ || selectNode .getKind () == HOP_END
401437 || selectNode .getKind () == BETWEEN
402438 || selectNode .getKind () == IS_NULL
403439 || selectNode .getKind () == IS_NOT_NULL
404- || selectNode .getKind () == LESS_THAN
405- || selectNode .getKind () == GREATER_THAN
406- || selectNode .getKind () == LESS_THAN_OR_EQUAL
407- || selectNode .getKind () == GREATER_THAN_OR_EQUAL
440+ || selectNode .getKind () == CONTAINS
441+
408442 ){
409443 SqlBasicCall sqlBasicCall = (SqlBasicCall ) selectNode ;
410444 for (int i =0 ; i <sqlBasicCall .getOperands ().length ; i ++){
0 commit comments