@@ -522,10 +522,53 @@ private void extractJoinField(SqlNode condition, Set<Tuple2<String, String>> joi
522522 }
523523
524524 SqlKind joinKind = condition .getKind ();
525- if ( joinKind == AND || joinKind == EQUALS ){
526- extractJoinField (((SqlBasicCall )condition ).operands [0 ], joinFieldSet );
527- extractJoinField (((SqlBasicCall )condition ).operands [1 ], joinFieldSet );
528- }else {
525+ if ( AGGREGATE .contains (condition .getKind ())
526+ || AVG_AGG_FUNCTIONS .contains (joinKind )
527+ || COMPARISON .contains (joinKind )
528+ || joinKind == OTHER_FUNCTION
529+ || joinKind == DIVIDE
530+ || joinKind == CAST
531+ || joinKind == TRIM
532+ || joinKind == TIMES
533+ || joinKind == PLUS
534+ || joinKind == NOT_IN
535+ || joinKind == OR
536+ || joinKind == AND
537+ || joinKind == MINUS
538+ || joinKind == TUMBLE
539+ || joinKind == TUMBLE_START
540+ || joinKind == TUMBLE_END
541+ || joinKind == SESSION
542+ || joinKind == SESSION_START
543+ || joinKind == SESSION_END
544+ || joinKind == HOP
545+ || joinKind == HOP_START
546+ || joinKind == HOP_END
547+ || joinKind == BETWEEN
548+ || joinKind == IS_NULL
549+ || joinKind == IS_NOT_NULL
550+ || joinKind == CONTAINS
551+ || joinKind == TIMESTAMP_ADD
552+ || joinKind == TIMESTAMP_DIFF
553+ || joinKind == LIKE
554+ || joinKind == COALESCE
555+ || joinKind == EQUALS ){
556+
557+ SqlBasicCall sqlBasicCall = (SqlBasicCall ) condition ;
558+ for (int i =0 ; i <sqlBasicCall .getOperands ().length ; i ++){
559+ SqlNode sqlNode = sqlBasicCall .getOperands ()[i ];
560+ if (sqlNode instanceof SqlLiteral ){
561+ continue ;
562+ }
563+
564+ if (sqlNode instanceof SqlDataTypeSpec ){
565+ continue ;
566+ }
567+
568+ extractJoinField (sqlNode , joinFieldSet );
569+ }
570+
571+ } else if (condition .getKind () == IDENTIFIER ){
529572 Preconditions .checkState (((SqlIdentifier )condition ).names .size () == 2 , "join condition must be format table.field" );
530573 Tuple2 <String , String > tuple2 = Tuple2 .of (((SqlIdentifier )condition ).names .get (0 ), ((SqlIdentifier )condition ).names .get (1 ));
531574 joinFieldSet .add (tuple2 );
@@ -833,20 +876,57 @@ public SqlBasicCall buildEmptyCondition(){
833876 private SqlIdentifier checkAndReplaceJoinCondition (SqlNode node , Map <String , String > tableMap ){
834877
835878 SqlKind joinKind = node .getKind ();
836- if ( joinKind == AND || joinKind == EQUALS ){
837- SqlIdentifier leftNode = checkAndReplaceJoinCondition (((SqlBasicCall )node ).operands [0 ], tableMap );
838- SqlIdentifier rightNode = checkAndReplaceJoinCondition (((SqlBasicCall )node ).operands [1 ], tableMap );
879+ if ( AGGREGATE .contains (joinKind )
880+ || AVG_AGG_FUNCTIONS .contains (joinKind )
881+ || COMPARISON .contains (joinKind )
882+ || joinKind == OTHER_FUNCTION
883+ || joinKind == DIVIDE
884+ || joinKind == CAST
885+ || joinKind == TRIM
886+ || joinKind == TIMES
887+ || joinKind == PLUS
888+ || joinKind == NOT_IN
889+ || joinKind == OR
890+ || joinKind == AND
891+ || joinKind == MINUS
892+ || joinKind == TUMBLE
893+ || joinKind == TUMBLE_START
894+ || joinKind == TUMBLE_END
895+ || joinKind == SESSION
896+ || joinKind == SESSION_START
897+ || joinKind == SESSION_END
898+ || joinKind == HOP
899+ || joinKind == HOP_START
900+ || joinKind == HOP_END
901+ || joinKind == BETWEEN
902+ || joinKind == IS_NULL
903+ || joinKind == IS_NOT_NULL
904+ || joinKind == CONTAINS
905+ || joinKind == TIMESTAMP_ADD
906+ || joinKind == TIMESTAMP_DIFF
907+ || joinKind == LIKE
908+ || joinKind == COALESCE
909+ || joinKind == EQUALS ){
910+ SqlBasicCall sqlBasicCall = (SqlBasicCall ) node ;
911+ for (int i =0 ; i <sqlBasicCall .getOperands ().length ; i ++){
912+ SqlNode sqlNode = sqlBasicCall .getOperands ()[i ];
913+ if (sqlNode instanceof SqlLiteral ){
914+ continue ;
915+ }
839916
840- if (leftNode != null ){
841- ((SqlBasicCall )node ).setOperand (0 , leftNode );
842- }
917+ if (sqlNode instanceof SqlDataTypeSpec ){
918+ continue ;
919+ }
920+
921+ SqlIdentifier replaceNode = checkAndReplaceJoinCondition (sqlNode , tableMap );
922+ if (replaceNode != null ){
923+ ((SqlBasicCall )node ).setOperand (i , replaceNode );
924+ }
843925
844- if (rightNode != null ){
845- ((SqlBasicCall )node ).setOperand (1 , leftNode );
846926 }
847927
848928 return null ;
849- } else {
929+ } else if ( node . getKind () == IDENTIFIER ) {
850930 //replace table
851931 Preconditions .checkState (((SqlIdentifier )node ).names .size () == 2 , "join condition must be format table.field" );
852932 String tbName = ((SqlIdentifier ) node ).names .get (0 );
@@ -857,6 +937,8 @@ private SqlIdentifier checkAndReplaceJoinCondition(SqlNode node, Map<String, Str
857937
858938 return null ;
859939 }
940+
941+ return null ;
860942 }
861943
862944 /**
0 commit comments