@@ -512,10 +512,53 @@ private void extractJoinField(SqlNode condition, Set<Tuple2<String, String>> joi
512512 }
513513
514514 SqlKind joinKind = condition .getKind ();
515- if ( joinKind == AND || joinKind == EQUALS ){
516- extractJoinField (((SqlBasicCall )condition ).operands [0 ], joinFieldSet );
517- extractJoinField (((SqlBasicCall )condition ).operands [1 ], joinFieldSet );
518- }else {
515+ if ( AGGREGATE .contains (condition .getKind ())
516+ || AVG_AGG_FUNCTIONS .contains (joinKind )
517+ || COMPARISON .contains (joinKind )
518+ || joinKind == OTHER_FUNCTION
519+ || joinKind == DIVIDE
520+ || joinKind == CAST
521+ || joinKind == TRIM
522+ || joinKind == TIMES
523+ || joinKind == PLUS
524+ || joinKind == NOT_IN
525+ || joinKind == OR
526+ || joinKind == AND
527+ || joinKind == MINUS
528+ || joinKind == TUMBLE
529+ || joinKind == TUMBLE_START
530+ || joinKind == TUMBLE_END
531+ || joinKind == SESSION
532+ || joinKind == SESSION_START
533+ || joinKind == SESSION_END
534+ || joinKind == HOP
535+ || joinKind == HOP_START
536+ || joinKind == HOP_END
537+ || joinKind == BETWEEN
538+ || joinKind == IS_NULL
539+ || joinKind == IS_NOT_NULL
540+ || joinKind == CONTAINS
541+ || joinKind == TIMESTAMP_ADD
542+ || joinKind == TIMESTAMP_DIFF
543+ || joinKind == LIKE
544+ || joinKind == COALESCE
545+ || joinKind == EQUALS ){
546+
547+ SqlBasicCall sqlBasicCall = (SqlBasicCall ) condition ;
548+ for (int i =0 ; i <sqlBasicCall .getOperands ().length ; i ++){
549+ SqlNode sqlNode = sqlBasicCall .getOperands ()[i ];
550+ if (sqlNode instanceof SqlLiteral ){
551+ continue ;
552+ }
553+
554+ if (sqlNode instanceof SqlDataTypeSpec ){
555+ continue ;
556+ }
557+
558+ extractJoinField (sqlNode , joinFieldSet );
559+ }
560+
561+ } else if (condition .getKind () == IDENTIFIER ){
519562 Preconditions .checkState (((SqlIdentifier )condition ).names .size () == 2 , "join condition must be format table.field" );
520563 Tuple2 <String , String > tuple2 = Tuple2 .of (((SqlIdentifier )condition ).names .get (0 ), ((SqlIdentifier )condition ).names .get (1 ));
521564 joinFieldSet .add (tuple2 );
@@ -822,20 +865,57 @@ public SqlBasicCall buildEmptyCondition(){
822865 private SqlIdentifier checkAndReplaceJoinCondition (SqlNode node , Map <String , String > tableMap ){
823866
824867 SqlKind joinKind = node .getKind ();
825- if ( joinKind == AND || joinKind == EQUALS ){
826- SqlIdentifier leftNode = checkAndReplaceJoinCondition (((SqlBasicCall )node ).operands [0 ], tableMap );
827- SqlIdentifier rightNode = checkAndReplaceJoinCondition (((SqlBasicCall )node ).operands [1 ], tableMap );
868+ if ( AGGREGATE .contains (joinKind )
869+ || AVG_AGG_FUNCTIONS .contains (joinKind )
870+ || COMPARISON .contains (joinKind )
871+ || joinKind == OTHER_FUNCTION
872+ || joinKind == DIVIDE
873+ || joinKind == CAST
874+ || joinKind == TRIM
875+ || joinKind == TIMES
876+ || joinKind == PLUS
877+ || joinKind == NOT_IN
878+ || joinKind == OR
879+ || joinKind == AND
880+ || joinKind == MINUS
881+ || joinKind == TUMBLE
882+ || joinKind == TUMBLE_START
883+ || joinKind == TUMBLE_END
884+ || joinKind == SESSION
885+ || joinKind == SESSION_START
886+ || joinKind == SESSION_END
887+ || joinKind == HOP
888+ || joinKind == HOP_START
889+ || joinKind == HOP_END
890+ || joinKind == BETWEEN
891+ || joinKind == IS_NULL
892+ || joinKind == IS_NOT_NULL
893+ || joinKind == CONTAINS
894+ || joinKind == TIMESTAMP_ADD
895+ || joinKind == TIMESTAMP_DIFF
896+ || joinKind == LIKE
897+ || joinKind == COALESCE
898+ || joinKind == EQUALS ){
899+ SqlBasicCall sqlBasicCall = (SqlBasicCall ) node ;
900+ for (int i =0 ; i <sqlBasicCall .getOperands ().length ; i ++){
901+ SqlNode sqlNode = sqlBasicCall .getOperands ()[i ];
902+ if (sqlNode instanceof SqlLiteral ){
903+ continue ;
904+ }
828905
829- if (leftNode != null ){
830- ((SqlBasicCall )node ).setOperand (0 , leftNode );
831- }
906+ if (sqlNode instanceof SqlDataTypeSpec ){
907+ continue ;
908+ }
909+
910+ SqlIdentifier replaceNode = checkAndReplaceJoinCondition (sqlNode , tableMap );
911+ if (replaceNode != null ){
912+ ((SqlBasicCall )node ).setOperand (i , replaceNode );
913+ }
832914
833- if (rightNode != null ){
834- ((SqlBasicCall )node ).setOperand (1 , leftNode );
835915 }
836916
837917 return null ;
838- } else {
918+ } else if ( node . getKind () == IDENTIFIER ) {
839919 //replace table
840920 Preconditions .checkState (((SqlIdentifier )node ).names .size () == 2 , "join condition must be format table.field" );
841921 String tbName = ((SqlIdentifier ) node ).names .get (0 );
@@ -846,6 +926,8 @@ private SqlIdentifier checkAndReplaceJoinCondition(SqlNode node, Map<String, Str
846926
847927 return null ;
848928 }
929+
930+ return null ;
849931 }
850932
851933 /**
0 commit comments