2020
2121import com .dtstack .flink .sql .side .FieldInfo ;
2222import com .dtstack .flink .sql .side .JoinInfo ;
23+ import com .dtstack .flink .sql .side .PredicateInfo ;
2324import com .dtstack .flink .sql .side .SideInfo ;
2425import com .dtstack .flink .sql .side .SideTableInfo ;
2526import com .dtstack .flink .sql .side .rdb .table .RdbSideTableInfo ;
2930import org .apache .flink .api .java .typeutils .RowTypeInfo ;
3031import com .google .common .collect .Lists ;
3132
33+ import java .util .Arrays ;
3234import java .util .List ;
35+ import java .util .stream .Collectors ;
3336
3437/**
3538 * Reason:
@@ -52,8 +55,15 @@ public RdbAllSideInfo(RowTypeInfo rowTypeInfo, JoinInfo joinInfo, List<FieldInfo
5255 public void buildEqualInfo (JoinInfo joinInfo , SideTableInfo sideTableInfo ) {
5356 RdbSideTableInfo rdbSideTableInfo = (RdbSideTableInfo ) sideTableInfo ;
5457
55- sqlCondition = "select ${selectField} from ${tableName} " ;
56- sqlCondition = sqlCondition .replace ("${tableName}" , rdbSideTableInfo .getTableName ()).replace ("${selectField}" , sideSelectFields );
58+ sqlCondition = getSelectFromStatement (getTableName (rdbSideTableInfo ), Arrays .asList (sideSelectFields .split ("," )), sideTableInfo .getPredicateInfoes ());
59+ System .out .println ("--------side sql query-------\n " + sqlCondition );
60+ }
61+
62+ public String getSelectFromStatement (String tableName , List <String > selectFields , List <PredicateInfo > predicateInfoes ) {
63+ String fromClause = selectFields .stream ().map (this ::quoteIdentifier ).collect (Collectors .joining (", " ));
64+ String predicateClause = predicateInfoes .stream ().map (this ::buildFilterCondition ).collect (Collectors .joining (" AND " ));
65+ String sql = "SELECT " + fromClause + " FROM " + tableName + (predicateInfoes .size () > 0 ? " WHERE " + predicateClause : "" );
66+ return sql ;
5767 }
5868
5969 @ Override
@@ -107,4 +117,29 @@ public void parseSelectFields(JoinInfo joinInfo) {
107117
108118 sideSelectFields = String .join ("," , fields );
109119 }
120+
121+ public String buildFilterCondition (PredicateInfo info ) {
122+ switch (info .getOperatorKind ()) {
123+ case "IN" :
124+ case "NOT_IN" :
125+ return quoteIdentifier (info .getFieldName ()) + " " + info .getOperatorName () + " ( " + info .getCondition () + " )" ;
126+ case "NOT_EQUALS" :
127+ return quoteIdentifier (info .getFieldName ()) + " != " + info .getCondition ();
128+ case "BETWEEN" :
129+ return quoteIdentifier (info .getFieldName ()) + " BETWEEN " + info .getCondition ();
130+ case "IS_NOT_NULL" :
131+ case "IS_NULL" :
132+ return quoteIdentifier (info .getFieldName ()) + " " + info .getOperatorName ();
133+ default :
134+ return quoteIdentifier (info .getFieldName ()) + " " + info .getOperatorName () + " " + info .getCondition ();
135+ }
136+ }
137+
138+ public String getTableName (RdbSideTableInfo rdbSideTableInfo ) {
139+ return rdbSideTableInfo .getTableName ();
140+ }
141+
142+ public String quoteIdentifier (String identifier ) {
143+ return " " + identifier + " " ;
144+ }
110145}
0 commit comments