|
37 | 37 | import org.apache.calcite.sql.SqlNode; |
38 | 38 | import org.apache.calcite.sql.SqlNodeList; |
39 | 39 | import org.apache.calcite.sql.SqlOperator; |
| 40 | +import org.apache.calcite.sql.SqlOrderBy; |
40 | 41 | import org.apache.calcite.sql.SqlSelect; |
41 | 42 | import org.apache.calcite.sql.fun.SqlCase; |
42 | 43 | import org.apache.calcite.sql.parser.SqlParseException; |
@@ -317,11 +318,39 @@ private void replaceFieldName(SqlNode sqlNode, HashBasedTable<String, String, St |
317 | 318 | replaceFieldName(unionRight, mappingTable, targetTableName, tableAlias); |
318 | 319 |
|
319 | 320 | break; |
| 321 | + case ORDER_BY: |
| 322 | + SqlOrderBy sqlOrderBy = (SqlOrderBy) sqlNode; |
| 323 | + replaceFieldName(sqlOrderBy.query, mappingTable, targetTableName, tableAlias); |
| 324 | + SqlNodeList orderFiledList = sqlOrderBy.orderList; |
| 325 | + for (int i=0 ;i<orderFiledList.size();i++) { |
| 326 | + SqlNode replaceNode = replaceOrderByTableName(orderFiledList.get(i), tableAlias); |
| 327 | + orderFiledList.set(i, replaceNode); |
| 328 | + } |
| 329 | + |
320 | 330 | default: |
321 | 331 | break; |
322 | 332 | } |
323 | 333 | } |
324 | 334 |
|
| 335 | + private SqlNode replaceOrderByTableName(SqlNode orderNode, String tableAlias) { |
| 336 | + if(orderNode.getKind() == IDENTIFIER){ |
| 337 | + SqlIdentifier sqlIdentifier = (SqlIdentifier) orderNode; |
| 338 | + if (sqlIdentifier.names.size() == 1) { |
| 339 | + return orderNode; |
| 340 | + } |
| 341 | + return sqlIdentifier.setName(0, tableAlias); |
| 342 | + } else if (orderNode instanceof SqlBasicCall) { |
| 343 | + SqlBasicCall sqlBasicCall = (SqlBasicCall) orderNode; |
| 344 | + for(int i=0; i<sqlBasicCall.getOperandList().size(); i++){ |
| 345 | + SqlNode sqlNode = sqlBasicCall.getOperandList().get(i); |
| 346 | + sqlBasicCall.getOperands()[i] = replaceOrderByTableName(sqlNode , tableAlias); |
| 347 | + } |
| 348 | + return sqlBasicCall; |
| 349 | + } else { |
| 350 | + return orderNode; |
| 351 | + } |
| 352 | + } |
| 353 | + |
325 | 354 | private SqlNode replaceNodeInfo(SqlNode groupNode, HashBasedTable<String, String, String> mappingTable, String tableAlias){ |
326 | 355 | if(groupNode.getKind() == IDENTIFIER){ |
327 | 356 | SqlIdentifier sqlIdentifier = (SqlIdentifier) groupNode; |
|
0 commit comments