src/main/java/org/embulk/input/jdbc/getter/ColumnGetterFactory.java in embulk-input-jdbc-0.6.4 vs src/main/java/org/embulk/input/jdbc/getter/ColumnGetterFactory.java in embulk-input-jdbc-0.7.0

- old
+ new

@@ -1,8 +1,11 @@ package org.embulk.input.jdbc.getter; +import java.lang.reflect.Field; import java.sql.Types; +import java.util.HashMap; +import java.util.Map; import org.embulk.config.ConfigException; import org.embulk.input.jdbc.JdbcColumn; import org.embulk.input.jdbc.JdbcColumnOption; import org.embulk.spi.PageBuilder; @@ -11,12 +14,13 @@ import org.embulk.spi.type.Type; import org.joda.time.DateTimeZone; public class ColumnGetterFactory { - private final PageBuilder to; + protected final PageBuilder to; private final DateTimeZone defaultTimeZone; + private final Map<Integer, String> jdbcTypes = getAllJDBCTypes(); public ColumnGetterFactory(PageBuilder to, DateTimeZone defaultTimeZone) { this.to = to; this.defaultTimeZone = defaultTimeZone; @@ -41,10 +45,12 @@ return new DoubleColumnGetter(to, toType); case "boolean": return new BooleanColumnGetter(to, toType); case "string": return new StringColumnGetter(to, toType); + case "json": + return new JsonColumnGetter(to, toType); case "date": return new DateColumnGetter(to, toType, newTimestampFormatter(option, DateColumnGetter.DEFAULT_FORMAT)); case "time": return new TimeColumnGetter(to, toType, newTimestampFormatter(option, DateColumnGetter.DEFAULT_FORMAT)); case "timestamp": @@ -54,12 +60,33 @@ default: throw new ConfigException(String.format("Unknown value_type '%s' for column '%s'", option.getValueType(), column.getName())); } } - private String sqlTypeToValueType(JdbcColumn column, int sqlType) + protected Map<Integer,String> getAllJDBCTypes() { + Map<Integer,String> map = new HashMap<Integer, String>(); + for(Field f: Types.class.getFields()){ + try { + map.put((Integer) f.get(null), f.getName()); + } catch(IllegalAccessException iea){ + } + } + return map; + } + + public String getJdbcType(int sqlType) { + String sqlTypeName = jdbcTypes.get(sqlType); + if(sqlTypeName == null){ + throw new UnsupportedOperationException(String.format("Unknown SQL type value '%d'", sqlType)); + } + return sqlTypeName; + } + + + protected String sqlTypeToValueType(JdbcColumn column, int sqlType) + { switch(sqlType) { // getLong case Types.TINYINT: case Types.SMALLINT: case Types.INTEGER: @@ -133,10 +160,10 @@ default: throw unsupportedOperationException(column); } } - private Type getToType(JdbcColumnOption option) + protected Type getToType(JdbcColumnOption option) { if (!option.getType().isPresent()) { return null; } Type toType = option.getType().get();