@@ -55,6 +55,8 @@ public abstract class SideInfo implements Serializable{
55
55
56
56
protected String sideSelectFields = "" ;
57
57
58
+ protected Map <Integer , String > sideSelectFieldsType = Maps .newHashMap ();
59
+
58
60
protected JoinType joinType ;
59
61
60
62
//key:Returns the value of the position, value: the ref field indexin the input table
@@ -84,15 +86,17 @@ public void parseSelectFields(JoinInfo joinInfo){
84
86
String sideTableName = joinInfo .getSideTableName ();
85
87
String nonSideTableName = joinInfo .getNonSideTable ();
86
88
List <String > fields = Lists .newArrayList ();
89
+ int sideTableFieldIndex = 0 ;
87
90
88
- int sideIndex = 0 ;
89
91
for ( int i =0 ; i <outFieldInfoList .size (); i ++){
90
92
FieldInfo fieldInfo = outFieldInfoList .get (i );
91
93
if (fieldInfo .getTable ().equalsIgnoreCase (sideTableName )){
92
- fields .add (sideTableInfo .getPhysicalFields ().getOrDefault (fieldInfo .getFieldName (), fieldInfo .getFieldName ()));
93
- sideFieldIndex .put (i , sideIndex );
94
- sideFieldNameIndex .put (i , fieldInfo .getFieldName ());
95
- sideIndex ++;
94
+ String sideFieldName = sideTableInfo .getPhysicalFields ().getOrDefault (fieldInfo .getFieldName (), fieldInfo .getFieldName ());
95
+ fields .add (sideFieldName );
96
+ sideSelectFieldsType .put (sideTableFieldIndex , getTargetFieldType (sideFieldName ));
97
+ sideFieldIndex .put (i , sideTableFieldIndex );
98
+ sideFieldNameIndex .put (i , sideFieldName );
99
+ sideTableFieldIndex ++;
96
100
}else if (fieldInfo .getTable ().equalsIgnoreCase (nonSideTableName )){
97
101
int nonSideIndex = rowTypeInfo .getFieldIndex (fieldInfo .getFieldName ());
98
102
inFieldIndex .put (i , nonSideIndex );
@@ -108,6 +112,16 @@ public void parseSelectFields(JoinInfo joinInfo){
108
112
sideSelectFields = String .join ("," , fields );
109
113
}
110
114
115
+ public String getTargetFieldType (String fieldName ){
116
+ int fieldIndex = sideTableInfo .getFieldList ().indexOf (fieldName );
117
+ if (fieldIndex == -1 ){
118
+ throw new RuntimeException (sideTableInfo .getName () + "can't find field: " + fieldName );
119
+ }
120
+
121
+ return sideTableInfo .getFieldTypes ()[fieldIndex ];
122
+ }
123
+
124
+
111
125
public void dealOneEqualCon (SqlNode sqlNode , String sideTableName ){
112
126
if (!SqlKind .COMPARISON .contains (sqlNode .getKind ())){
113
127
throw new RuntimeException ("not compare operator." );
@@ -255,4 +269,16 @@ public Map<Integer, String> getSideFieldNameIndex() {
255
269
public void setSideFieldNameIndex (Map <Integer , String > sideFieldNameIndex ) {
256
270
this .sideFieldNameIndex = sideFieldNameIndex ;
257
271
}
272
+
273
+ public Map <Integer , String > getSideSelectFieldsType () {
274
+ return sideSelectFieldsType ;
275
+ }
276
+
277
+ public void setSideSelectFieldsType (Map <Integer , String > sideSelectFieldsType ) {
278
+ this .sideSelectFieldsType = sideSelectFieldsType ;
279
+ }
280
+
281
+ public String getSelectSideFieldType (int index ){
282
+ return sideSelectFieldsType .get (index );
283
+ }
258
284
}
0 commit comments