Skip to content

Commit 728490a

Browse files
author
xuchao
committed
初步重构 sql语句解析逻辑;
字段替换和重命名相关的逻辑在解析阶段完成; 目标:经过解析sql之后的所有sql是确定的。
1 parent cc98b19 commit 728490a

6 files changed

Lines changed: 554 additions & 445 deletions

File tree

core/src/main/java/com/dtstack/flink/sql/side/FieldReplaceInfo.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,14 @@
2020

2121
package com.dtstack.flink.sql.side;
2222

23+
import com.dtstack.flink.sql.util.ReflectionUtils;
2324
import com.google.common.collect.HashBasedTable;
2425
import org.apache.commons.lang3.StringUtils;
2526

27+
import java.lang.reflect.Field;
28+
import java.util.HashMap;
29+
import java.util.Map;
30+
2631
/**
2732
* 用于记录转换之后的表和原来表直接字段的关联关系
2833
* Date: 2018/8/30
@@ -78,12 +83,32 @@ public void setTargetTableAlias(String targetTableAlias) {
7883
* @param fieldName
7984
* @return
8085
*/
81-
public String getTargetFieldName(String tableName, String fieldName){
86+
public String getTargetFieldName(String tableName, String fieldName) {
8287
String targetFieldName = mappingTable.get(tableName, fieldName);
8388
if(StringUtils.isNotBlank(targetFieldName)){
8489
return targetFieldName;
8590
}
8691

92+
93+
/* Field field = ReflectionUtils.getDeclaredField(mappingTable, "backingMap");
94+
field.setAccessible(true);
95+
HashMap<String, Map<String, String>> map = null;
96+
try {
97+
map = (HashMap) field.get(mappingTable);
98+
} catch (IllegalAccessException e) {
99+
e.printStackTrace();
100+
}
101+
102+
if(map.size() == 1 && tableName.equalsIgnoreCase(targetTableAlias)){
103+
for(Map<String, String> tmp : map.values()){
104+
targetFieldName = tmp.get(fieldName);
105+
if(targetFieldName != null){
106+
return targetFieldName;
107+
}
108+
}
109+
}*/
110+
111+
87112
if(preNode == null){
88113
return null;
89114
}

core/src/main/java/com/dtstack/flink/sql/side/JoinInfo.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020

2121
package com.dtstack.flink.sql.side;
2222

23+
import com.google.common.collect.HashBasedTable;
24+
import com.google.common.collect.HashBiMap;
25+
import com.google.common.collect.Maps;
2326
import org.apache.calcite.sql.JoinType;
2427
import org.apache.calcite.sql.SqlNode;
2528
import com.google.common.base.Strings;
@@ -67,6 +70,18 @@ public class JoinInfo implements Serializable {
6770

6871
private JoinType joinType;
6972

73+
private HashBiMap<String, String> fieldRefInfo = HashBiMap.create();
74+
75+
/**
76+
* 左表需要查询的字段信息和output的时候对应的列名称
77+
*/
78+
private Map<String, String> leftSelectFieldInfo = Maps.newHashMap();
79+
80+
/**
81+
* 右表需要查询的字段信息和output的时候对应的列名称
82+
*/
83+
private Map<String, String> rightSelectFieldInfo = Maps.newHashMap();
84+
7085
public String getSideTableName(){
7186
if(leftIsSideTable){
7287
return leftTableAlias;
@@ -203,6 +218,43 @@ public void setLeftIsTmpTable(boolean leftIsTmpTable) {
203218
this.leftIsTmpTable = leftIsTmpTable;
204219
}
205220

221+
public HashBiMap<String, String> getFieldRefInfo() {
222+
return fieldRefInfo;
223+
}
224+
225+
public void setFieldRefInfo(HashBiMap<String, String> fieldRefInfo) {
226+
this.fieldRefInfo = fieldRefInfo;
227+
}
228+
229+
public Map<String, String> getLeftSelectFieldInfo() {
230+
return leftSelectFieldInfo;
231+
}
232+
233+
public void setLeftSelectFieldInfo(Map<String, String> leftSelectFieldInfo) {
234+
this.leftSelectFieldInfo = leftSelectFieldInfo;
235+
}
236+
237+
public Map<String, String> getRightSelectFieldInfo() {
238+
return rightSelectFieldInfo;
239+
}
240+
241+
public void setRightSelectFieldInfo(Map<String, String> rightSelectFieldInfo) {
242+
this.rightSelectFieldInfo = rightSelectFieldInfo;
243+
}
244+
245+
public HashBasedTable<String, String, String> getTableFieldRef(){
246+
HashBasedTable<String, String, String> mappingTable = HashBasedTable.create();
247+
getLeftSelectFieldInfo().forEach((key, value) -> {
248+
mappingTable.put(getLeftTableAlias(), key, value);
249+
});
250+
251+
getRightSelectFieldInfo().forEach((key, value) -> {
252+
mappingTable.put(getRightTableAlias(), key, value);
253+
});
254+
255+
return mappingTable;
256+
}
257+
206258
@Override
207259
public String toString() {
208260
return "JoinInfo{" +

0 commit comments

Comments
 (0)