|
35 | 35 | import org.apache.calcite.sql.SqlLiteral; |
36 | 36 | import org.apache.calcite.sql.SqlNode; |
37 | 37 | import org.apache.calcite.sql.SqlNodeList; |
| 38 | +import org.apache.calcite.sql.SqlOrderBy; |
38 | 39 | import org.apache.calcite.sql.SqlSelect; |
39 | 40 | import org.apache.calcite.sql.fun.SqlCase; |
40 | 41 | import org.apache.calcite.sql.parser.SqlParseException; |
@@ -244,11 +245,39 @@ private void replaceFieldName(SqlNode sqlNode, HashBasedTable<String, String, St |
244 | 245 | replaceFieldName(unionRight, mappingTable, targetTableName, tableAlias); |
245 | 246 |
|
246 | 247 | break; |
| 248 | + |
| 249 | + case ORDER_BY: |
| 250 | + SqlOrderBy sqlOrderBy = (SqlOrderBy) sqlNode; |
| 251 | + replaceFieldName(sqlOrderBy.query, mappingTable, targetTableName, tableAlias); |
| 252 | + SqlNodeList orderFiledList = sqlOrderBy.orderList; |
| 253 | + for (int i=0 ;i<orderFiledList.size();i++) { |
| 254 | + SqlNode replaceNode = replaceOrderByTableName(orderFiledList.get(i), tableAlias); |
| 255 | + orderFiledList.set(i, replaceNode); |
| 256 | + } |
247 | 257 | default: |
248 | 258 | break; |
249 | 259 | } |
250 | 260 | } |
251 | 261 |
|
| 262 | + private SqlNode replaceOrderByTableName(SqlNode orderNode, String tableAlias) { |
| 263 | + if(orderNode.getKind() == IDENTIFIER){ |
| 264 | + SqlIdentifier sqlIdentifier = (SqlIdentifier) orderNode; |
| 265 | + if (sqlIdentifier.names.size() == 1) { |
| 266 | + return orderNode; |
| 267 | + } |
| 268 | + return sqlIdentifier.setName(0, tableAlias); |
| 269 | + } else if (orderNode instanceof SqlBasicCall) { |
| 270 | + SqlBasicCall sqlBasicCall = (SqlBasicCall) orderNode; |
| 271 | + for(int i=0; i<sqlBasicCall.getOperandList().size(); i++){ |
| 272 | + SqlNode sqlNode = sqlBasicCall.getOperandList().get(i); |
| 273 | + sqlBasicCall.getOperands()[i] = replaceOrderByTableName(sqlNode , tableAlias); |
| 274 | + } |
| 275 | + return sqlBasicCall; |
| 276 | + } else { |
| 277 | + return orderNode; |
| 278 | + } |
| 279 | + } |
| 280 | + |
252 | 281 | private SqlNode replaceNodeInfo(SqlNode groupNode, HashBasedTable<String, String, String> mappingTable, String tableAlias){ |
253 | 282 | if(groupNode.getKind() == IDENTIFIER){ |
254 | 283 | SqlIdentifier sqlIdentifier = (SqlIdentifier) groupNode; |
|
0 commit comments