@@ -132,75 +132,78 @@ public static Schema jdbcToArrowSchema(ResultSetMetaData rsmd, Calendar calendar
132
132
List <Field > fields = new ArrayList <>();
133
133
int columnCount = rsmd .getColumnCount ();
134
134
for (int i = 1 ; i <= columnCount ; i ++) {
135
- String columnName = rsmd .getColumnName (i );
135
+ final String columnName = rsmd .getColumnName (i );
136
+ final FieldType fieldType ;
137
+
136
138
switch (rsmd .getColumnType (i )) {
137
139
case Types .BOOLEAN :
138
140
case Types .BIT :
139
- fields . add ( new Field ( columnName , FieldType .nullable (new ArrowType .Bool ()), null ));
141
+ fieldType = FieldType .nullable (new ArrowType .Bool ());
140
142
break ;
141
143
case Types .TINYINT :
142
- fields . add ( new Field ( columnName , FieldType .nullable (new ArrowType .Int (8 , true )), null ));
144
+ fieldType = FieldType .nullable (new ArrowType .Int (8 , true ));
143
145
break ;
144
146
case Types .SMALLINT :
145
- fields . add ( new Field ( columnName , FieldType .nullable (new ArrowType .Int (16 , true )), null ));
147
+ fieldType = FieldType .nullable (new ArrowType .Int (16 , true ));
146
148
break ;
147
149
case Types .INTEGER :
148
- fields . add ( new Field ( columnName , FieldType .nullable (new ArrowType .Int (32 , true )), null ));
150
+ fieldType = FieldType .nullable (new ArrowType .Int (32 , true ));
149
151
break ;
150
152
case Types .BIGINT :
151
- fields . add ( new Field ( columnName , FieldType .nullable (new ArrowType .Int (64 , true )), null ));
153
+ fieldType = FieldType .nullable (new ArrowType .Int (64 , true ));
152
154
break ;
153
155
case Types .NUMERIC :
154
156
case Types .DECIMAL :
155
157
int precision = rsmd .getPrecision (i );
156
158
int scale = rsmd .getScale (i );
157
- fields . add ( new Field ( columnName , FieldType .nullable (new ArrowType .Decimal (precision , scale )), null ));
159
+ fieldType = FieldType .nullable (new ArrowType .Decimal (precision , scale ));
158
160
break ;
159
161
case Types .REAL :
160
162
case Types .FLOAT :
161
- fields . add ( new Field ( columnName , FieldType .nullable (new ArrowType .FloatingPoint (SINGLE )), null ));
163
+ fieldType = FieldType .nullable (new ArrowType .FloatingPoint (SINGLE ));
162
164
break ;
163
165
case Types .DOUBLE :
164
- fields . add ( new Field ( columnName , FieldType .nullable (new ArrowType .FloatingPoint (DOUBLE )), null ));
166
+ fieldType = FieldType .nullable (new ArrowType .FloatingPoint (DOUBLE ));
165
167
break ;
166
168
case Types .CHAR :
167
169
case Types .NCHAR :
168
170
case Types .VARCHAR :
169
171
case Types .NVARCHAR :
170
172
case Types .LONGVARCHAR :
171
173
case Types .LONGNVARCHAR :
172
- fields .add (new Field (columnName , FieldType .nullable (new ArrowType .Utf8 ()), null ));
174
+ case Types .CLOB :
175
+ fieldType = FieldType .nullable (new ArrowType .Utf8 ());
173
176
break ;
174
177
case Types .DATE :
175
- fields . add ( new Field ( columnName , FieldType .nullable (new ArrowType .Date (DateUnit .MILLISECOND )), null ));
178
+ fieldType = FieldType .nullable (new ArrowType .Date (DateUnit .MILLISECOND ));
176
179
break ;
177
180
case Types .TIME :
178
- fields . add ( new Field ( columnName , FieldType .nullable (new ArrowType .Time (TimeUnit .MILLISECOND , 32 )), null ));
181
+ fieldType = FieldType .nullable (new ArrowType .Time (TimeUnit .MILLISECOND , 32 ));
179
182
break ;
180
183
case Types .TIMESTAMP :
181
- fields .add (new Field (columnName , FieldType .nullable (new ArrowType .Timestamp (TimeUnit .MILLISECOND ,
182
- calendar .getTimeZone ().getID ())), null ));
184
+ fieldType = FieldType .nullable (new ArrowType .Timestamp (TimeUnit .MILLISECOND , calendar .getTimeZone ().getID ()));
183
185
break ;
184
186
case Types .BINARY :
185
187
case Types .VARBINARY :
186
188
case Types .LONGVARBINARY :
187
- fields .add (new Field (columnName , FieldType .nullable (new ArrowType .Binary ()), null ));
188
- break ;
189
- case Types .ARRAY :
190
- // TODO Need to handle this type
191
- // fields.add(new Field("list", FieldType.nullable(new ArrowType.List()), null));
192
- break ;
193
- case Types .CLOB :
194
- fields .add (new Field (columnName , FieldType .nullable (new ArrowType .Utf8 ()), null ));
189
+ fieldType = FieldType .nullable (new ArrowType .Binary ());
195
190
break ;
196
191
case Types .BLOB :
197
- fields . add ( new Field ( columnName , FieldType .nullable (new ArrowType .Binary ()), null ));
192
+ fieldType = FieldType .nullable (new ArrowType .Binary ());
198
193
break ;
199
194
195
+ case Types .ARRAY :
196
+ // TODO Need to handle this type
197
+ // fields.add(new Field("list", FieldType.nullable(new ArrowType.List()), null));
200
198
default :
201
199
// no-op, shouldn't get here
200
+ fieldType = null ;
202
201
break ;
203
202
}
203
+
204
+ if (fieldType != null ) {
205
+ fields .add (new Field (columnName , fieldType , null ));
206
+ }
204
207
}
205
208
206
209
return new Schema (fields , null );
0 commit comments