embulk-output-jdbc 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/build.gradle +2 -2
  3. data/classpath/{embulk-output-jdbc-0.4.0.jar → embulk-output-jdbc-0.4.1.jar} +0 -0
  4. data/lib/embulk/output/jdbc.rb +3 -3
  5. data/src/main/java/org/embulk/output/JdbcOutputPlugin.java +138 -138
  6. data/src/main/java/org/embulk/output/jdbc/AbstractJdbcOutputPlugin.java +973 -972
  7. data/src/main/java/org/embulk/output/jdbc/BatchInsert.java +53 -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 +155 -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 +35 -35
  17. data/src/main/java/org/embulk/output/jdbc/setter/BigDecimalColumnSetter.java +70 -70
  18. data/src/main/java/org/embulk/output/jdbc/setter/BooleanColumnSetter.java +54 -54
  19. data/src/main/java/org/embulk/output/jdbc/setter/ByteColumnSetter.java +76 -76
  20. data/src/main/java/org/embulk/output/jdbc/setter/ColumnSetter.java +45 -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 +96 -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 +61 -61
  25. data/src/main/java/org/embulk/output/jdbc/setter/FloatColumnSetter.java +61 -61
  26. data/src/main/java/org/embulk/output/jdbc/setter/IntColumnSetter.java +76 -76
  27. data/src/main/java/org/embulk/output/jdbc/setter/LongColumnSetter.java +72 -72
  28. data/src/main/java/org/embulk/output/jdbc/setter/NStringColumnSetter.java +59 -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 +59 -59
  32. data/src/main/java/org/embulk/output/jdbc/setter/ShortColumnSetter.java +76 -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 +59 -59
  35. data/src/main/java/org/embulk/output/jdbc/setter/SqlTimeColumnSetter.java +59 -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 +59 -59
  38. data/src/test/java/org/embulk/output/TestJdbcOutputPlugin.java +5 -5
  39. metadata +3 -3
@@ -1,45 +1,45 @@
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.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,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
+ }