embulk-output-jdbc 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/build.gradle +2 -2
  3. data/classpath/embulk-output-jdbc-0.4.2.jar +0 -0
  4. data/lib/embulk/output/jdbc.rb +3 -3
  5. data/src/main/java/org/embulk/output/JdbcOutputPlugin.java +137 -138
  6. data/src/main/java/org/embulk/output/jdbc/AbstractJdbcOutputPlugin.java +972 -973
  7. data/src/main/java/org/embulk/output/jdbc/BatchInsert.java +52 -53
  8. data/src/main/java/org/embulk/output/jdbc/JdbcColumn.java +116 -116
  9. data/src/main/java/org/embulk/output/jdbc/JdbcColumnOption.java +34 -34
  10. data/src/main/java/org/embulk/output/jdbc/JdbcOutputConnection.java +492 -492
  11. data/src/main/java/org/embulk/output/jdbc/JdbcOutputConnector.java +8 -8
  12. data/src/main/java/org/embulk/output/jdbc/JdbcSchema.java +60 -60
  13. data/src/main/java/org/embulk/output/jdbc/JdbcUtils.java +153 -155
  14. data/src/main/java/org/embulk/output/jdbc/StandardBatchInsert.java +200 -200
  15. data/src/main/java/org/embulk/output/jdbc/ToString.java +54 -54
  16. data/src/main/java/org/embulk/output/jdbc/ToStringMap.java +34 -35
  17. data/src/main/java/org/embulk/output/jdbc/setter/BigDecimalColumnSetter.java +68 -70
  18. data/src/main/java/org/embulk/output/jdbc/setter/BooleanColumnSetter.java +53 -54
  19. data/src/main/java/org/embulk/output/jdbc/setter/ByteColumnSetter.java +75 -76
  20. data/src/main/java/org/embulk/output/jdbc/setter/ColumnSetter.java +44 -45
  21. data/src/main/java/org/embulk/output/jdbc/setter/ColumnSetterFactory.java +196 -196
  22. data/src/main/java/org/embulk/output/jdbc/setter/ColumnSetterVisitor.java +95 -96
  23. data/src/main/java/org/embulk/output/jdbc/setter/DefaultValueSetter.java +48 -48
  24. data/src/main/java/org/embulk/output/jdbc/setter/DoubleColumnSetter.java +60 -61
  25. data/src/main/java/org/embulk/output/jdbc/setter/FloatColumnSetter.java +60 -61
  26. data/src/main/java/org/embulk/output/jdbc/setter/IntColumnSetter.java +75 -76
  27. data/src/main/java/org/embulk/output/jdbc/setter/LongColumnSetter.java +71 -72
  28. data/src/main/java/org/embulk/output/jdbc/setter/NStringColumnSetter.java +58 -59
  29. data/src/main/java/org/embulk/output/jdbc/setter/NullColumnSetter.java +53 -53
  30. data/src/main/java/org/embulk/output/jdbc/setter/NullDefaultValueSetter.java +105 -105
  31. data/src/main/java/org/embulk/output/jdbc/setter/PassThroughColumnSetter.java +58 -59
  32. data/src/main/java/org/embulk/output/jdbc/setter/ShortColumnSetter.java +75 -76
  33. data/src/main/java/org/embulk/output/jdbc/setter/SkipColumnSetter.java +43 -43
  34. data/src/main/java/org/embulk/output/jdbc/setter/SqlDateColumnSetter.java +58 -59
  35. data/src/main/java/org/embulk/output/jdbc/setter/SqlTimeColumnSetter.java +58 -59
  36. data/src/main/java/org/embulk/output/jdbc/setter/SqlTimestampColumnSetter.java +58 -58
  37. data/src/main/java/org/embulk/output/jdbc/setter/StringColumnSetter.java +58 -59
  38. data/src/test/java/org/embulk/output/TestJdbcOutputPlugin.java +5 -5
  39. metadata +3 -3
  40. data/classpath/embulk-output-jdbc-0.4.1.jar +0 -0
@@ -1,45 +1,44 @@
1
- package org.embulk.output.jdbc.setter;
2
-
3
- import java.io.IOException;
4
- import java.sql.SQLException;
5
- import org.embulk.spi.Column;
6
- import org.embulk.spi.time.Timestamp;
7
- import org.embulk.output.jdbc.JdbcColumn;
8
- import org.embulk.output.jdbc.BatchInsert;
9
-
10
- public abstract class ColumnSetter
11
- {
12
- protected final BatchInsert batch;
13
- protected final JdbcColumn column;
14
- protected final DefaultValueSetter defaultValue;
15
-
16
- public ColumnSetter(BatchInsert batch, JdbcColumn column,
17
- DefaultValueSetter defaultValue)
18
- {
19
- this.batch = batch;
20
- this.column = column;
21
- this.defaultValue = defaultValue;
22
- }
23
-
24
- public JdbcColumn getColumn()
25
- {
26
- return column;
27
- }
28
-
29
- public int getSqlType()
30
- {
31
- return column.getSqlType();
32
- }
33
-
34
- public abstract void nullValue() throws IOException, SQLException;
35
-
36
- public abstract void booleanValue(boolean v) throws IOException, SQLException;
37
-
38
- public abstract void longValue(long v) throws IOException, SQLException;
39
-
40
- public abstract void doubleValue(double v) throws IOException, SQLException;
41
-
42
- public abstract void stringValue(String v) throws IOException, SQLException;
43
-
44
- public abstract void timestampValue(Timestamp v) throws IOException, SQLException;
45
- }
1
+ package org.embulk.output.jdbc.setter;
2
+
3
+ import java.io.IOException;
4
+ import java.sql.SQLException;
5
+ import org.embulk.spi.time.Timestamp;
6
+ import org.embulk.output.jdbc.JdbcColumn;
7
+ import org.embulk.output.jdbc.BatchInsert;
8
+
9
+ public abstract class ColumnSetter
10
+ {
11
+ protected final BatchInsert batch;
12
+ protected final JdbcColumn column;
13
+ protected final DefaultValueSetter defaultValue;
14
+
15
+ public ColumnSetter(BatchInsert batch, JdbcColumn column,
16
+ DefaultValueSetter defaultValue)
17
+ {
18
+ this.batch = batch;
19
+ this.column = column;
20
+ this.defaultValue = defaultValue;
21
+ }
22
+
23
+ public JdbcColumn getColumn()
24
+ {
25
+ return column;
26
+ }
27
+
28
+ public int getSqlType()
29
+ {
30
+ return column.getSqlType();
31
+ }
32
+
33
+ public abstract void nullValue() throws IOException, SQLException;
34
+
35
+ public abstract void booleanValue(boolean v) throws IOException, SQLException;
36
+
37
+ public abstract void longValue(long v) throws IOException, SQLException;
38
+
39
+ public abstract void doubleValue(double v) throws IOException, SQLException;
40
+
41
+ public abstract void stringValue(String v) throws IOException, SQLException;
42
+
43
+ public abstract void timestampValue(Timestamp v) throws IOException, SQLException;
44
+ }
@@ -1,196 +1,196 @@
1
- package org.embulk.output.jdbc.setter;
2
-
3
- import java.util.Calendar;
4
- import java.util.Locale;
5
- import java.sql.Types;
6
- import org.joda.time.DateTimeZone;
7
- import org.embulk.spi.time.TimestampFormatter;
8
- import org.embulk.output.jdbc.BatchInsert;
9
- import org.embulk.output.jdbc.JdbcColumn;
10
- import org.embulk.output.jdbc.JdbcColumnOption;
11
- import org.embulk.config.ConfigException;
12
-
13
- public class ColumnSetterFactory
14
- {
15
- protected final BatchInsert batch;
16
- protected final DateTimeZone defaultTimeZone;
17
-
18
- public ColumnSetterFactory(BatchInsert batch, DateTimeZone defaultTimeZone)
19
- {
20
- this.batch = batch;
21
- this.defaultTimeZone = defaultTimeZone;
22
- }
23
-
24
- public SkipColumnSetter newSkipColumnSetter()
25
- {
26
- return new SkipColumnSetter(batch);
27
- }
28
-
29
- public DefaultValueSetter newDefaultValueSetter(JdbcColumn column, JdbcColumnOption option)
30
- {
31
- return new NullDefaultValueSetter(batch, column);
32
- }
33
-
34
- public ColumnSetter newColumnSetter(JdbcColumn column, JdbcColumnOption option)
35
- {
36
- switch (option.getValueType()) {
37
- case "coerce":
38
- return newCoalesceColumnSetter(column, option);
39
- case "byte":
40
- return new ByteColumnSetter(batch, column, newDefaultValueSetter(column, option));
41
- case "short":
42
- return new ShortColumnSetter(batch, column, newDefaultValueSetter(column, option));
43
- case "int":
44
- return new IntColumnSetter(batch, column, newDefaultValueSetter(column, option));
45
- case "long":
46
- return new LongColumnSetter(batch, column, newDefaultValueSetter(column, option));
47
- case "double":
48
- return new DoubleColumnSetter(batch, column, newDefaultValueSetter(column, option));
49
- case "float":
50
- return new FloatColumnSetter(batch, column, newDefaultValueSetter(column, option));
51
- case "boolean":
52
- return new BooleanColumnSetter(batch, column, newDefaultValueSetter(column, option));
53
- case "string":
54
- return new StringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
55
- case "nstring":
56
- return new NStringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
57
- case "date":
58
- return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
59
- case "time":
60
- return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
61
- case "timestamp":
62
- return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
63
- case "decimal":
64
- return new BigDecimalColumnSetter(batch, column, newDefaultValueSetter(column, option));
65
- case "null":
66
- return new NullColumnSetter(batch, column, newDefaultValueSetter(column, option));
67
- case "pass":
68
- return new PassThroughColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
69
- default:
70
- throw new ConfigException(String.format("Unknown value_type '%s' for column '%s'", option.getValueType(), column.getName()));
71
- }
72
- }
73
-
74
- protected TimestampFormatter newTimestampFormatter(JdbcColumnOption option)
75
- {
76
- return new TimestampFormatter(
77
- option.getJRuby(),
78
- option.getTimestampFormat().getFormat(),
79
- getTimeZone(option));
80
- }
81
-
82
- protected Calendar newCalendar(JdbcColumnOption option)
83
- {
84
- return Calendar.getInstance(getTimeZone(option).toTimeZone(), Locale.ENGLISH);
85
- }
86
-
87
- protected DateTimeZone getTimeZone(JdbcColumnOption option)
88
- {
89
- return option.getTimeZone().or(defaultTimeZone);
90
- }
91
-
92
- public ColumnSetter newCoalesceColumnSetter(JdbcColumn column, JdbcColumnOption option)
93
- {
94
- switch(column.getSqlType()) {
95
- // setByte
96
- case Types.TINYINT:
97
- return new ByteColumnSetter(batch, column, newDefaultValueSetter(column, option));
98
-
99
- // setShort
100
- case Types.SMALLINT:
101
- return new ShortColumnSetter(batch, column, newDefaultValueSetter(column, option));
102
-
103
- // setInt
104
- case Types.INTEGER:
105
- return new IntColumnSetter(batch, column, newDefaultValueSetter(column, option));
106
-
107
- // setLong
108
- case Types.BIGINT:
109
- return new LongColumnSetter(batch, column, newDefaultValueSetter(column, option));
110
-
111
- // setDouble
112
- case Types.DOUBLE:
113
- case Types.FLOAT:
114
- return new DoubleColumnSetter(batch, column, newDefaultValueSetter(column, option));
115
-
116
- // setFloat
117
- case Types.REAL:
118
- return new FloatColumnSetter(batch, column, newDefaultValueSetter(column, option));
119
-
120
- // setBool
121
- case Types.BOOLEAN:
122
- case Types.BIT: // JDBC BIT is boolean, unlike SQL-92
123
- return new BooleanColumnSetter(batch, column, newDefaultValueSetter(column, option));
124
-
125
- // setString, Clob
126
- case Types.CHAR:
127
- case Types.VARCHAR:
128
- case Types.LONGVARCHAR:
129
- case Types.CLOB:
130
- return new StringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
131
-
132
- // setNString, NClob
133
- case Types.NCHAR:
134
- case Types.NVARCHAR:
135
- case Types.LONGNVARCHAR:
136
- return new NStringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
137
-
138
- // TODO
139
- //// setBytes Blob
140
- //case Types.BINARY:
141
- //case Types.VARBINARY:
142
- //case Types.LONGVARBINARY:
143
- //case Types.BLOB:
144
- // return new BytesColumnSetter(batch, column, newDefaultValueSetter(column, option));
145
-
146
- // Time
147
- case Types.DATE:
148
- return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
149
- case Types.TIME:
150
- return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
151
- case Types.TIMESTAMP:
152
- return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
153
-
154
- // Null
155
- case Types.NULL:
156
- return new NullColumnSetter(batch, column, newDefaultValueSetter(column, option));
157
-
158
- // BigDecimal
159
- case Types.NUMERIC:
160
- case Types.DECIMAL:
161
- return new BigDecimalColumnSetter(batch, column, newDefaultValueSetter(column, option));
162
-
163
- // others
164
- case Types.ARRAY: // array
165
- case Types.STRUCT: // map
166
- case Types.REF:
167
- case Types.DATALINK:
168
- case Types.SQLXML: // XML
169
- case Types.ROWID:
170
- case Types.DISTINCT:
171
- case Types.JAVA_OBJECT:
172
- case Types.OTHER:
173
- default:
174
- throw unsupportedOperationException(column);
175
- }
176
- }
177
-
178
- //private static String[] UNSUPPORTED = new String[] {
179
- // "ARRAY",
180
- // "STRUCT",
181
- // "REF",
182
- // "DATALINK",
183
- // "SQLXML",
184
- // "ROWID",
185
- // "DISTINCT",
186
- // "OTHER",
187
- //};
188
-
189
- private static UnsupportedOperationException unsupportedOperationException(JdbcColumn column)
190
- {
191
- throw new UnsupportedOperationException(
192
- String.format("Unsupported type %s (sqlType=%d, size=%d, scale=%d)",
193
- column.getDeclaredType().or(column.getSimpleTypeName()),
194
- column.getSqlType(), column.getSizeTypeParameter(), column.getScaleTypeParameter()));
195
- }
196
- }
1
+ package org.embulk.output.jdbc.setter;
2
+
3
+ import java.util.Calendar;
4
+ import java.util.Locale;
5
+ import java.sql.Types;
6
+ import org.joda.time.DateTimeZone;
7
+ import org.embulk.spi.time.TimestampFormatter;
8
+ import org.embulk.output.jdbc.BatchInsert;
9
+ import org.embulk.output.jdbc.JdbcColumn;
10
+ import org.embulk.output.jdbc.JdbcColumnOption;
11
+ import org.embulk.config.ConfigException;
12
+
13
+ public class ColumnSetterFactory
14
+ {
15
+ protected final BatchInsert batch;
16
+ protected final DateTimeZone defaultTimeZone;
17
+
18
+ public ColumnSetterFactory(BatchInsert batch, DateTimeZone defaultTimeZone)
19
+ {
20
+ this.batch = batch;
21
+ this.defaultTimeZone = defaultTimeZone;
22
+ }
23
+
24
+ public SkipColumnSetter newSkipColumnSetter()
25
+ {
26
+ return new SkipColumnSetter(batch);
27
+ }
28
+
29
+ public DefaultValueSetter newDefaultValueSetter(JdbcColumn column, JdbcColumnOption option)
30
+ {
31
+ return new NullDefaultValueSetter(batch, column);
32
+ }
33
+
34
+ public ColumnSetter newColumnSetter(JdbcColumn column, JdbcColumnOption option)
35
+ {
36
+ switch (option.getValueType()) {
37
+ case "coerce":
38
+ return newCoalesceColumnSetter(column, option);
39
+ case "byte":
40
+ return new ByteColumnSetter(batch, column, newDefaultValueSetter(column, option));
41
+ case "short":
42
+ return new ShortColumnSetter(batch, column, newDefaultValueSetter(column, option));
43
+ case "int":
44
+ return new IntColumnSetter(batch, column, newDefaultValueSetter(column, option));
45
+ case "long":
46
+ return new LongColumnSetter(batch, column, newDefaultValueSetter(column, option));
47
+ case "double":
48
+ return new DoubleColumnSetter(batch, column, newDefaultValueSetter(column, option));
49
+ case "float":
50
+ return new FloatColumnSetter(batch, column, newDefaultValueSetter(column, option));
51
+ case "boolean":
52
+ return new BooleanColumnSetter(batch, column, newDefaultValueSetter(column, option));
53
+ case "string":
54
+ return new StringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
55
+ case "nstring":
56
+ return new NStringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
57
+ case "date":
58
+ return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
59
+ case "time":
60
+ return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
61
+ case "timestamp":
62
+ return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
63
+ case "decimal":
64
+ return new BigDecimalColumnSetter(batch, column, newDefaultValueSetter(column, option));
65
+ case "null":
66
+ return new NullColumnSetter(batch, column, newDefaultValueSetter(column, option));
67
+ case "pass":
68
+ return new PassThroughColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
69
+ default:
70
+ throw new ConfigException(String.format("Unknown value_type '%s' for column '%s'", option.getValueType(), column.getName()));
71
+ }
72
+ }
73
+
74
+ protected TimestampFormatter newTimestampFormatter(JdbcColumnOption option)
75
+ {
76
+ return new TimestampFormatter(
77
+ option.getJRuby(),
78
+ option.getTimestampFormat().getFormat(),
79
+ getTimeZone(option));
80
+ }
81
+
82
+ protected Calendar newCalendar(JdbcColumnOption option)
83
+ {
84
+ return Calendar.getInstance(getTimeZone(option).toTimeZone(), Locale.ENGLISH);
85
+ }
86
+
87
+ protected DateTimeZone getTimeZone(JdbcColumnOption option)
88
+ {
89
+ return option.getTimeZone().or(defaultTimeZone);
90
+ }
91
+
92
+ public ColumnSetter newCoalesceColumnSetter(JdbcColumn column, JdbcColumnOption option)
93
+ {
94
+ switch(column.getSqlType()) {
95
+ // setByte
96
+ case Types.TINYINT:
97
+ return new ByteColumnSetter(batch, column, newDefaultValueSetter(column, option));
98
+
99
+ // setShort
100
+ case Types.SMALLINT:
101
+ return new ShortColumnSetter(batch, column, newDefaultValueSetter(column, option));
102
+
103
+ // setInt
104
+ case Types.INTEGER:
105
+ return new IntColumnSetter(batch, column, newDefaultValueSetter(column, option));
106
+
107
+ // setLong
108
+ case Types.BIGINT:
109
+ return new LongColumnSetter(batch, column, newDefaultValueSetter(column, option));
110
+
111
+ // setDouble
112
+ case Types.DOUBLE:
113
+ case Types.FLOAT:
114
+ return new DoubleColumnSetter(batch, column, newDefaultValueSetter(column, option));
115
+
116
+ // setFloat
117
+ case Types.REAL:
118
+ return new FloatColumnSetter(batch, column, newDefaultValueSetter(column, option));
119
+
120
+ // setBool
121
+ case Types.BOOLEAN:
122
+ case Types.BIT: // JDBC BIT is boolean, unlike SQL-92
123
+ return new BooleanColumnSetter(batch, column, newDefaultValueSetter(column, option));
124
+
125
+ // setString, Clob
126
+ case Types.CHAR:
127
+ case Types.VARCHAR:
128
+ case Types.LONGVARCHAR:
129
+ case Types.CLOB:
130
+ return new StringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
131
+
132
+ // setNString, NClob
133
+ case Types.NCHAR:
134
+ case Types.NVARCHAR:
135
+ case Types.LONGNVARCHAR:
136
+ return new NStringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
137
+
138
+ // TODO
139
+ //// setBytes Blob
140
+ //case Types.BINARY:
141
+ //case Types.VARBINARY:
142
+ //case Types.LONGVARBINARY:
143
+ //case Types.BLOB:
144
+ // return new BytesColumnSetter(batch, column, newDefaultValueSetter(column, option));
145
+
146
+ // Time
147
+ case Types.DATE:
148
+ return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
149
+ case Types.TIME:
150
+ return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
151
+ case Types.TIMESTAMP:
152
+ return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
153
+
154
+ // Null
155
+ case Types.NULL:
156
+ return new NullColumnSetter(batch, column, newDefaultValueSetter(column, option));
157
+
158
+ // BigDecimal
159
+ case Types.NUMERIC:
160
+ case Types.DECIMAL:
161
+ return new BigDecimalColumnSetter(batch, column, newDefaultValueSetter(column, option));
162
+
163
+ // others
164
+ case Types.ARRAY: // array
165
+ case Types.STRUCT: // map
166
+ case Types.REF:
167
+ case Types.DATALINK:
168
+ case Types.SQLXML: // XML
169
+ case Types.ROWID:
170
+ case Types.DISTINCT:
171
+ case Types.JAVA_OBJECT:
172
+ case Types.OTHER:
173
+ default:
174
+ throw unsupportedOperationException(column);
175
+ }
176
+ }
177
+
178
+ //private static String[] UNSUPPORTED = new String[] {
179
+ // "ARRAY",
180
+ // "STRUCT",
181
+ // "REF",
182
+ // "DATALINK",
183
+ // "SQLXML",
184
+ // "ROWID",
185
+ // "DISTINCT",
186
+ // "OTHER",
187
+ //};
188
+
189
+ private static UnsupportedOperationException unsupportedOperationException(JdbcColumn column)
190
+ {
191
+ throw new UnsupportedOperationException(
192
+ String.format("Unsupported type %s (sqlType=%d, size=%d, scale=%d)",
193
+ column.getDeclaredType().or(column.getSimpleTypeName()),
194
+ column.getSqlType(), column.getSizeTypeParameter(), column.getScaleTypeParameter()));
195
+ }
196
+ }