1616 * limitations under the License.
1717 */
1818
19-
20-
2119package com .dtstack .flink .sql .table ;
2220
2321import com .dtstack .flink .sql .util .ClassUtil ;
2725import com .google .common .collect .Maps ;
2826import org .apache .commons .lang3 .StringUtils ;
2927
30- import java .util .ArrayList ;
3128import java .util .Arrays ;
3229import java .util .List ;
3330import java .util .Map ;
@@ -52,9 +49,6 @@ public abstract class AbstractTableParser {
5249 private static Pattern physicalFieldFunPattern = Pattern .compile ("\\ w+\\ ((\\ w+)\\ )$" );
5350 private static Pattern charTypePattern = Pattern .compile ("(?i)CHAR\\ ((\\ d*)\\ )$" );
5451
55- private static Pattern compositeTypeHeadPattern = Pattern .compile (".+<.+<.+" );
56- private static Pattern compositeTypeTailPattern = Pattern .compile (".*>\\ s*>.*" );
57-
5852 private Map <String , Pattern > patternMap = Maps .newHashMap ();
5953
6054 private Map <String , ITableFieldDealHandler > handlerMap = Maps .newHashMap ();
@@ -89,76 +83,56 @@ public boolean dealKeyPattern(String fieldRow, AbstractTableInfo tableInfo){
8983 return false ;
9084 }
9185
92- public void parseFieldsInfo (String fieldsInfo , AbstractTableInfo tableInfo ){
86+ public void parseFieldsInfo (String fieldsInfo , AbstractTableInfo tableInfo ) {
9387
9488 List <String > fieldRows = DtStringUtil .splitIgnoreQuota (fieldsInfo , ',' );
9589
96- ArrayList <String > buffer = new ArrayList <>();
97-
9890 for (String fieldRow : fieldRows ) {
9991 fieldRow = fieldRow .trim ();
10092
10193 if (StringUtils .isBlank (fieldRow )) {
10294 throw new RuntimeException (String .format ("table [%s],exists field empty." , tableInfo .getName ()));
10395 }
10496
105- // 处理复合类型,例如 ARRAY<ROW<foo INT, bar STRING>>
106- // 把ARRAY类型的长串字符压入Buffer
107- Matcher headMatcher = compositeTypeHeadPattern .matcher (fieldRow );
108- Matcher tailMatcher = compositeTypeTailPattern .matcher (fieldRow );
109- boolean isNotTail = !tailMatcher .matches ();
110- boolean isToNeedPush = headMatcher .matches () || !buffer .isEmpty ();
97+ String [] fieldInfoArr = fieldRow .split ("\\ s+" );
11198
112- if (isNotTail && isToNeedPush ) {
113- writeBuffer (buffer , fieldRow );
114- } else {
115- String [] fieldInfoArr ;
116- if (tailMatcher .matches ()) {
117- buffer .add (fieldRow );
118- fieldRow = String .join ("" , buffer );
119- fieldInfoArr = readBuffer (buffer );
120- } else {
121- fieldInfoArr = fieldRow .split ("\\ s+" );
122- }
99+ String errorMsg = String .format ("table [%s] field [%s] format error." , tableInfo .getName (), fieldRow );
100+ Preconditions .checkState (fieldInfoArr .length >= 2 , errorMsg );
123101
124- String errorMsg = String .format ("table [%s] field [%s] format error." , tableInfo .getName (), fieldRow );
125- Preconditions .checkState (fieldInfoArr .length >= 2 , errorMsg );
102+ boolean isMatcherKey = dealKeyPattern (fieldRow , tableInfo );
103+ if (isMatcherKey ) {
104+ continue ;
105+ }
126106
127- boolean isMatcherKey = dealKeyPattern (fieldRow , tableInfo );
128- if (isMatcherKey ) {
129- continue ;
130- }
107+ //Compatible situation may arise in space in the fieldName
108+ String [] filedNameArr = new String [fieldInfoArr .length - 1 ];
109+ System .arraycopy (fieldInfoArr , 0 , filedNameArr , 0 , fieldInfoArr .length - 1 );
110+ String fieldName = String .join (" " , filedNameArr );
111+ String fieldType = fieldInfoArr [fieldInfoArr .length - 1 ].trim ();
131112
132- //Compatible situation may arise in space in the fieldName
133- String [] filedNameArr = new String [fieldInfoArr .length - 1 ];
134- System .arraycopy (fieldInfoArr , 0 , filedNameArr , 0 , fieldInfoArr .length - 1 );
135- String fieldName = String .join (" " , filedNameArr );
136- String fieldType = fieldInfoArr [fieldInfoArr .length - 1 ].trim ();
137-
138- Class fieldClass = null ;
139- AbstractTableInfo .FieldExtraInfo fieldExtraInfo = null ;
140-
141- Matcher matcher = charTypePattern .matcher (fieldType );
142- if (matcher .find ()) {
143- fieldClass = dbTypeConvertToJavaType (CHAR_TYPE_NO_LENGTH );
144- fieldExtraInfo = new AbstractTableInfo .FieldExtraInfo ();
145- fieldExtraInfo .setLength (Integer .valueOf (matcher .group (1 )));
146- } else {
147- fieldClass = dbTypeConvertToJavaType (fieldType );
148- }
113+ Class fieldClass = null ;
114+ AbstractTableInfo .FieldExtraInfo fieldExtraInfo = null ;
149115
150- tableInfo .addPhysicalMappings (fieldInfoArr [0 ], fieldInfoArr [0 ]);
151- tableInfo .addField (fieldName );
152- tableInfo .addFieldClass (fieldClass );
153- tableInfo .addFieldType (fieldType );
154- tableInfo .addFieldExtraInfo (fieldExtraInfo );
116+ Matcher matcher = charTypePattern .matcher (fieldType );
117+ if (matcher .find ()) {
118+ fieldClass = dbTypeConvertToJavaType (CHAR_TYPE_NO_LENGTH );
119+ fieldExtraInfo = new AbstractTableInfo .FieldExtraInfo ();
120+ fieldExtraInfo .setLength (Integer .valueOf (matcher .group (1 )));
121+ } else {
122+ fieldClass = dbTypeConvertToJavaType (fieldType );
155123 }
124+
125+ tableInfo .addPhysicalMappings (fieldInfoArr [0 ], fieldInfoArr [0 ]);
126+ tableInfo .addField (fieldName );
127+ tableInfo .addFieldClass (fieldClass );
128+ tableInfo .addFieldType (fieldType );
129+ tableInfo .addFieldExtraInfo (fieldExtraInfo );
156130 }
157131
158132 tableInfo .finish ();
159133 }
160134
161- public void dealPrimaryKey (Matcher matcher , AbstractTableInfo tableInfo ){
135+ public void dealPrimaryKey (Matcher matcher , AbstractTableInfo tableInfo ) {
162136 String primaryFields = matcher .group (1 ).trim ();
163137 String [] splitArry = primaryFields .split ("," );
164138 List <String > primaryKes = Lists .newArrayList (splitArry );
0 commit comments