@@ -568,7 +568,12 @@ private static void replaceConditionNode(SqlNode selectNode, String oldTbName, S
568568 }else if (selectNode .getKind () == OTHER ){
569569 //不处理
570570 return ;
571- }else {
571+ } else if (selectNode .getKind () == CASE ) {
572+ SqlCase sqlCase = (SqlCase ) selectNode ;
573+
574+ sqlCase .getWhenOperands ().getList ().forEach (sqlNode -> replaceConditionNode (sqlNode , oldTbName , newTbName , fieldReplaceRef ));
575+ sqlCase .getThenOperands ().getList ().forEach (sqlNode -> replaceConditionNode (sqlNode , oldTbName , newTbName , fieldReplaceRef ));
576+ } else {
572577 throw new RuntimeException (String .format ("not support node kind of %s to replace name now." , selectNode .getKind ()));
573578 }
574579 }
@@ -579,14 +584,14 @@ private static void replaceConditionNode(SqlNode selectNode, String oldTbName, S
579584 * @param fieldInfos
580585 */
581586 public static void getConditionRefTable (SqlNode selectNode , Set <String > fieldInfos ) {
582- if (selectNode .getKind () == IDENTIFIER ){
587+ if (selectNode .getKind () == IDENTIFIER ) {
583588 SqlIdentifier sqlIdentifier = (SqlIdentifier ) selectNode ;
584589
585590 fieldInfos .add (sqlIdentifier .toString ());
586591 return ;
587- }else if (selectNode .getKind () == LITERAL || selectNode .getKind () == LITERAL_CHAIN ){//字面含义
592+ } else if (selectNode .getKind () == LITERAL || selectNode .getKind () == LITERAL_CHAIN ) {//字面含义
588593 return ;
589- }else if ( AGGREGATE .contains (selectNode .getKind ())
594+ } else if ( AGGREGATE .contains (selectNode .getKind ())
590595 || AVG_AGG_FUNCTIONS .contains (selectNode .getKind ())
591596 || COMPARISON .contains (selectNode .getKind ())
592597 || selectNode .getKind () == OTHER_FUNCTION
@@ -616,26 +621,31 @@ public static void getConditionRefTable(SqlNode selectNode, Set<String> fieldInf
616621 || selectNode .getKind () == TIMESTAMP_DIFF
617622 || selectNode .getKind () == LIKE
618623
619- ) {
624+ ) {
620625 SqlBasicCall sqlBasicCall = (SqlBasicCall ) selectNode ;
621- for (int i = 0 ; i < sqlBasicCall .getOperands ().length ; i ++){
626+ for (int i = 0 ; i < sqlBasicCall .getOperands ().length ; i ++) {
622627 SqlNode sqlNode = sqlBasicCall .getOperands ()[i ];
623- if (sqlNode instanceof SqlLiteral ){
628+ if (sqlNode instanceof SqlLiteral ) {
624629 continue ;
625630 }
626631
627- if (sqlNode instanceof SqlDataTypeSpec ){
632+ if (sqlNode instanceof SqlDataTypeSpec ) {
628633 continue ;
629634 }
630635
631636 getConditionRefTable (sqlNode , fieldInfos );
632637 }
633638
634639 return ;
635- }else if (selectNode .getKind () == OTHER ){
640+ } else if (selectNode .getKind () == OTHER ) {
636641 //不处理
637642 return ;
638- }else {
643+ } else if (selectNode .getKind () == CASE ) {
644+ SqlCase sqlCase = (SqlCase ) selectNode ;
645+
646+ sqlCase .getWhenOperands ().getList ().forEach (sqlNode -> getConditionRefTable (sqlNode , fieldInfos ));
647+ sqlCase .getThenOperands ().getList ().forEach (sqlNode -> getConditionRefTable (sqlNode , fieldInfos ));
648+ } else {
639649 throw new RuntimeException (String .format ("not support node kind of %s to replace name now." , selectNode .getKind ()));
640650 }
641651 }
0 commit comments