Skip to content

Commit 5af1b5b

Browse files
author
Mike Pigott
committed
Separating out the field-type creation from the field creation.
1 parent a667fca commit 5af1b5b

File tree

1 file changed

+26
-23
lines changed

1 file changed

+26
-23
lines changed

java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java

+26-23
Original file line numberDiff line numberDiff line change
@@ -132,75 +132,78 @@ public static Schema jdbcToArrowSchema(ResultSetMetaData rsmd, Calendar calendar
132132
List<Field> fields = new ArrayList<>();
133133
int columnCount = rsmd.getColumnCount();
134134
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+
136138
switch (rsmd.getColumnType(i)) {
137139
case Types.BOOLEAN:
138140
case Types.BIT:
139-
fields.add(new Field(columnName, FieldType.nullable(new ArrowType.Bool()), null));
141+
fieldType = FieldType.nullable(new ArrowType.Bool());
140142
break;
141143
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));
143145
break;
144146
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));
146148
break;
147149
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));
149151
break;
150152
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));
152154
break;
153155
case Types.NUMERIC:
154156
case Types.DECIMAL:
155157
int precision = rsmd.getPrecision(i);
156158
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));
158160
break;
159161
case Types.REAL:
160162
case Types.FLOAT:
161-
fields.add(new Field(columnName, FieldType.nullable(new ArrowType.FloatingPoint(SINGLE)), null));
163+
fieldType = FieldType.nullable(new ArrowType.FloatingPoint(SINGLE));
162164
break;
163165
case Types.DOUBLE:
164-
fields.add(new Field(columnName, FieldType.nullable(new ArrowType.FloatingPoint(DOUBLE)), null));
166+
fieldType = FieldType.nullable(new ArrowType.FloatingPoint(DOUBLE));
165167
break;
166168
case Types.CHAR:
167169
case Types.NCHAR:
168170
case Types.VARCHAR:
169171
case Types.NVARCHAR:
170172
case Types.LONGVARCHAR:
171173
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());
173176
break;
174177
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));
176179
break;
177180
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));
179182
break;
180183
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()));
183185
break;
184186
case Types.BINARY:
185187
case Types.VARBINARY:
186188
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());
195190
break;
196191
case Types.BLOB:
197-
fields.add(new Field(columnName, FieldType.nullable(new ArrowType.Binary()), null));
192+
fieldType = FieldType.nullable(new ArrowType.Binary());
198193
break;
199194

195+
case Types.ARRAY:
196+
// TODO Need to handle this type
197+
// fields.add(new Field("list", FieldType.nullable(new ArrowType.List()), null));
200198
default:
201199
// no-op, shouldn't get here
200+
fieldType = null;
202201
break;
203202
}
203+
204+
if (fieldType != null) {
205+
fields.add(new Field(columnName, fieldType, null));
206+
}
204207
}
205208

206209
return new Schema(fields, null);

0 commit comments

Comments
 (0)