Skip to content

Commit 9bcb730

Browse files
author
gituser
committed
Merge branch '1.10_release_4.0.x' into 1.10_release_4.1.x
2 parents 6e770cf + e586537 commit 9bcb730

File tree

1 file changed

+39
-159
lines changed

1 file changed

+39
-159
lines changed

core/src/main/java/com/dtstack/flink/sql/util/TableUtils.java

Lines changed: 39 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
import static org.apache.calcite.sql.SqlKind.OTHER;
8181
import static org.apache.calcite.sql.SqlKind.OTHER_FUNCTION;
8282
import static org.apache.calcite.sql.SqlKind.PLUS;
83+
import static org.apache.calcite.sql.SqlKind.POSITION;
8384
import static org.apache.calcite.sql.SqlKind.SELECT;
8485
import static org.apache.calcite.sql.SqlKind.SESSION;
8586
import static org.apache.calcite.sql.SqlKind.SESSION_END;
@@ -162,37 +163,7 @@ public static void extractSelectFieldToFieldInfo(SqlNode fieldNode, String fromN
162163
}
163164
}
164165
}
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)) {
196167
SqlBasicCall sqlBasicCall = (SqlBasicCall) fieldNode;
197168
for (int i = 0; i < sqlBasicCall.getOperands().length; i++) {
198169
SqlNode sqlNode = sqlBasicCall.getOperands()[i];
@@ -368,38 +339,7 @@ public static void replaceSelectFieldTable(SqlNode selectNode,
368339

369340
}else if(selectNode.getKind() == LITERAL || selectNode.getKind() == LITERAL_CHAIN){//字面含义
370341
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)) {
403343
SqlBasicCall sqlBasicCall = (SqlBasicCall) selectNode;
404344
for(int i=0; i<sqlBasicCall.getOperands().length; i++){
405345
SqlNode sqlNode = sqlBasicCall.getOperands()[i];
@@ -465,38 +405,7 @@ public static void replaceJoinFieldRefTableName(SqlNode condition, Map<String, S
465405
return;
466406
}
467407
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) {
500409
SqlBasicCall sqlBasicCall = (SqlBasicCall) condition;
501410
for(int i=0; i<sqlBasicCall.getOperands().length; i++){
502411
SqlNode sqlNode = sqlBasicCall.getOperands()[i];
@@ -602,38 +511,7 @@ private static void replaceConditionNode(SqlNode selectNode, String oldTbName, S
602511
return;
603512
}else if(selectNode.getKind() == LITERAL || selectNode.getKind() == LITERAL_CHAIN){//字面含义
604513
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)) {
637515
SqlBasicCall sqlBasicCall = (SqlBasicCall) selectNode;
638516
for(int i=0; i<sqlBasicCall.getOperands().length; i++){
639517
SqlNode sqlNode = sqlBasicCall.getOperands()[i];
@@ -676,38 +554,7 @@ public static void getConditionRefTable(SqlNode selectNode, Set<String> fieldInf
676554
return;
677555
} else if (selectNode.getKind() == LITERAL || selectNode.getKind() == LITERAL_CHAIN) {//字面含义
678556
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) {
711558
SqlBasicCall sqlBasicCall = (SqlBasicCall) selectNode;
712559
for (int i = 0; i < sqlBasicCall.getOperands().length; i++) {
713560
SqlNode sqlNode = sqlBasicCall.getOperands()[i];
@@ -942,4 +789,37 @@ public static boolean checkIsTimeGroupByFunction(String functionName ){
942789
|| functionName.equalsIgnoreCase("session")
943790
|| functionName.equalsIgnoreCase("hop");
944791
}
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+
}
945825
}

0 commit comments

Comments
 (0)