@@ -512,10 +512,53 @@ private void extractJoinField(SqlNode condition, Set<Tuple2<String, String>> joi
512
512
}
513
513
514
514
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 ){
519
562
Preconditions .checkState (((SqlIdentifier )condition ).names .size () == 2 , "join condition must be format table.field" );
520
563
Tuple2 <String , String > tuple2 = Tuple2 .of (((SqlIdentifier )condition ).names .get (0 ), ((SqlIdentifier )condition ).names .get (1 ));
521
564
joinFieldSet .add (tuple2 );
@@ -822,20 +865,57 @@ public SqlBasicCall buildEmptyCondition(){
822
865
private SqlIdentifier checkAndReplaceJoinCondition (SqlNode node , Map <String , String > tableMap ){
823
866
824
867
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
+ }
828
905
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
+ }
832
914
833
- if (rightNode != null ){
834
- ((SqlBasicCall )node ).setOperand (1 , leftNode );
835
915
}
836
916
837
917
return null ;
838
- } else {
918
+ } else if ( node . getKind () == IDENTIFIER ) {
839
919
//replace table
840
920
Preconditions .checkState (((SqlIdentifier )node ).names .size () == 2 , "join condition must be format table.field" );
841
921
String tbName = ((SqlIdentifier ) node ).names .get (0 );
@@ -846,6 +926,8 @@ private SqlIdentifier checkAndReplaceJoinCondition(SqlNode node, Map<String, Str
846
926
847
927
return null ;
848
928
}
929
+
930
+ return null ;
849
931
}
850
932
851
933
/**
0 commit comments