|
80 | 80 | import static org.apache.calcite.sql.SqlKind.OTHER; |
81 | 81 | import static org.apache.calcite.sql.SqlKind.OTHER_FUNCTION; |
82 | 82 | import static org.apache.calcite.sql.SqlKind.PLUS; |
| 83 | +import static org.apache.calcite.sql.SqlKind.POSITION; |
83 | 84 | import static org.apache.calcite.sql.SqlKind.SELECT; |
84 | 85 | import static org.apache.calcite.sql.SqlKind.SESSION; |
85 | 86 | import static org.apache.calcite.sql.SqlKind.SESSION_END; |
@@ -162,37 +163,7 @@ public static void extractSelectFieldToFieldInfo(SqlNode fieldNode, String fromN |
162 | 163 | } |
163 | 164 | } |
164 | 165 | } |
165 | | - } else if (AGGREGATE.contains(fieldNode.getKind()) |
166 | | - || AVG_AGG_FUNCTIONS.contains(fieldNode.getKind()) |
167 | | - || COMPARISON.contains(fieldNode.getKind()) |
168 | | - || fieldNode.getKind() == OTHER_FUNCTION |
169 | | - || fieldNode.getKind() == DIVIDE |
170 | | - || fieldNode.getKind() == CAST |
171 | | - || fieldNode.getKind() == TRIM |
172 | | - || fieldNode.getKind() == TIMES |
173 | | - || fieldNode.getKind() == PLUS |
174 | | - || fieldNode.getKind() == NOT_IN |
175 | | - || fieldNode.getKind() == OR |
176 | | - || fieldNode.getKind() == AND |
177 | | - || fieldNode.getKind() == MINUS |
178 | | - || fieldNode.getKind() == TUMBLE |
179 | | - || fieldNode.getKind() == TUMBLE_START |
180 | | - || fieldNode.getKind() == TUMBLE_END |
181 | | - || fieldNode.getKind() == SESSION |
182 | | - || fieldNode.getKind() == SESSION_START |
183 | | - || fieldNode.getKind() == SESSION_END |
184 | | - || fieldNode.getKind() == HOP |
185 | | - || fieldNode.getKind() == HOP_START |
186 | | - || fieldNode.getKind() == HOP_END |
187 | | - || fieldNode.getKind() == BETWEEN |
188 | | - || fieldNode.getKind() == IS_NULL |
189 | | - || fieldNode.getKind() == IS_NOT_NULL |
190 | | - || fieldNode.getKind() == CONTAINS |
191 | | - || fieldNode.getKind() == TIMESTAMP_ADD |
192 | | - || fieldNode.getKind() == TIMESTAMP_DIFF |
193 | | - || fieldNode.getKind() == LIKE |
194 | | - || fieldNode.getKind() == COALESCE |
195 | | - ) { |
| 166 | + } else if (isCommonExpression(fieldNode)) { |
196 | 167 | SqlBasicCall sqlBasicCall = (SqlBasicCall) fieldNode; |
197 | 168 | for (int i = 0; i < sqlBasicCall.getOperands().length; i++) { |
198 | 169 | SqlNode sqlNode = sqlBasicCall.getOperands()[i]; |
@@ -368,38 +339,7 @@ public static void replaceSelectFieldTable(SqlNode selectNode, |
368 | 339 |
|
369 | 340 | }else if(selectNode.getKind() == LITERAL || selectNode.getKind() == LITERAL_CHAIN){//字面含义 |
370 | 341 | return; |
371 | | - }else if( AGGREGATE.contains(selectNode.getKind()) |
372 | | - || AVG_AGG_FUNCTIONS.contains(selectNode.getKind()) |
373 | | - || COMPARISON.contains(selectNode.getKind()) |
374 | | - || selectNode.getKind() == OTHER_FUNCTION |
375 | | - || selectNode.getKind() == DIVIDE |
376 | | - || selectNode.getKind() == CAST |
377 | | - || selectNode.getKind() == TRIM |
378 | | - || selectNode.getKind() == TIMES |
379 | | - || selectNode.getKind() == PLUS |
380 | | - || selectNode.getKind() == NOT_IN |
381 | | - || selectNode.getKind() == OR |
382 | | - || selectNode.getKind() == AND |
383 | | - || selectNode.getKind() == MINUS |
384 | | - || selectNode.getKind() == TUMBLE |
385 | | - || selectNode.getKind() == TUMBLE_START |
386 | | - || selectNode.getKind() == TUMBLE_END |
387 | | - || selectNode.getKind() == SESSION |
388 | | - || selectNode.getKind() == SESSION_START |
389 | | - || selectNode.getKind() == SESSION_END |
390 | | - || selectNode.getKind() == HOP |
391 | | - || selectNode.getKind() == HOP_START |
392 | | - || selectNode.getKind() == HOP_END |
393 | | - || selectNode.getKind() == BETWEEN |
394 | | - || selectNode.getKind() == IS_NULL |
395 | | - || selectNode.getKind() == IS_NOT_NULL |
396 | | - || selectNode.getKind() == CONTAINS |
397 | | - || selectNode.getKind() == TIMESTAMP_ADD |
398 | | - || selectNode.getKind() == TIMESTAMP_DIFF |
399 | | - || selectNode.getKind() == LIKE |
400 | | - || selectNode.getKind() == COALESCE |
401 | | - |
402 | | - ){ |
| 342 | + } else if (isCommonExpression(selectNode)) { |
403 | 343 | SqlBasicCall sqlBasicCall = (SqlBasicCall) selectNode; |
404 | 344 | for(int i=0; i<sqlBasicCall.getOperands().length; i++){ |
405 | 345 | SqlNode sqlNode = sqlBasicCall.getOperands()[i]; |
@@ -465,38 +405,7 @@ public static void replaceJoinFieldRefTableName(SqlNode condition, Map<String, S |
465 | 405 | return; |
466 | 406 | } |
467 | 407 | SqlKind joinKind = condition.getKind(); |
468 | | - if( AGGREGATE.contains(joinKind) |
469 | | - || AVG_AGG_FUNCTIONS.contains(joinKind) |
470 | | - || COMPARISON.contains(joinKind) |
471 | | - || joinKind == OTHER_FUNCTION |
472 | | - || joinKind == DIVIDE |
473 | | - || joinKind == CAST |
474 | | - || joinKind == TRIM |
475 | | - || joinKind == TIMES |
476 | | - || joinKind == PLUS |
477 | | - || joinKind == NOT_IN |
478 | | - || joinKind == OR |
479 | | - || joinKind == AND |
480 | | - || joinKind == MINUS |
481 | | - || joinKind == TUMBLE |
482 | | - || joinKind == TUMBLE_START |
483 | | - || joinKind == TUMBLE_END |
484 | | - || joinKind == SESSION |
485 | | - || joinKind == SESSION_START |
486 | | - || joinKind == SESSION_END |
487 | | - || joinKind == HOP |
488 | | - || joinKind == HOP_START |
489 | | - || joinKind == HOP_END |
490 | | - || joinKind == BETWEEN |
491 | | - || joinKind == IS_NULL |
492 | | - || joinKind == IS_NOT_NULL |
493 | | - || joinKind == CONTAINS |
494 | | - || joinKind == TIMESTAMP_ADD |
495 | | - || joinKind == TIMESTAMP_DIFF |
496 | | - || joinKind == LIKE |
497 | | - || joinKind == COALESCE |
498 | | - || joinKind == EQUALS ){ |
499 | | - |
| 408 | + if(isCommonExpression(condition) || joinKind == EQUALS) { |
500 | 409 | SqlBasicCall sqlBasicCall = (SqlBasicCall) condition; |
501 | 410 | for(int i=0; i<sqlBasicCall.getOperands().length; i++){ |
502 | 411 | SqlNode sqlNode = sqlBasicCall.getOperands()[i]; |
@@ -602,38 +511,7 @@ private static void replaceConditionNode(SqlNode selectNode, String oldTbName, S |
602 | 511 | return; |
603 | 512 | }else if(selectNode.getKind() == LITERAL || selectNode.getKind() == LITERAL_CHAIN){//字面含义 |
604 | 513 | return; |
605 | | - }else if( AGGREGATE.contains(selectNode.getKind()) |
606 | | - || AVG_AGG_FUNCTIONS.contains(selectNode.getKind()) |
607 | | - || COMPARISON.contains(selectNode.getKind()) |
608 | | - || selectNode.getKind() == OTHER_FUNCTION |
609 | | - || selectNode.getKind() == DIVIDE |
610 | | - || selectNode.getKind() == CAST |
611 | | - || selectNode.getKind() == TRIM |
612 | | - || selectNode.getKind() == TIMES |
613 | | - || selectNode.getKind() == PLUS |
614 | | - || selectNode.getKind() == NOT_IN |
615 | | - || selectNode.getKind() == OR |
616 | | - || selectNode.getKind() == AND |
617 | | - || selectNode.getKind() == MINUS |
618 | | - || selectNode.getKind() == TUMBLE |
619 | | - || selectNode.getKind() == TUMBLE_START |
620 | | - || selectNode.getKind() == TUMBLE_END |
621 | | - || selectNode.getKind() == SESSION |
622 | | - || selectNode.getKind() == SESSION_START |
623 | | - || selectNode.getKind() == SESSION_END |
624 | | - || selectNode.getKind() == HOP |
625 | | - || selectNode.getKind() == HOP_START |
626 | | - || selectNode.getKind() == HOP_END |
627 | | - || selectNode.getKind() == BETWEEN |
628 | | - || selectNode.getKind() == IS_NULL |
629 | | - || selectNode.getKind() == IS_NOT_NULL |
630 | | - || selectNode.getKind() == CONTAINS |
631 | | - || selectNode.getKind() == TIMESTAMP_ADD |
632 | | - || selectNode.getKind() == TIMESTAMP_DIFF |
633 | | - || selectNode.getKind() == LIKE |
634 | | - || selectNode.getKind() == COALESCE |
635 | | - |
636 | | - ){ |
| 514 | + } else if (isCommonExpression(selectNode)) { |
637 | 515 | SqlBasicCall sqlBasicCall = (SqlBasicCall) selectNode; |
638 | 516 | for(int i=0; i<sqlBasicCall.getOperands().length; i++){ |
639 | 517 | SqlNode sqlNode = sqlBasicCall.getOperands()[i]; |
@@ -676,38 +554,7 @@ public static void getConditionRefTable(SqlNode selectNode, Set<String> fieldInf |
676 | 554 | return; |
677 | 555 | } else if (selectNode.getKind() == LITERAL || selectNode.getKind() == LITERAL_CHAIN) {//字面含义 |
678 | 556 | return; |
679 | | - } else if (AGGREGATE.contains(selectNode.getKind()) |
680 | | - || AVG_AGG_FUNCTIONS.contains(selectNode.getKind()) |
681 | | - || COMPARISON.contains(selectNode.getKind()) |
682 | | - || selectNode.getKind() == OTHER_FUNCTION |
683 | | - || selectNode.getKind() == DIVIDE |
684 | | - || selectNode.getKind() == CAST |
685 | | - || selectNode.getKind() == TRIM |
686 | | - || selectNode.getKind() == TIMES |
687 | | - || selectNode.getKind() == PLUS |
688 | | - || selectNode.getKind() == NOT_IN |
689 | | - || selectNode.getKind() == OR |
690 | | - || selectNode.getKind() == AND |
691 | | - || selectNode.getKind() == MINUS |
692 | | - || selectNode.getKind() == TUMBLE |
693 | | - || selectNode.getKind() == TUMBLE_START |
694 | | - || selectNode.getKind() == TUMBLE_END |
695 | | - || selectNode.getKind() == SESSION |
696 | | - || selectNode.getKind() == SESSION_START |
697 | | - || selectNode.getKind() == SESSION_END |
698 | | - || selectNode.getKind() == HOP |
699 | | - || selectNode.getKind() == HOP_START |
700 | | - || selectNode.getKind() == HOP_END |
701 | | - || selectNode.getKind() == BETWEEN |
702 | | - || selectNode.getKind() == IS_NULL |
703 | | - || selectNode.getKind() == IS_NOT_NULL |
704 | | - || selectNode.getKind() == CONTAINS |
705 | | - || selectNode.getKind() == TIMESTAMP_ADD |
706 | | - || selectNode.getKind() == TIMESTAMP_DIFF |
707 | | - || selectNode.getKind() == LIKE |
708 | | - || selectNode.getKind() == COALESCE |
709 | | - |
710 | | - ) { |
| 557 | + } else if (isCommonExpression(selectNode) || selectNode.getKind() == POSITION) { |
711 | 558 | SqlBasicCall sqlBasicCall = (SqlBasicCall) selectNode; |
712 | 559 | for (int i = 0; i < sqlBasicCall.getOperands().length; i++) { |
713 | 560 | SqlNode sqlNode = sqlBasicCall.getOperands()[i]; |
@@ -942,4 +789,37 @@ public static boolean checkIsTimeGroupByFunction(String functionName ){ |
942 | 789 | || functionName.equalsIgnoreCase("session") |
943 | 790 | || functionName.equalsIgnoreCase("hop"); |
944 | 791 | } |
| 792 | + |
| 793 | + private static boolean isCommonExpression(SqlNode sqlNode) { |
| 794 | + return AGGREGATE.contains(sqlNode.getKind()) |
| 795 | + || AVG_AGG_FUNCTIONS.contains(sqlNode.getKind()) |
| 796 | + || COMPARISON.contains(sqlNode.getKind()) |
| 797 | + || sqlNode.getKind() == OTHER_FUNCTION |
| 798 | + || sqlNode.getKind() == DIVIDE |
| 799 | + || sqlNode.getKind() == CAST |
| 800 | + || sqlNode.getKind() == TRIM |
| 801 | + || sqlNode.getKind() == TIMES |
| 802 | + || sqlNode.getKind() == PLUS |
| 803 | + || sqlNode.getKind() == NOT_IN |
| 804 | + || sqlNode.getKind() == OR |
| 805 | + || sqlNode.getKind() == AND |
| 806 | + || sqlNode.getKind() == MINUS |
| 807 | + || sqlNode.getKind() == TUMBLE |
| 808 | + || sqlNode.getKind() == TUMBLE_START |
| 809 | + || sqlNode.getKind() == TUMBLE_END |
| 810 | + || sqlNode.getKind() == SESSION |
| 811 | + || sqlNode.getKind() == SESSION_START |
| 812 | + || sqlNode.getKind() == SESSION_END |
| 813 | + || sqlNode.getKind() == HOP |
| 814 | + || sqlNode.getKind() == HOP_START |
| 815 | + || sqlNode.getKind() == HOP_END |
| 816 | + || sqlNode.getKind() == BETWEEN |
| 817 | + || sqlNode.getKind() == IS_NULL |
| 818 | + || sqlNode.getKind() == IS_NOT_NULL |
| 819 | + || sqlNode.getKind() == CONTAINS |
| 820 | + || sqlNode.getKind() == TIMESTAMP_ADD |
| 821 | + || sqlNode.getKind() == TIMESTAMP_DIFF |
| 822 | + || sqlNode.getKind() == LIKE |
| 823 | + || sqlNode.getKind() == COALESCE; |
| 824 | + } |
945 | 825 | } |
0 commit comments