Skip to content

Commit ca8d08d

Browse files
author
dapeng
committed
修复case when 中没有解析else字段
1 parent 38b9b38 commit ca8d08d

File tree

3 files changed

+11
-1
lines changed

3 files changed

+11
-1
lines changed

core/src/main/java/com/dtstack/flink/sql/side/JoinNodeDealer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,6 @@ public Set<String> extractField(SqlNode sqlNode,
233233
Set<String> fieldFromJoinCondition = extractSelectFieldFromJoinCondition(joinFieldSet, fromTableNameSet, tableRef);
234234

235235
Set<String> extractGroupByField = extractFieldFromGroupByList(parentGroupByList, fromTableNameSet, tableRef);
236-
237236
extractSelectField.addAll(extractCondition);
238237
extractSelectField.addAll(fieldFromJoinCondition);
239238
extractSelectField.addAll(extractGroupByField);
@@ -575,6 +574,7 @@ private void extractSelectField(SqlNode selectNode,
575574
|| selectNode.getKind() == TIMESTAMP_ADD
576575
|| selectNode.getKind() == TIMESTAMP_DIFF
577576
|| selectNode.getKind() == LIKE
577+
|| selectNode.getKind() == COALESCE
578578

579579
){
580580
SqlBasicCall sqlBasicCall = (SqlBasicCall) selectNode;

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@ private static SqlNode replaceNodeInfo(SqlNode groupNode,
160160
SqlNode replaceNode = replaceSelectFieldName(sqlNode, oldTbName, newTbName, mappingField);
161161
sqlCase.getThenOperands().set(i,replaceNode);
162162
}
163+
if(sqlCase.getElseOperand() != null){
164+
SqlNode replaceNode = replaceSelectFieldName(sqlCase.getElseOperand(), oldTbName, newTbName, mappingField);
165+
sqlCase.setOperand(3, replaceNode);
166+
}
163167
return sqlCase;
164168
} else {
165169
return groupNode;

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ public static void extractSelectFieldToFieldInfo(SqlNode fieldNode, String fromN
151151
|| fieldNode.getKind() == TIMESTAMP_ADD
152152
|| fieldNode.getKind() == TIMESTAMP_DIFF
153153
|| fieldNode.getKind() == LIKE
154+
|| fieldNode.getKind() == COALESCE
154155
) {
155156
SqlBasicCall sqlBasicCall = (SqlBasicCall) fieldNode;
156157
for (int i = 0; i < sqlBasicCall.getOperands().length; i++) {
@@ -363,6 +364,7 @@ public static void replaceSelectFieldTable(SqlNode selectNode,
363364
|| selectNode.getKind() == TIMESTAMP_ADD
364365
|| selectNode.getKind() == TIMESTAMP_DIFF
365366
|| selectNode.getKind() == LIKE
367+
|| selectNode.getKind() == COALESCE
366368

367369
){
368370
SqlBasicCall sqlBasicCall = (SqlBasicCall) selectNode;
@@ -548,6 +550,7 @@ private static void replaceConditionNode(SqlNode selectNode, String oldTbName, S
548550
|| selectNode.getKind() == TIMESTAMP_ADD
549551
|| selectNode.getKind() == TIMESTAMP_DIFF
550552
|| selectNode.getKind() == LIKE
553+
|| selectNode.getKind() == COALESCE
551554

552555
){
553556
SqlBasicCall sqlBasicCall = (SqlBasicCall) selectNode;
@@ -573,6 +576,7 @@ private static void replaceConditionNode(SqlNode selectNode, String oldTbName, S
573576

574577
sqlCase.getWhenOperands().getList().forEach(sqlNode -> replaceConditionNode(sqlNode, oldTbName, newTbName, fieldReplaceRef));
575578
sqlCase.getThenOperands().getList().forEach(sqlNode -> replaceConditionNode(sqlNode, oldTbName, newTbName, fieldReplaceRef));
579+
replaceConditionNode(sqlCase.getElseOperand(), oldTbName, newTbName, fieldReplaceRef);
576580
} else {
577581
throw new RuntimeException(String.format("not support node kind of %s to replace name now.", selectNode.getKind()));
578582
}
@@ -620,6 +624,7 @@ public static void getConditionRefTable(SqlNode selectNode, Set<String> fieldInf
620624
|| selectNode.getKind() == TIMESTAMP_ADD
621625
|| selectNode.getKind() == TIMESTAMP_DIFF
622626
|| selectNode.getKind() == LIKE
627+
|| selectNode.getKind() == COALESCE
623628

624629
) {
625630
SqlBasicCall sqlBasicCall = (SqlBasicCall) selectNode;
@@ -645,6 +650,7 @@ public static void getConditionRefTable(SqlNode selectNode, Set<String> fieldInf
645650

646651
sqlCase.getWhenOperands().getList().forEach(sqlNode -> getConditionRefTable(sqlNode, fieldInfos));
647652
sqlCase.getThenOperands().getList().forEach(sqlNode -> getConditionRefTable(sqlNode, fieldInfos));
653+
getConditionRefTable(sqlCase.getElseOperand(), fieldInfos);
648654
} else {
649655
throw new RuntimeException(String.format("not support node kind of %s to replace name now.", selectNode.getKind()));
650656
}

0 commit comments

Comments
 (0)