src/main/java/org/embulk/output/jdbc/setter/ColumnSetterFactory.java in embulk-output-jdbc-0.4.0 vs src/main/java/org/embulk/output/jdbc/setter/ColumnSetterFactory.java in embulk-output-jdbc-0.4.1
- old
+ new
@@ -1,196 +1,196 @@
-package org.embulk.output.jdbc.setter;
-
-import java.util.Calendar;
-import java.util.Locale;
-import java.sql.Types;
-import org.joda.time.DateTimeZone;
-import org.embulk.spi.time.TimestampFormatter;
-import org.embulk.output.jdbc.BatchInsert;
-import org.embulk.output.jdbc.JdbcColumn;
-import org.embulk.output.jdbc.JdbcColumnOption;
-import org.embulk.config.ConfigException;
-
-public class ColumnSetterFactory
-{
- protected final BatchInsert batch;
- protected final DateTimeZone defaultTimeZone;
-
- public ColumnSetterFactory(BatchInsert batch, DateTimeZone defaultTimeZone)
- {
- this.batch = batch;
- this.defaultTimeZone = defaultTimeZone;
- }
-
- public SkipColumnSetter newSkipColumnSetter()
- {
- return new SkipColumnSetter(batch);
- }
-
- public DefaultValueSetter newDefaultValueSetter(JdbcColumn column, JdbcColumnOption option)
- {
- return new NullDefaultValueSetter(batch, column);
- }
-
- public ColumnSetter newColumnSetter(JdbcColumn column, JdbcColumnOption option)
- {
- switch (option.getValueType()) {
- case "coerce":
- return newCoalesceColumnSetter(column, option);
- case "byte":
- return new ByteColumnSetter(batch, column, newDefaultValueSetter(column, option));
- case "short":
- return new ShortColumnSetter(batch, column, newDefaultValueSetter(column, option));
- case "int":
- return new IntColumnSetter(batch, column, newDefaultValueSetter(column, option));
- case "long":
- return new LongColumnSetter(batch, column, newDefaultValueSetter(column, option));
- case "double":
- return new DoubleColumnSetter(batch, column, newDefaultValueSetter(column, option));
- case "float":
- return new FloatColumnSetter(batch, column, newDefaultValueSetter(column, option));
- case "boolean":
- return new BooleanColumnSetter(batch, column, newDefaultValueSetter(column, option));
- case "string":
- return new StringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
- case "nstring":
- return new NStringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
- case "date":
- return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
- case "time":
- return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
- case "timestamp":
- return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
- case "decimal":
- return new BigDecimalColumnSetter(batch, column, newDefaultValueSetter(column, option));
- case "null":
- return new NullColumnSetter(batch, column, newDefaultValueSetter(column, option));
- case "pass":
- return new PassThroughColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
- default:
- throw new ConfigException(String.format("Unknown value_type '%s' for column '%s'", option.getValueType(), column.getName()));
- }
- }
-
- protected TimestampFormatter newTimestampFormatter(JdbcColumnOption option)
- {
- return new TimestampFormatter(
- option.getJRuby(),
- option.getTimestampFormat().getFormat(),
- getTimeZone(option));
- }
-
- protected Calendar newCalendar(JdbcColumnOption option)
- {
- return Calendar.getInstance(getTimeZone(option).toTimeZone(), Locale.ENGLISH);
- }
-
- protected DateTimeZone getTimeZone(JdbcColumnOption option)
- {
- return option.getTimeZone().or(defaultTimeZone);
- }
-
- public ColumnSetter newCoalesceColumnSetter(JdbcColumn column, JdbcColumnOption option)
- {
- switch(column.getSqlType()) {
- // setByte
- case Types.TINYINT:
- return new ByteColumnSetter(batch, column, newDefaultValueSetter(column, option));
-
- // setShort
- case Types.SMALLINT:
- return new ShortColumnSetter(batch, column, newDefaultValueSetter(column, option));
-
- // setInt
- case Types.INTEGER:
- return new IntColumnSetter(batch, column, newDefaultValueSetter(column, option));
-
- // setLong
- case Types.BIGINT:
- return new LongColumnSetter(batch, column, newDefaultValueSetter(column, option));
-
- // setDouble
- case Types.DOUBLE:
- case Types.FLOAT:
- return new DoubleColumnSetter(batch, column, newDefaultValueSetter(column, option));
-
- // setFloat
- case Types.REAL:
- return new FloatColumnSetter(batch, column, newDefaultValueSetter(column, option));
-
- // setBool
- case Types.BOOLEAN:
- case Types.BIT: // JDBC BIT is boolean, unlike SQL-92
- return new BooleanColumnSetter(batch, column, newDefaultValueSetter(column, option));
-
- // setString, Clob
- case Types.CHAR:
- case Types.VARCHAR:
- case Types.LONGVARCHAR:
- case Types.CLOB:
- return new StringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
-
- // setNString, NClob
- case Types.NCHAR:
- case Types.NVARCHAR:
- case Types.LONGNVARCHAR:
- return new NStringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
-
- // TODO
- //// setBytes Blob
- //case Types.BINARY:
- //case Types.VARBINARY:
- //case Types.LONGVARBINARY:
- //case Types.BLOB:
- // return new BytesColumnSetter(batch, column, newDefaultValueSetter(column, option));
-
- // Time
- case Types.DATE:
- return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
- case Types.TIME:
- return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
- case Types.TIMESTAMP:
- return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
-
- // Null
- case Types.NULL:
- return new NullColumnSetter(batch, column, newDefaultValueSetter(column, option));
-
- // BigDecimal
- case Types.NUMERIC:
- case Types.DECIMAL:
- return new BigDecimalColumnSetter(batch, column, newDefaultValueSetter(column, option));
-
- // others
- case Types.ARRAY: // array
- case Types.STRUCT: // map
- case Types.REF:
- case Types.DATALINK:
- case Types.SQLXML: // XML
- case Types.ROWID:
- case Types.DISTINCT:
- case Types.JAVA_OBJECT:
- case Types.OTHER:
- default:
- throw unsupportedOperationException(column);
- }
- }
-
- //private static String[] UNSUPPORTED = new String[] {
- // "ARRAY",
- // "STRUCT",
- // "REF",
- // "DATALINK",
- // "SQLXML",
- // "ROWID",
- // "DISTINCT",
- // "OTHER",
- //};
-
- private static UnsupportedOperationException unsupportedOperationException(JdbcColumn column)
- {
- throw new UnsupportedOperationException(
- String.format("Unsupported type %s (sqlType=%d, size=%d, scale=%d)",
- column.getDeclaredType().or(column.getSimpleTypeName()),
- column.getSqlType(), column.getSizeTypeParameter(), column.getScaleTypeParameter()));
- }
-}
+package org.embulk.output.jdbc.setter;
+
+import java.util.Calendar;
+import java.util.Locale;
+import java.sql.Types;
+import org.joda.time.DateTimeZone;
+import org.embulk.spi.time.TimestampFormatter;
+import org.embulk.output.jdbc.BatchInsert;
+import org.embulk.output.jdbc.JdbcColumn;
+import org.embulk.output.jdbc.JdbcColumnOption;
+import org.embulk.config.ConfigException;
+
+public class ColumnSetterFactory
+{
+ protected final BatchInsert batch;
+ protected final DateTimeZone defaultTimeZone;
+
+ public ColumnSetterFactory(BatchInsert batch, DateTimeZone defaultTimeZone)
+ {
+ this.batch = batch;
+ this.defaultTimeZone = defaultTimeZone;
+ }
+
+ public SkipColumnSetter newSkipColumnSetter()
+ {
+ return new SkipColumnSetter(batch);
+ }
+
+ public DefaultValueSetter newDefaultValueSetter(JdbcColumn column, JdbcColumnOption option)
+ {
+ return new NullDefaultValueSetter(batch, column);
+ }
+
+ public ColumnSetter newColumnSetter(JdbcColumn column, JdbcColumnOption option)
+ {
+ switch (option.getValueType()) {
+ case "coerce":
+ return newCoalesceColumnSetter(column, option);
+ case "byte":
+ return new ByteColumnSetter(batch, column, newDefaultValueSetter(column, option));
+ case "short":
+ return new ShortColumnSetter(batch, column, newDefaultValueSetter(column, option));
+ case "int":
+ return new IntColumnSetter(batch, column, newDefaultValueSetter(column, option));
+ case "long":
+ return new LongColumnSetter(batch, column, newDefaultValueSetter(column, option));
+ case "double":
+ return new DoubleColumnSetter(batch, column, newDefaultValueSetter(column, option));
+ case "float":
+ return new FloatColumnSetter(batch, column, newDefaultValueSetter(column, option));
+ case "boolean":
+ return new BooleanColumnSetter(batch, column, newDefaultValueSetter(column, option));
+ case "string":
+ return new StringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
+ case "nstring":
+ return new NStringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
+ case "date":
+ return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
+ case "time":
+ return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
+ case "timestamp":
+ return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
+ case "decimal":
+ return new BigDecimalColumnSetter(batch, column, newDefaultValueSetter(column, option));
+ case "null":
+ return new NullColumnSetter(batch, column, newDefaultValueSetter(column, option));
+ case "pass":
+ return new PassThroughColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
+ default:
+ throw new ConfigException(String.format("Unknown value_type '%s' for column '%s'", option.getValueType(), column.getName()));
+ }
+ }
+
+ protected TimestampFormatter newTimestampFormatter(JdbcColumnOption option)
+ {
+ return new TimestampFormatter(
+ option.getJRuby(),
+ option.getTimestampFormat().getFormat(),
+ getTimeZone(option));
+ }
+
+ protected Calendar newCalendar(JdbcColumnOption option)
+ {
+ return Calendar.getInstance(getTimeZone(option).toTimeZone(), Locale.ENGLISH);
+ }
+
+ protected DateTimeZone getTimeZone(JdbcColumnOption option)
+ {
+ return option.getTimeZone().or(defaultTimeZone);
+ }
+
+ public ColumnSetter newCoalesceColumnSetter(JdbcColumn column, JdbcColumnOption option)
+ {
+ switch(column.getSqlType()) {
+ // setByte
+ case Types.TINYINT:
+ return new ByteColumnSetter(batch, column, newDefaultValueSetter(column, option));
+
+ // setShort
+ case Types.SMALLINT:
+ return new ShortColumnSetter(batch, column, newDefaultValueSetter(column, option));
+
+ // setInt
+ case Types.INTEGER:
+ return new IntColumnSetter(batch, column, newDefaultValueSetter(column, option));
+
+ // setLong
+ case Types.BIGINT:
+ return new LongColumnSetter(batch, column, newDefaultValueSetter(column, option));
+
+ // setDouble
+ case Types.DOUBLE:
+ case Types.FLOAT:
+ return new DoubleColumnSetter(batch, column, newDefaultValueSetter(column, option));
+
+ // setFloat
+ case Types.REAL:
+ return new FloatColumnSetter(batch, column, newDefaultValueSetter(column, option));
+
+ // setBool
+ case Types.BOOLEAN:
+ case Types.BIT: // JDBC BIT is boolean, unlike SQL-92
+ return new BooleanColumnSetter(batch, column, newDefaultValueSetter(column, option));
+
+ // setString, Clob
+ case Types.CHAR:
+ case Types.VARCHAR:
+ case Types.LONGVARCHAR:
+ case Types.CLOB:
+ return new StringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
+
+ // setNString, NClob
+ case Types.NCHAR:
+ case Types.NVARCHAR:
+ case Types.LONGNVARCHAR:
+ return new NStringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
+
+ // TODO
+ //// setBytes Blob
+ //case Types.BINARY:
+ //case Types.VARBINARY:
+ //case Types.LONGVARBINARY:
+ //case Types.BLOB:
+ // return new BytesColumnSetter(batch, column, newDefaultValueSetter(column, option));
+
+ // Time
+ case Types.DATE:
+ return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
+ case Types.TIME:
+ return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
+ case Types.TIMESTAMP:
+ return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
+
+ // Null
+ case Types.NULL:
+ return new NullColumnSetter(batch, column, newDefaultValueSetter(column, option));
+
+ // BigDecimal
+ case Types.NUMERIC:
+ case Types.DECIMAL:
+ return new BigDecimalColumnSetter(batch, column, newDefaultValueSetter(column, option));
+
+ // others
+ case Types.ARRAY: // array
+ case Types.STRUCT: // map
+ case Types.REF:
+ case Types.DATALINK:
+ case Types.SQLXML: // XML
+ case Types.ROWID:
+ case Types.DISTINCT:
+ case Types.JAVA_OBJECT:
+ case Types.OTHER:
+ default:
+ throw unsupportedOperationException(column);
+ }
+ }
+
+ //private static String[] UNSUPPORTED = new String[] {
+ // "ARRAY",
+ // "STRUCT",
+ // "REF",
+ // "DATALINK",
+ // "SQLXML",
+ // "ROWID",
+ // "DISTINCT",
+ // "OTHER",
+ //};
+
+ private static UnsupportedOperationException unsupportedOperationException(JdbcColumn column)
+ {
+ throw new UnsupportedOperationException(
+ String.format("Unsupported type %s (sqlType=%d, size=%d, scale=%d)",
+ column.getDeclaredType().or(column.getSimpleTypeName()),
+ column.getSqlType(), column.getSizeTypeParameter(), column.getScaleTypeParameter()));
+ }
+}