Skip to content

Commit 77d2a01

Browse files
committed
[hotfix-33089][core]add pks into sidetableinfo's fields.
1 parent d8af848 commit 77d2a01

2 files changed

Lines changed: 42 additions & 20 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ public void parseSelectFields(JoinInfo joinInfo){
118118
public String getTargetFieldType(String fieldName){
119119
int fieldIndex = sideTableInfo.getFieldList().indexOf(fieldName);
120120
if(fieldIndex == -1){
121-
throw new RuntimeException(sideTableInfo.getName() + "can't find field: " + fieldName);
121+
throw new RuntimeException(sideTableInfo.getName() + " can't find field: " + fieldName);
122122
}
123123

124124
return sideTableInfo.getFieldTypes()[fieldIndex];

core/src/main/java/com/dtstack/flink/sql/table/AbstractTableParser.java

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@
1919

2020
package com.dtstack.flink.sql.table;
2121

22+
import com.dtstack.flink.sql.side.AbstractSideTableInfo;
2223
import com.dtstack.flink.sql.util.ClassUtil;
2324
import com.dtstack.flink.sql.util.DtStringUtil;
2425
import com.google.common.base.Preconditions;
2526
import com.google.common.collect.Maps;
2627
import org.apache.commons.lang3.StringUtils;
2728
import org.apache.flink.api.java.tuple.Tuple2;
2829

30+
import java.util.ArrayList;
2931
import java.util.Arrays;
3032
import java.util.List;
3133
import java.util.Map;
@@ -105,30 +107,50 @@ public void parseFieldsInfo(String fieldsInfo, AbstractTableInfo tableInfo) {
105107
continue;
106108
}
107109

108-
Tuple2<String, String> t = extractType(fieldRow, tableInfo.getName());
109-
String fieldName = t.f0;
110-
String fieldType = t.f1;
110+
handleKeyNotHaveAlias(fieldRow, tableInfo);
111+
}
111112

112-
Class fieldClass;
113-
AbstractTableInfo.FieldExtraInfo fieldExtraInfo = null;
113+
/*
114+
* check whether filed list contains pks and then add pks into field list.
115+
* because some no-sql database is not primary key. eg :redis、hbase etc...
116+
*/
117+
if (tableInfo instanceof AbstractSideTableInfo) {
118+
List<String> pks = new ArrayList<>();
119+
tableInfo.getPrimaryKeys().stream().forEach(pk -> {
120+
if (!tableInfo.getFieldList().contains(pk)) {
121+
pks.add(String.format("%s varchar", pk));
122+
}
123+
});
124+
pks.stream().forEach(pk -> {
125+
handleKeyNotHaveAlias(pk, tableInfo);
126+
});
127+
}
114128

115-
Matcher matcher = charTypePattern.matcher(fieldType);
116-
if (matcher.find()) {
117-
fieldClass = dbTypeConvertToJavaType(CHAR_TYPE_NO_LENGTH);
118-
fieldExtraInfo = new AbstractTableInfo.FieldExtraInfo();
119-
fieldExtraInfo.setLength(Integer.parseInt(matcher.group(1)));
120-
} else {
121-
fieldClass = dbTypeConvertToJavaType(fieldType);
122-
}
129+
tableInfo.finish();
130+
}
123131

124-
tableInfo.addPhysicalMappings(fieldName, fieldName);
125-
tableInfo.addField(fieldName);
126-
tableInfo.addFieldClass(fieldClass);
127-
tableInfo.addFieldType(fieldType);
128-
tableInfo.addFieldExtraInfo(fieldExtraInfo);
132+
private void handleKeyNotHaveAlias(String fieldRow, AbstractTableInfo tableInfo) {
133+
Tuple2<String, String> t = extractType(fieldRow, tableInfo.getName());
134+
String fieldName = t.f0;
135+
String fieldType = t.f1;
136+
137+
Class fieldClass;
138+
AbstractTableInfo.FieldExtraInfo fieldExtraInfo = null;
139+
140+
Matcher matcher = charTypePattern.matcher(fieldType);
141+
if (matcher.find()) {
142+
fieldClass = dbTypeConvertToJavaType(CHAR_TYPE_NO_LENGTH);
143+
fieldExtraInfo = new AbstractTableInfo.FieldExtraInfo();
144+
fieldExtraInfo.setLength(Integer.parseInt(matcher.group(1)));
145+
} else {
146+
fieldClass = dbTypeConvertToJavaType(fieldType);
129147
}
130148

131-
tableInfo.finish();
149+
tableInfo.addPhysicalMappings(fieldName, fieldName);
150+
tableInfo.addField(fieldName);
151+
tableInfo.addFieldClass(fieldClass);
152+
tableInfo.addFieldType(fieldType);
153+
tableInfo.addFieldExtraInfo(fieldExtraInfo);
132154
}
133155

134156
private Tuple2<String, String> extractType(String fieldRow, String tableName) {

0 commit comments

Comments
 (0)