embulk-input-jdbc 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/classpath/embulk-input-jdbc-0.5.0.jar +0 -0
- data/src/main/java/org/embulk/input/JdbcInputPlugin.java +0 -8
- data/src/main/java/org/embulk/input/jdbc/AbstractJdbcInputPlugin.java +51 -13
- data/src/main/java/org/embulk/input/jdbc/JdbcColumn.java +20 -1
- data/src/main/java/org/embulk/input/jdbc/JdbcColumnOption.java +36 -0
- data/src/main/java/org/embulk/input/jdbc/JdbcInputConnection.java +4 -4
- data/src/main/java/org/embulk/input/jdbc/getter/AbstractColumnGetter.java +76 -0
- data/src/main/java/org/embulk/input/jdbc/getter/AbstractTimestampColumnGetter.java +33 -0
- data/src/main/java/org/embulk/input/jdbc/getter/BigDecimalColumnGetter.java +59 -0
- data/src/main/java/org/embulk/input/jdbc/getter/BooleanColumnGetter.java +56 -0
- data/src/main/java/org/embulk/input/jdbc/getter/ColumnGetter.java +1 -2
- data/src/main/java/org/embulk/input/jdbc/getter/ColumnGetterFactory.java +86 -20
- data/src/main/java/org/embulk/input/jdbc/getter/DateColumnGetter.java +37 -0
- data/src/main/java/org/embulk/input/jdbc/getter/DoubleColumnGetter.java +66 -0
- data/src/main/java/org/embulk/input/jdbc/getter/FloatColumnGetter.java +66 -0
- data/src/main/java/org/embulk/input/jdbc/getter/LongColumnGetter.java +56 -0
- data/src/main/java/org/embulk/input/jdbc/getter/StringColumnGetter.java +64 -0
- data/src/main/java/org/embulk/input/jdbc/getter/TimeColumnGetter.java +37 -0
- data/src/main/java/org/embulk/input/jdbc/getter/TimestampColumnGetter.java +36 -0
- metadata +15 -4
- data/classpath/embulk-input-jdbc-0.4.0.jar +0 -0
- data/src/main/java/org/embulk/input/jdbc/getter/ColumnGetters.java +0 -197
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58343b1cbca7d7302990e5ae707abd6093c50a6e
|
4
|
+
data.tar.gz: 1f20480bd02215e50e9e297ab71b8edbf7737f1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a79c9b92ca7b98df26ad863382a8351266b1acaebfb218429000e47132a081afe692f3ba2f543bbb6a2bf768e2eba756cc4fe510c184eb941858ca04fd9e854f
|
7
|
+
data.tar.gz: cf26a3cbf0ece3949506e6ac9f282eb08c338f39bb9b1cb929b09a2bad9fcaf5d3d08703090dea09a27ebe740cb562382dc55422acf06f9776adfd916abcfb7b
|
Binary file
|
@@ -1,6 +1,5 @@
|
|
1
1
|
package org.embulk.input;
|
2
2
|
|
3
|
-
import java.nio.file.Paths;
|
4
3
|
import java.util.Set;
|
5
4
|
import java.util.HashSet;
|
6
5
|
import java.util.Properties;
|
@@ -9,7 +8,6 @@ import java.sql.Driver;
|
|
9
8
|
import java.sql.SQLException;
|
10
9
|
import com.google.common.base.Optional;
|
11
10
|
import com.google.common.base.Throwables;
|
12
|
-
import org.embulk.spi.PluginClassLoader;
|
13
11
|
import org.embulk.config.Config;
|
14
12
|
import org.embulk.config.ConfigDefault;
|
15
13
|
import org.embulk.input.jdbc.AbstractJdbcInputPlugin;
|
@@ -98,10 +96,4 @@ public class JdbcInputPlugin
|
|
98
96
|
}
|
99
97
|
}
|
100
98
|
|
101
|
-
private void loadDriverJar(String glob)
|
102
|
-
{
|
103
|
-
// TODO match glob
|
104
|
-
PluginClassLoader loader = (PluginClassLoader) getClass().getClassLoader();
|
105
|
-
loader.addPath(Paths.get(glob));
|
106
|
-
}
|
107
99
|
}
|
@@ -1,13 +1,19 @@
|
|
1
1
|
package org.embulk.input.jdbc;
|
2
2
|
|
3
3
|
import java.util.List;
|
4
|
+
import java.util.Map;
|
4
5
|
import java.util.Properties;
|
6
|
+
import java.nio.file.Paths;
|
5
7
|
import java.sql.ResultSet;
|
6
8
|
import java.sql.SQLException;
|
9
|
+
|
7
10
|
import org.slf4j.Logger;
|
11
|
+
|
8
12
|
import com.google.common.base.Optional;
|
13
|
+
import com.google.common.base.Supplier;
|
9
14
|
import com.google.common.base.Throwables;
|
10
15
|
import com.google.common.collect.ImmutableList;
|
16
|
+
|
11
17
|
import org.embulk.config.CommitReport;
|
12
18
|
import org.embulk.config.Config;
|
13
19
|
import org.embulk.config.ConfigException;
|
@@ -22,11 +28,13 @@ import org.embulk.spi.Column;
|
|
22
28
|
import org.embulk.spi.PageBuilder;
|
23
29
|
import org.embulk.spi.InputPlugin;
|
24
30
|
import org.embulk.spi.PageOutput;
|
31
|
+
import org.embulk.spi.PluginClassLoader;
|
25
32
|
import org.embulk.spi.Schema;
|
26
33
|
import org.embulk.spi.Exec;
|
27
34
|
import org.embulk.input.jdbc.getter.ColumnGetter;
|
28
35
|
import org.embulk.input.jdbc.getter.ColumnGetterFactory;
|
29
36
|
import org.embulk.input.jdbc.JdbcInputConnection.BatchSelect;
|
37
|
+
import org.joda.time.DateTimeZone;
|
30
38
|
|
31
39
|
public abstract class AbstractJdbcInputPlugin
|
32
40
|
implements InputPlugin
|
@@ -97,6 +105,14 @@ public abstract class AbstractJdbcInputPlugin
|
|
97
105
|
|
98
106
|
// TODO parallel execution using "partition_by" config
|
99
107
|
|
108
|
+
@Config("column_options")
|
109
|
+
@ConfigDefault("{}")
|
110
|
+
public Map<String, JdbcColumnOption> getColumnOptions();
|
111
|
+
|
112
|
+
@Config("default_timezone")
|
113
|
+
@ConfigDefault("\"UTC\"")
|
114
|
+
public DateTimeZone getDefaultTimeZone();
|
115
|
+
|
100
116
|
public JdbcSchema getQuerySchema();
|
101
117
|
public void setQuerySchema(JdbcSchema schema);
|
102
118
|
|
@@ -112,11 +128,6 @@ public abstract class AbstractJdbcInputPlugin
|
|
112
128
|
|
113
129
|
protected abstract JdbcInputConnection newConnection(PluginTask task) throws SQLException;
|
114
130
|
|
115
|
-
protected ColumnGetterFactory newColumnGetterFactory(PluginTask task) throws SQLException
|
116
|
-
{
|
117
|
-
return new ColumnGetterFactory();
|
118
|
-
}
|
119
|
-
|
120
131
|
@Override
|
121
132
|
public ConfigDiff transaction(ConfigSource config,
|
122
133
|
InputPlugin.Control control)
|
@@ -143,12 +154,17 @@ public abstract class AbstractJdbcInputPlugin
|
|
143
154
|
JdbcSchema querySchema = con.getSchemaOfQuery(getQuery(task, con));
|
144
155
|
task.setQuerySchema(querySchema);
|
145
156
|
|
146
|
-
|
157
|
+
// validate column_options
|
158
|
+
newColumnGetters(task, querySchema, null);
|
159
|
+
|
160
|
+
ColumnGetterFactory factory = new ColumnGetterFactory(null, task.getDefaultTimeZone());
|
147
161
|
ImmutableList.Builder<Column> columns = ImmutableList.builder();
|
148
162
|
for (int i = 0; i < querySchema.getCount(); i++) {
|
163
|
+
JdbcColumn column = querySchema.getColumn(i);
|
164
|
+
JdbcColumnOption columnOption = columnOptionOf(task.getColumnOptions(), column);
|
149
165
|
columns.add(new Column(i,
|
150
|
-
|
151
|
-
factory.newColumnGetter(
|
166
|
+
column.getName(),
|
167
|
+
factory.newColumnGetter(column, columnOption).getToType()));
|
152
168
|
}
|
153
169
|
return new Schema(columns.build());
|
154
170
|
}
|
@@ -220,7 +236,7 @@ public abstract class AbstractJdbcInputPlugin
|
|
220
236
|
PageBuilder pageBuilder = new PageBuilder(allocator, schema, output);
|
221
237
|
|
222
238
|
try {
|
223
|
-
List<ColumnGetter> getters = newColumnGetters(task, querySchema);
|
239
|
+
List<ColumnGetter> getters = newColumnGetters(task, querySchema, pageBuilder);
|
224
240
|
|
225
241
|
try (JdbcInputConnection con = newConnection(task)) {
|
226
242
|
try (BatchSelect cursor = con.newSelectCursor(getQuery(task, con), task.getFetchRows())) {
|
@@ -248,16 +264,31 @@ public abstract class AbstractJdbcInputPlugin
|
|
248
264
|
return report;
|
249
265
|
}
|
250
266
|
|
251
|
-
private List<ColumnGetter> newColumnGetters(PluginTask task, JdbcSchema querySchema
|
267
|
+
private List<ColumnGetter> newColumnGetters(PluginTask task, JdbcSchema querySchema, PageBuilder pageBuilder)
|
268
|
+
throws SQLException
|
252
269
|
{
|
253
|
-
ColumnGetterFactory factory =
|
270
|
+
ColumnGetterFactory factory = new ColumnGetterFactory(pageBuilder, task.getDefaultTimeZone());
|
254
271
|
ImmutableList.Builder<ColumnGetter> getters = ImmutableList.builder();
|
255
272
|
for (JdbcColumn c : querySchema.getColumns()) {
|
256
|
-
|
273
|
+
JdbcColumnOption columnOption = columnOptionOf(task.getColumnOptions(), c);
|
274
|
+
getters.add(factory.newColumnGetter(c, columnOption));
|
257
275
|
}
|
258
276
|
return getters.build();
|
259
277
|
}
|
260
278
|
|
279
|
+
private static JdbcColumnOption columnOptionOf(Map<String, JdbcColumnOption> columnOptions, JdbcColumn targetColumn)
|
280
|
+
{
|
281
|
+
return Optional.fromNullable(columnOptions.get(targetColumn.getName())).or(
|
282
|
+
// default column option
|
283
|
+
new Supplier<JdbcColumnOption>()
|
284
|
+
{
|
285
|
+
public JdbcColumnOption get()
|
286
|
+
{
|
287
|
+
return Exec.newConfigSource().loadConfig(JdbcColumnOption.class);
|
288
|
+
}
|
289
|
+
});
|
290
|
+
}
|
291
|
+
|
261
292
|
private boolean fetch(BatchSelect cursor,
|
262
293
|
List<ColumnGetter> getters, PageBuilder pageBuilder) throws SQLException
|
263
294
|
{
|
@@ -272,7 +303,7 @@ public abstract class AbstractJdbcInputPlugin
|
|
272
303
|
do {
|
273
304
|
for (int i=0; i < getters.size(); i++) {
|
274
305
|
int index = i + 1; // JDBC column index begins from 1
|
275
|
-
getters.get(i).getAndSet(result, index,
|
306
|
+
getters.get(i).getAndSet(result, index, columns.get(i));
|
276
307
|
}
|
277
308
|
pageBuilder.addRecord();
|
278
309
|
rows++;
|
@@ -320,4 +351,11 @@ public abstract class AbstractJdbcInputPlugin
|
|
320
351
|
// pages = ImmutableList.builder();
|
321
352
|
// }
|
322
353
|
//}
|
354
|
+
|
355
|
+
protected void loadDriverJar(String glob)
|
356
|
+
{
|
357
|
+
// TODO match glob
|
358
|
+
PluginClassLoader loader = (PluginClassLoader) getClass().getClassLoader();
|
359
|
+
loader.addPath(Paths.get(glob));
|
360
|
+
}
|
323
361
|
}
|
@@ -9,16 +9,22 @@ public class JdbcColumn
|
|
9
9
|
private String name;
|
10
10
|
private String typeName;
|
11
11
|
private int sqlType;
|
12
|
+
private int precision;
|
13
|
+
private int scale;
|
12
14
|
|
13
15
|
@JsonCreator
|
14
16
|
public JdbcColumn(
|
15
17
|
@JsonProperty("name") String name,
|
16
18
|
@JsonProperty("typeName") String typeName,
|
17
|
-
@JsonProperty("sqlType") int sqlType
|
19
|
+
@JsonProperty("sqlType") int sqlType,
|
20
|
+
@JsonProperty("precision") int precision,
|
21
|
+
@JsonProperty("scale") int scale)
|
18
22
|
{
|
19
23
|
this.name = name;
|
20
24
|
this.typeName = typeName;
|
21
25
|
this.sqlType = sqlType;
|
26
|
+
this.precision = precision;
|
27
|
+
this.scale = scale;
|
22
28
|
}
|
23
29
|
|
24
30
|
@JsonProperty("name")
|
@@ -38,4 +44,17 @@ public class JdbcColumn
|
|
38
44
|
{
|
39
45
|
return sqlType;
|
40
46
|
}
|
47
|
+
|
48
|
+
|
49
|
+
@JsonProperty("precision")
|
50
|
+
public int getPrecision()
|
51
|
+
{
|
52
|
+
return precision;
|
53
|
+
}
|
54
|
+
|
55
|
+
@JsonProperty("scale")
|
56
|
+
public int getScale()
|
57
|
+
{
|
58
|
+
return scale;
|
59
|
+
}
|
41
60
|
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
package org.embulk.input.jdbc;
|
2
|
+
|
3
|
+
import org.embulk.config.Config;
|
4
|
+
import org.embulk.config.ConfigDefault;
|
5
|
+
import org.embulk.config.ConfigInject;
|
6
|
+
import org.embulk.config.Task;
|
7
|
+
import org.embulk.spi.time.TimestampFormat;
|
8
|
+
import org.embulk.spi.type.Type;
|
9
|
+
import org.joda.time.DateTimeZone;
|
10
|
+
import org.jruby.embed.ScriptingContainer;
|
11
|
+
|
12
|
+
import com.google.common.base.Optional;
|
13
|
+
|
14
|
+
public interface JdbcColumnOption
|
15
|
+
extends Task
|
16
|
+
{
|
17
|
+
@Config("value_type")
|
18
|
+
@ConfigDefault("\"coalesce\"")
|
19
|
+
public String getValueType();
|
20
|
+
|
21
|
+
@Config("type")
|
22
|
+
@ConfigDefault("null")
|
23
|
+
public Optional<Type> getType();
|
24
|
+
|
25
|
+
@Config("timestamp_format")
|
26
|
+
@ConfigDefault("null")
|
27
|
+
public Optional<TimestampFormat> getTimestampFormat();
|
28
|
+
|
29
|
+
@Config("timezone")
|
30
|
+
@ConfigDefault("null")
|
31
|
+
public Optional<DateTimeZone> getTimeZone();
|
32
|
+
|
33
|
+
// required by TimestampFormatter
|
34
|
+
@ConfigInject
|
35
|
+
public ScriptingContainer getJRuby();
|
36
|
+
}
|
@@ -56,12 +56,12 @@ public class JdbcInputConnection
|
|
56
56
|
ImmutableList.Builder<JdbcColumn> columns = ImmutableList.builder();
|
57
57
|
for (int i=0; i < metadata.getColumnCount(); i++) {
|
58
58
|
int index = i + 1; // JDBC column index begins from 1
|
59
|
-
String name = metadata.
|
59
|
+
String name = metadata.getColumnLabel(index);
|
60
60
|
String typeName = metadata.getColumnTypeName(index);
|
61
61
|
int sqlType = metadata.getColumnType(index);
|
62
|
-
|
63
|
-
|
64
|
-
columns.add(new JdbcColumn(name, typeName, sqlType));
|
62
|
+
int scale = metadata.getScale(index);
|
63
|
+
int precision = metadata.getPrecision(index);
|
64
|
+
columns.add(new JdbcColumn(name, typeName, sqlType, precision, scale));
|
65
65
|
}
|
66
66
|
return new JdbcSchema(columns.build());
|
67
67
|
}
|
@@ -0,0 +1,76 @@
|
|
1
|
+
package org.embulk.input.jdbc.getter;
|
2
|
+
|
3
|
+
import java.sql.ResultSet;
|
4
|
+
import java.sql.SQLException;
|
5
|
+
import org.embulk.spi.Column;
|
6
|
+
import org.embulk.spi.ColumnVisitor;
|
7
|
+
import org.embulk.spi.PageBuilder;
|
8
|
+
import org.embulk.spi.type.Type;
|
9
|
+
|
10
|
+
public abstract class AbstractColumnGetter implements ColumnGetter, ColumnVisitor
|
11
|
+
{
|
12
|
+
protected final PageBuilder to;
|
13
|
+
private final Type toType;
|
14
|
+
|
15
|
+
public AbstractColumnGetter(PageBuilder to, Type toType)
|
16
|
+
{
|
17
|
+
this.to = to;
|
18
|
+
this.toType = toType;
|
19
|
+
}
|
20
|
+
|
21
|
+
@Override
|
22
|
+
public void getAndSet(ResultSet from, int fromIndex,
|
23
|
+
Column toColumn) throws SQLException {
|
24
|
+
|
25
|
+
fetch(from, fromIndex);
|
26
|
+
if (from.wasNull()) {
|
27
|
+
to.setNull(toColumn);
|
28
|
+
} else {
|
29
|
+
toColumn.visit(this);
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
protected abstract void fetch(ResultSet from, int fromIndex) throws SQLException;
|
34
|
+
|
35
|
+
@Override
|
36
|
+
public void booleanColumn(Column column)
|
37
|
+
{
|
38
|
+
to.setNull(column);
|
39
|
+
}
|
40
|
+
|
41
|
+
@Override
|
42
|
+
public void longColumn(Column column)
|
43
|
+
{
|
44
|
+
to.setNull(column);
|
45
|
+
}
|
46
|
+
|
47
|
+
@Override
|
48
|
+
public void doubleColumn(Column column)
|
49
|
+
{
|
50
|
+
to.setNull(column);
|
51
|
+
}
|
52
|
+
|
53
|
+
@Override
|
54
|
+
public void stringColumn(Column column)
|
55
|
+
{
|
56
|
+
to.setNull(column);
|
57
|
+
}
|
58
|
+
|
59
|
+
@Override
|
60
|
+
public void timestampColumn(Column column)
|
61
|
+
{
|
62
|
+
to.setNull(column);
|
63
|
+
}
|
64
|
+
|
65
|
+
@Override
|
66
|
+
public Type getToType()
|
67
|
+
{
|
68
|
+
if (toType == null) {
|
69
|
+
return getDefaultToType();
|
70
|
+
}
|
71
|
+
return toType;
|
72
|
+
}
|
73
|
+
|
74
|
+
protected abstract Type getDefaultToType();
|
75
|
+
|
76
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
package org.embulk.input.jdbc.getter;
|
2
|
+
|
3
|
+
import org.embulk.spi.Column;
|
4
|
+
import org.embulk.spi.PageBuilder;
|
5
|
+
import org.embulk.spi.time.Timestamp;
|
6
|
+
import org.embulk.spi.time.TimestampFormatter;
|
7
|
+
import org.embulk.spi.type.Type;
|
8
|
+
|
9
|
+
public abstract class AbstractTimestampColumnGetter
|
10
|
+
extends AbstractColumnGetter
|
11
|
+
{
|
12
|
+
private final TimestampFormatter timestampFormatter;
|
13
|
+
protected Timestamp value;
|
14
|
+
|
15
|
+
public AbstractTimestampColumnGetter(PageBuilder to, Type toType, TimestampFormatter timestampFormatter)
|
16
|
+
{
|
17
|
+
super(to, toType);
|
18
|
+
|
19
|
+
this.timestampFormatter = timestampFormatter;
|
20
|
+
}
|
21
|
+
|
22
|
+
@Override
|
23
|
+
public void stringColumn(Column column)
|
24
|
+
{
|
25
|
+
to.setString(column, timestampFormatter.format(value));
|
26
|
+
}
|
27
|
+
|
28
|
+
@Override
|
29
|
+
public void timestampColumn(Column column)
|
30
|
+
{
|
31
|
+
to.setTimestamp(column, value);
|
32
|
+
}
|
33
|
+
}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
package org.embulk.input.jdbc.getter;
|
2
|
+
|
3
|
+
import java.math.BigDecimal;
|
4
|
+
import java.sql.ResultSet;
|
5
|
+
import java.sql.SQLException;
|
6
|
+
import org.embulk.spi.Column;
|
7
|
+
import org.embulk.spi.PageBuilder;
|
8
|
+
import org.embulk.spi.type.Type;
|
9
|
+
import org.embulk.spi.type.Types;
|
10
|
+
|
11
|
+
public class BigDecimalColumnGetter
|
12
|
+
extends AbstractColumnGetter
|
13
|
+
{
|
14
|
+
private BigDecimal value;
|
15
|
+
|
16
|
+
public BigDecimalColumnGetter(PageBuilder to, Type toType)
|
17
|
+
{
|
18
|
+
super(to, toType);
|
19
|
+
}
|
20
|
+
|
21
|
+
@Override
|
22
|
+
protected void fetch(ResultSet from, int fromIndex) throws SQLException
|
23
|
+
{
|
24
|
+
value = from.getBigDecimal(fromIndex);
|
25
|
+
}
|
26
|
+
|
27
|
+
@Override
|
28
|
+
protected Type getDefaultToType()
|
29
|
+
{
|
30
|
+
return Types.DOUBLE;
|
31
|
+
}
|
32
|
+
|
33
|
+
@Override
|
34
|
+
public void booleanColumn(Column column)
|
35
|
+
{
|
36
|
+
to.setBoolean(column, value.signum() > 0);
|
37
|
+
}
|
38
|
+
|
39
|
+
@Override
|
40
|
+
public void longColumn(Column column)
|
41
|
+
{
|
42
|
+
to.setLong(column, value.longValue());
|
43
|
+
}
|
44
|
+
|
45
|
+
@Override
|
46
|
+
public void doubleColumn(Column column)
|
47
|
+
{
|
48
|
+
// rounded value could be Double.NEGATIVE_INFINITY or Double.POSITIVE_INFINITY.
|
49
|
+
double rounded = value.doubleValue();
|
50
|
+
to.setDouble(column, rounded);
|
51
|
+
}
|
52
|
+
|
53
|
+
@Override
|
54
|
+
public void stringColumn(Column column)
|
55
|
+
{
|
56
|
+
to.setString(column, value.toPlainString());
|
57
|
+
}
|
58
|
+
|
59
|
+
}
|
@@ -0,0 +1,56 @@
|
|
1
|
+
package org.embulk.input.jdbc.getter;
|
2
|
+
|
3
|
+
import java.sql.ResultSet;
|
4
|
+
import java.sql.SQLException;
|
5
|
+
import org.embulk.spi.Column;
|
6
|
+
import org.embulk.spi.PageBuilder;
|
7
|
+
import org.embulk.spi.type.Type;
|
8
|
+
import org.embulk.spi.type.Types;
|
9
|
+
|
10
|
+
public class BooleanColumnGetter
|
11
|
+
extends AbstractColumnGetter
|
12
|
+
{
|
13
|
+
private boolean value;
|
14
|
+
|
15
|
+
public BooleanColumnGetter(PageBuilder to, Type toType)
|
16
|
+
{
|
17
|
+
super(to, toType);
|
18
|
+
}
|
19
|
+
|
20
|
+
@Override
|
21
|
+
protected void fetch(ResultSet from, int fromIndex) throws SQLException
|
22
|
+
{
|
23
|
+
value = from.getBoolean(fromIndex);
|
24
|
+
}
|
25
|
+
|
26
|
+
@Override
|
27
|
+
protected Type getDefaultToType()
|
28
|
+
{
|
29
|
+
return Types.BOOLEAN;
|
30
|
+
}
|
31
|
+
|
32
|
+
@Override
|
33
|
+
public void booleanColumn(Column column)
|
34
|
+
{
|
35
|
+
to.setBoolean(column, value);
|
36
|
+
}
|
37
|
+
|
38
|
+
@Override
|
39
|
+
public void longColumn(Column column)
|
40
|
+
{
|
41
|
+
to.setLong(column, value ? 1L : 0L);
|
42
|
+
}
|
43
|
+
|
44
|
+
@Override
|
45
|
+
public void doubleColumn(Column column)
|
46
|
+
{
|
47
|
+
to.setDouble(column, value ? 1.0 : 0.0);
|
48
|
+
}
|
49
|
+
|
50
|
+
@Override
|
51
|
+
public void stringColumn(Column column)
|
52
|
+
{
|
53
|
+
to.setString(column, Boolean.toString(value));
|
54
|
+
}
|
55
|
+
|
56
|
+
}
|
@@ -3,13 +3,12 @@ package org.embulk.input.jdbc.getter;
|
|
3
3
|
import java.sql.ResultSet;
|
4
4
|
import java.sql.SQLException;
|
5
5
|
import org.embulk.spi.Column;
|
6
|
-
import org.embulk.spi.PageBuilder;
|
7
6
|
import org.embulk.spi.type.Type;
|
8
7
|
|
9
8
|
public interface ColumnGetter
|
10
9
|
{
|
11
10
|
public void getAndSet(ResultSet from, int fromIndex,
|
12
|
-
|
11
|
+
Column toColumn) throws SQLException;
|
13
12
|
|
14
13
|
public Type getToType();
|
15
14
|
}
|
@@ -1,38 +1,84 @@
|
|
1
1
|
package org.embulk.input.jdbc.getter;
|
2
2
|
|
3
3
|
import java.sql.Types;
|
4
|
+
|
5
|
+
import org.embulk.config.ConfigException;
|
4
6
|
import org.embulk.input.jdbc.JdbcColumn;
|
5
|
-
import org.embulk.input.jdbc.
|
6
|
-
import org.embulk.
|
7
|
-
import org.embulk.
|
8
|
-
import org.embulk.
|
9
|
-
import org.embulk.
|
10
|
-
import org.
|
11
|
-
import org.embulk.input.jdbc.getter.ColumnGetters.TimestampColumnGetter;
|
12
|
-
import org.embulk.input.jdbc.getter.ColumnGetters.BigDecimalToDoubleColumnGetter;
|
7
|
+
import org.embulk.input.jdbc.JdbcColumnOption;
|
8
|
+
import org.embulk.spi.PageBuilder;
|
9
|
+
import org.embulk.spi.time.TimestampFormatter;
|
10
|
+
import org.embulk.spi.type.TimestampType;
|
11
|
+
import org.embulk.spi.type.Type;
|
12
|
+
import org.joda.time.DateTimeZone;
|
13
13
|
|
14
14
|
public class ColumnGetterFactory
|
15
15
|
{
|
16
|
-
|
16
|
+
private final PageBuilder to;
|
17
|
+
private final DateTimeZone defaultTimeZone;
|
18
|
+
|
19
|
+
public ColumnGetterFactory(PageBuilder to, DateTimeZone defaultTimeZone)
|
20
|
+
{
|
21
|
+
this.to = to;
|
22
|
+
this.defaultTimeZone = defaultTimeZone;
|
23
|
+
}
|
24
|
+
|
25
|
+
public ColumnGetter newColumnGetter(JdbcColumn column, JdbcColumnOption option)
|
26
|
+
{
|
27
|
+
return newColumnGetter(column, option, option.getValueType());
|
28
|
+
}
|
29
|
+
|
30
|
+
private ColumnGetter newColumnGetter(JdbcColumn column, JdbcColumnOption option, String valueType)
|
31
|
+
{
|
32
|
+
Type toType = getToType(option);
|
33
|
+
switch(valueType) {
|
34
|
+
case "coalesce":
|
35
|
+
return newColumnGetter(column, option, sqlTypeToValueType(column, column.getSqlType()));
|
36
|
+
case "long":
|
37
|
+
return new LongColumnGetter(to, toType);
|
38
|
+
case "float":
|
39
|
+
return new FloatColumnGetter(to, toType);
|
40
|
+
case "double":
|
41
|
+
return new DoubleColumnGetter(to, toType);
|
42
|
+
case "boolean":
|
43
|
+
return new BooleanColumnGetter(to, toType);
|
44
|
+
case "string":
|
45
|
+
return new StringColumnGetter(to, toType);
|
46
|
+
case "date":
|
47
|
+
return new DateColumnGetter(to, toType, newTimestampFormatter(option, DateColumnGetter.DEFAULT_FORMAT));
|
48
|
+
case "time":
|
49
|
+
return new TimeColumnGetter(to, toType, newTimestampFormatter(option, DateColumnGetter.DEFAULT_FORMAT));
|
50
|
+
case "timestamp":
|
51
|
+
return new TimestampColumnGetter(to, toType, newTimestampFormatter(option, DateColumnGetter.DEFAULT_FORMAT));
|
52
|
+
case "decimal":
|
53
|
+
return new BigDecimalColumnGetter(to, toType);
|
54
|
+
default:
|
55
|
+
throw new ConfigException(String.format("Unknown value_type '%s' for column '%s'", option.getValueType(), column.getName()));
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
private String sqlTypeToValueType(JdbcColumn column, int sqlType)
|
17
60
|
{
|
18
|
-
switch(
|
61
|
+
switch(sqlType) {
|
19
62
|
// getLong
|
20
63
|
case Types.TINYINT:
|
21
64
|
case Types.SMALLINT:
|
22
65
|
case Types.INTEGER:
|
23
66
|
case Types.BIGINT:
|
24
|
-
return
|
67
|
+
return "long";
|
25
68
|
|
26
|
-
//
|
27
|
-
case Types.DOUBLE:
|
69
|
+
// getFloat
|
28
70
|
case Types.FLOAT:
|
29
71
|
case Types.REAL:
|
30
|
-
return
|
72
|
+
return "float";
|
73
|
+
|
74
|
+
// getDouble
|
75
|
+
case Types.DOUBLE:
|
76
|
+
return "double";
|
31
77
|
|
32
78
|
// getBool
|
33
79
|
case Types.BOOLEAN:
|
34
80
|
case Types.BIT: // JDBC BIT is boolean, unlike SQL-92
|
35
|
-
return
|
81
|
+
return "boolean";
|
36
82
|
|
37
83
|
// getString, Clob
|
38
84
|
case Types.CHAR:
|
@@ -42,7 +88,7 @@ public class ColumnGetterFactory
|
|
42
88
|
case Types.NCHAR:
|
43
89
|
case Types.NVARCHAR:
|
44
90
|
case Types.LONGNVARCHAR:
|
45
|
-
return
|
91
|
+
return "string";
|
46
92
|
|
47
93
|
// TODO
|
48
94
|
//// getBytes Blob
|
@@ -54,15 +100,15 @@ public class ColumnGetterFactory
|
|
54
100
|
|
55
101
|
// getDate
|
56
102
|
case Types.DATE:
|
57
|
-
return
|
103
|
+
return "date";
|
58
104
|
|
59
105
|
// getTime
|
60
106
|
case Types.TIME:
|
61
|
-
return
|
107
|
+
return "time";
|
62
108
|
|
63
109
|
// getTimestamp
|
64
110
|
case Types.TIMESTAMP:
|
65
|
-
return
|
111
|
+
return "timestamp";
|
66
112
|
|
67
113
|
// TODO
|
68
114
|
//// Null
|
@@ -72,7 +118,7 @@ public class ColumnGetterFactory
|
|
72
118
|
// getBigDecimal
|
73
119
|
case Types.NUMERIC:
|
74
120
|
case Types.DECIMAL:
|
75
|
-
return
|
121
|
+
return "decimal";
|
76
122
|
|
77
123
|
// others
|
78
124
|
case Types.ARRAY: // array
|
@@ -89,6 +135,26 @@ public class ColumnGetterFactory
|
|
89
135
|
}
|
90
136
|
}
|
91
137
|
|
138
|
+
private Type getToType(JdbcColumnOption option)
|
139
|
+
{
|
140
|
+
if (!option.getType().isPresent()) {
|
141
|
+
return null;
|
142
|
+
}
|
143
|
+
Type toType = option.getType().get();
|
144
|
+
if (toType instanceof TimestampType && option.getTimestampFormat().isPresent()) {
|
145
|
+
toType = ((TimestampType)toType).withFormat(option.getTimestampFormat().get().getFormat());
|
146
|
+
}
|
147
|
+
return toType;
|
148
|
+
}
|
149
|
+
|
150
|
+
private TimestampFormatter newTimestampFormatter(JdbcColumnOption option, String defaultTimestampFormat)
|
151
|
+
{
|
152
|
+
return new TimestampFormatter(
|
153
|
+
option.getJRuby(),
|
154
|
+
option.getTimestampFormat().isPresent() ? option.getTimestampFormat().get().getFormat() : defaultTimestampFormat,
|
155
|
+
option.getTimeZone().or(defaultTimeZone));
|
156
|
+
}
|
157
|
+
|
92
158
|
private static UnsupportedOperationException unsupportedOperationException(JdbcColumn column)
|
93
159
|
{
|
94
160
|
throw new UnsupportedOperationException(
|
@@ -0,0 +1,37 @@
|
|
1
|
+
package org.embulk.input.jdbc.getter;
|
2
|
+
|
3
|
+
import java.sql.Date;
|
4
|
+
import java.sql.ResultSet;
|
5
|
+
import java.sql.SQLException;
|
6
|
+
import org.embulk.spi.PageBuilder;
|
7
|
+
import org.embulk.spi.time.Timestamp;
|
8
|
+
import org.embulk.spi.time.TimestampFormatter;
|
9
|
+
import org.embulk.spi.type.Type;
|
10
|
+
import org.embulk.spi.type.Types;
|
11
|
+
|
12
|
+
public class DateColumnGetter
|
13
|
+
extends AbstractTimestampColumnGetter
|
14
|
+
{
|
15
|
+
static final String DEFAULT_FORMAT = "%Y-%m-%d";
|
16
|
+
|
17
|
+
public DateColumnGetter(PageBuilder to, Type toType, TimestampFormatter timestampFormatter)
|
18
|
+
{
|
19
|
+
super(to, toType, timestampFormatter);
|
20
|
+
}
|
21
|
+
|
22
|
+
@Override
|
23
|
+
protected void fetch(ResultSet from, int fromIndex) throws SQLException
|
24
|
+
{
|
25
|
+
Date date = from.getDate(fromIndex);
|
26
|
+
if (date != null) {
|
27
|
+
value = Timestamp.ofEpochMilli(date.getTime());
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
@Override
|
32
|
+
protected Type getDefaultToType()
|
33
|
+
{
|
34
|
+
return Types.TIMESTAMP.withFormat(DEFAULT_FORMAT);
|
35
|
+
}
|
36
|
+
|
37
|
+
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
package org.embulk.input.jdbc.getter;
|
2
|
+
|
3
|
+
import java.math.RoundingMode;
|
4
|
+
import java.sql.ResultSet;
|
5
|
+
import java.sql.SQLException;
|
6
|
+
import org.embulk.spi.Column;
|
7
|
+
import org.embulk.spi.PageBuilder;
|
8
|
+
import org.embulk.spi.type.Type;
|
9
|
+
import org.embulk.spi.type.Types;
|
10
|
+
import com.google.common.math.DoubleMath;
|
11
|
+
|
12
|
+
public class DoubleColumnGetter
|
13
|
+
extends AbstractColumnGetter
|
14
|
+
{
|
15
|
+
private double value;
|
16
|
+
|
17
|
+
public DoubleColumnGetter(PageBuilder to, Type toType)
|
18
|
+
{
|
19
|
+
super(to, toType);
|
20
|
+
}
|
21
|
+
|
22
|
+
@Override
|
23
|
+
protected void fetch(ResultSet from, int fromIndex) throws SQLException
|
24
|
+
{
|
25
|
+
value = from.getDouble(fromIndex);
|
26
|
+
}
|
27
|
+
|
28
|
+
@Override
|
29
|
+
protected Type getDefaultToType()
|
30
|
+
{
|
31
|
+
return Types.DOUBLE;
|
32
|
+
}
|
33
|
+
|
34
|
+
@Override
|
35
|
+
public void booleanColumn(Column column)
|
36
|
+
{
|
37
|
+
to.setBoolean(column, value > 0.0);
|
38
|
+
}
|
39
|
+
|
40
|
+
@Override
|
41
|
+
public void longColumn(Column column)
|
42
|
+
{
|
43
|
+
long l;
|
44
|
+
try {
|
45
|
+
// TODO configurable rounding mode
|
46
|
+
l = DoubleMath.roundToLong(value, RoundingMode.HALF_UP);
|
47
|
+
} catch (ArithmeticException e) {
|
48
|
+
// NaN / Infinite / -Infinite
|
49
|
+
super.longColumn(column);
|
50
|
+
return;
|
51
|
+
}
|
52
|
+
to.setLong(column, l);
|
53
|
+
}
|
54
|
+
|
55
|
+
@Override
|
56
|
+
public void doubleColumn(Column column)
|
57
|
+
{
|
58
|
+
to.setDouble(column, value);
|
59
|
+
}
|
60
|
+
|
61
|
+
@Override
|
62
|
+
public void stringColumn(Column column)
|
63
|
+
{
|
64
|
+
to.setString(column, Double.toString(value));
|
65
|
+
}
|
66
|
+
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
package org.embulk.input.jdbc.getter;
|
2
|
+
|
3
|
+
import java.math.RoundingMode;
|
4
|
+
import java.sql.ResultSet;
|
5
|
+
import java.sql.SQLException;
|
6
|
+
import org.embulk.spi.Column;
|
7
|
+
import org.embulk.spi.PageBuilder;
|
8
|
+
import org.embulk.spi.type.Type;
|
9
|
+
import org.embulk.spi.type.Types;
|
10
|
+
import com.google.common.math.DoubleMath;
|
11
|
+
|
12
|
+
public class FloatColumnGetter
|
13
|
+
extends AbstractColumnGetter
|
14
|
+
{
|
15
|
+
private float value;
|
16
|
+
|
17
|
+
public FloatColumnGetter(PageBuilder to, Type toType)
|
18
|
+
{
|
19
|
+
super(to, toType);
|
20
|
+
}
|
21
|
+
|
22
|
+
@Override
|
23
|
+
protected void fetch(ResultSet from, int fromIndex) throws SQLException
|
24
|
+
{
|
25
|
+
value = from.getFloat(fromIndex);
|
26
|
+
}
|
27
|
+
|
28
|
+
@Override
|
29
|
+
protected Type getDefaultToType()
|
30
|
+
{
|
31
|
+
return Types.DOUBLE;
|
32
|
+
}
|
33
|
+
|
34
|
+
@Override
|
35
|
+
public void booleanColumn(Column column)
|
36
|
+
{
|
37
|
+
to.setBoolean(column, value > 0.0);
|
38
|
+
}
|
39
|
+
|
40
|
+
@Override
|
41
|
+
public void longColumn(Column column)
|
42
|
+
{
|
43
|
+
long l;
|
44
|
+
try {
|
45
|
+
// TODO configurable rounding mode
|
46
|
+
l = DoubleMath.roundToLong(value, RoundingMode.HALF_UP);
|
47
|
+
} catch (ArithmeticException e) {
|
48
|
+
// NaN / Infinite / -Infinite
|
49
|
+
super.longColumn(column);
|
50
|
+
return;
|
51
|
+
}
|
52
|
+
to.setLong(column, l);
|
53
|
+
}
|
54
|
+
|
55
|
+
@Override
|
56
|
+
public void doubleColumn(Column column)
|
57
|
+
{
|
58
|
+
to.setDouble(column, value);
|
59
|
+
}
|
60
|
+
|
61
|
+
@Override
|
62
|
+
public void stringColumn(Column column)
|
63
|
+
{
|
64
|
+
to.setString(column, Float.toString(value));
|
65
|
+
}
|
66
|
+
}
|
@@ -0,0 +1,56 @@
|
|
1
|
+
package org.embulk.input.jdbc.getter;
|
2
|
+
|
3
|
+
import java.sql.ResultSet;
|
4
|
+
import java.sql.SQLException;
|
5
|
+
import org.embulk.spi.Column;
|
6
|
+
import org.embulk.spi.PageBuilder;
|
7
|
+
import org.embulk.spi.type.Type;
|
8
|
+
import org.embulk.spi.type.Types;
|
9
|
+
|
10
|
+
public class LongColumnGetter
|
11
|
+
extends AbstractColumnGetter
|
12
|
+
{
|
13
|
+
private long value;
|
14
|
+
|
15
|
+
public LongColumnGetter(PageBuilder to, Type toType)
|
16
|
+
{
|
17
|
+
super(to, toType);
|
18
|
+
}
|
19
|
+
|
20
|
+
@Override
|
21
|
+
protected void fetch(ResultSet from, int fromIndex) throws SQLException
|
22
|
+
{
|
23
|
+
value = from.getLong(fromIndex);
|
24
|
+
}
|
25
|
+
|
26
|
+
@Override
|
27
|
+
protected Type getDefaultToType()
|
28
|
+
{
|
29
|
+
return Types.LONG;
|
30
|
+
}
|
31
|
+
|
32
|
+
@Override
|
33
|
+
public void booleanColumn(Column column)
|
34
|
+
{
|
35
|
+
to.setBoolean(column, value > 0L);
|
36
|
+
}
|
37
|
+
|
38
|
+
@Override
|
39
|
+
public void longColumn(Column column)
|
40
|
+
{
|
41
|
+
to.setLong(column, value);
|
42
|
+
}
|
43
|
+
|
44
|
+
@Override
|
45
|
+
public void doubleColumn(Column column)
|
46
|
+
{
|
47
|
+
to.setDouble(column, value);
|
48
|
+
}
|
49
|
+
|
50
|
+
@Override
|
51
|
+
public void stringColumn(Column column)
|
52
|
+
{
|
53
|
+
to.setString(column, Long.toString(value));
|
54
|
+
}
|
55
|
+
|
56
|
+
}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
package org.embulk.input.jdbc.getter;
|
2
|
+
|
3
|
+
import java.sql.ResultSet;
|
4
|
+
import java.sql.SQLException;
|
5
|
+
import org.embulk.spi.Column;
|
6
|
+
import org.embulk.spi.PageBuilder;
|
7
|
+
import org.embulk.spi.type.Type;
|
8
|
+
import org.embulk.spi.type.Types;
|
9
|
+
|
10
|
+
public class StringColumnGetter
|
11
|
+
extends AbstractColumnGetter
|
12
|
+
{
|
13
|
+
private String value;
|
14
|
+
|
15
|
+
public StringColumnGetter(PageBuilder to, Type toType)
|
16
|
+
{
|
17
|
+
super(to, toType);
|
18
|
+
}
|
19
|
+
|
20
|
+
@Override
|
21
|
+
protected void fetch(ResultSet from, int fromIndex) throws SQLException
|
22
|
+
{
|
23
|
+
value = from.getString(fromIndex);
|
24
|
+
}
|
25
|
+
|
26
|
+
@Override
|
27
|
+
protected Type getDefaultToType()
|
28
|
+
{
|
29
|
+
return Types.STRING;
|
30
|
+
}
|
31
|
+
|
32
|
+
@Override
|
33
|
+
public void longColumn(Column column)
|
34
|
+
{
|
35
|
+
long l;
|
36
|
+
try {
|
37
|
+
l = Long.parseLong(value);
|
38
|
+
} catch (NumberFormatException e) {
|
39
|
+
super.longColumn(column);
|
40
|
+
return;
|
41
|
+
}
|
42
|
+
to.setLong(column, l);
|
43
|
+
}
|
44
|
+
|
45
|
+
@Override
|
46
|
+
public void doubleColumn(Column column)
|
47
|
+
{
|
48
|
+
double d;
|
49
|
+
try {
|
50
|
+
d = Double.parseDouble(value);
|
51
|
+
} catch (NumberFormatException e) {
|
52
|
+
super.doubleColumn(column);
|
53
|
+
return;
|
54
|
+
}
|
55
|
+
to.setDouble(column, d);
|
56
|
+
}
|
57
|
+
|
58
|
+
@Override
|
59
|
+
public void stringColumn(Column column)
|
60
|
+
{
|
61
|
+
to.setString(column, value);
|
62
|
+
}
|
63
|
+
|
64
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
package org.embulk.input.jdbc.getter;
|
2
|
+
|
3
|
+
import java.sql.ResultSet;
|
4
|
+
import java.sql.SQLException;
|
5
|
+
import java.sql.Time;
|
6
|
+
import org.embulk.spi.PageBuilder;
|
7
|
+
import org.embulk.spi.time.Timestamp;
|
8
|
+
import org.embulk.spi.time.TimestampFormatter;
|
9
|
+
import org.embulk.spi.type.Type;
|
10
|
+
import org.embulk.spi.type.Types;
|
11
|
+
|
12
|
+
public class TimeColumnGetter
|
13
|
+
extends AbstractTimestampColumnGetter
|
14
|
+
{
|
15
|
+
static final String DEFAULT_FORMAT = "%H:%M:%S";
|
16
|
+
|
17
|
+
public TimeColumnGetter(PageBuilder to, Type toType, TimestampFormatter timestampFormatter)
|
18
|
+
{
|
19
|
+
super(to, toType, timestampFormatter);
|
20
|
+
}
|
21
|
+
|
22
|
+
@Override
|
23
|
+
protected void fetch(ResultSet from, int fromIndex) throws SQLException
|
24
|
+
{
|
25
|
+
Time time = from.getTime(fromIndex);
|
26
|
+
if (time != null) {
|
27
|
+
value = Timestamp.ofEpochMilli(time.getTime());
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
@Override
|
32
|
+
protected Type getDefaultToType()
|
33
|
+
{
|
34
|
+
return Types.TIMESTAMP.withFormat(DEFAULT_FORMAT);
|
35
|
+
}
|
36
|
+
|
37
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
package org.embulk.input.jdbc.getter;
|
2
|
+
|
3
|
+
import java.sql.ResultSet;
|
4
|
+
import java.sql.SQLException;
|
5
|
+
import org.embulk.spi.PageBuilder;
|
6
|
+
import org.embulk.spi.time.Timestamp;
|
7
|
+
import org.embulk.spi.time.TimestampFormatter;
|
8
|
+
import org.embulk.spi.type.Type;
|
9
|
+
import org.embulk.spi.type.Types;
|
10
|
+
|
11
|
+
public class TimestampColumnGetter
|
12
|
+
extends AbstractTimestampColumnGetter
|
13
|
+
{
|
14
|
+
static final String DEFAULT_FORMAT = "%Y-%m-%d %H:%M:%S";
|
15
|
+
|
16
|
+
public TimestampColumnGetter(PageBuilder to, Type toType, TimestampFormatter timestampFormatter)
|
17
|
+
{
|
18
|
+
super(to, toType, timestampFormatter);
|
19
|
+
}
|
20
|
+
|
21
|
+
@Override
|
22
|
+
protected void fetch(ResultSet from, int fromIndex) throws SQLException
|
23
|
+
{
|
24
|
+
java.sql.Timestamp timestamp = from.getTimestamp(fromIndex);
|
25
|
+
if (timestamp != null) {
|
26
|
+
value = Timestamp.ofEpochSecond(timestamp.getTime() / 1000, timestamp.getNanos());
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
@Override
|
31
|
+
protected Type getDefaultToType()
|
32
|
+
{
|
33
|
+
return Types.TIMESTAMP.withFormat(DEFAULT_FORMAT);
|
34
|
+
}
|
35
|
+
|
36
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-input-jdbc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sadayuki Furuhashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Selects records from a table.
|
14
14
|
email:
|
@@ -22,12 +22,23 @@ files:
|
|
22
22
|
- src/main/java/org/embulk/input/JdbcInputPlugin.java
|
23
23
|
- src/main/java/org/embulk/input/jdbc/AbstractJdbcInputPlugin.java
|
24
24
|
- src/main/java/org/embulk/input/jdbc/JdbcColumn.java
|
25
|
+
- src/main/java/org/embulk/input/jdbc/JdbcColumnOption.java
|
25
26
|
- src/main/java/org/embulk/input/jdbc/JdbcInputConnection.java
|
26
27
|
- src/main/java/org/embulk/input/jdbc/JdbcSchema.java
|
28
|
+
- src/main/java/org/embulk/input/jdbc/getter/AbstractColumnGetter.java
|
29
|
+
- src/main/java/org/embulk/input/jdbc/getter/AbstractTimestampColumnGetter.java
|
30
|
+
- src/main/java/org/embulk/input/jdbc/getter/BigDecimalColumnGetter.java
|
31
|
+
- src/main/java/org/embulk/input/jdbc/getter/BooleanColumnGetter.java
|
27
32
|
- src/main/java/org/embulk/input/jdbc/getter/ColumnGetter.java
|
28
33
|
- src/main/java/org/embulk/input/jdbc/getter/ColumnGetterFactory.java
|
29
|
-
- src/main/java/org/embulk/input/jdbc/getter/
|
30
|
-
-
|
34
|
+
- src/main/java/org/embulk/input/jdbc/getter/DateColumnGetter.java
|
35
|
+
- src/main/java/org/embulk/input/jdbc/getter/DoubleColumnGetter.java
|
36
|
+
- src/main/java/org/embulk/input/jdbc/getter/FloatColumnGetter.java
|
37
|
+
- src/main/java/org/embulk/input/jdbc/getter/LongColumnGetter.java
|
38
|
+
- src/main/java/org/embulk/input/jdbc/getter/StringColumnGetter.java
|
39
|
+
- src/main/java/org/embulk/input/jdbc/getter/TimeColumnGetter.java
|
40
|
+
- src/main/java/org/embulk/input/jdbc/getter/TimestampColumnGetter.java
|
41
|
+
- classpath/embulk-input-jdbc-0.5.0.jar
|
31
42
|
homepage: https://github.com/embulk/embulk-input-jdbc
|
32
43
|
licenses:
|
33
44
|
- Apache 2.0
|
Binary file
|
@@ -1,197 +0,0 @@
|
|
1
|
-
package org.embulk.input.jdbc.getter;
|
2
|
-
|
3
|
-
import java.sql.ResultSet;
|
4
|
-
import java.sql.SQLException;
|
5
|
-
import java.math.BigDecimal;
|
6
|
-
import org.embulk.spi.Column;
|
7
|
-
import org.embulk.spi.PageBuilder;
|
8
|
-
import org.embulk.spi.Column;
|
9
|
-
import org.embulk.spi.time.Timestamp;
|
10
|
-
import org.embulk.spi.type.Type;
|
11
|
-
import org.embulk.spi.type.Types;
|
12
|
-
|
13
|
-
public class ColumnGetters
|
14
|
-
{
|
15
|
-
private ColumnGetters() { }
|
16
|
-
|
17
|
-
public static class BooleanColumnGetter
|
18
|
-
implements ColumnGetter
|
19
|
-
{
|
20
|
-
@Override
|
21
|
-
public void getAndSet(ResultSet from, int fromIndex,
|
22
|
-
PageBuilder to, Column toColumn) throws SQLException
|
23
|
-
{
|
24
|
-
boolean v = from.getBoolean(fromIndex);
|
25
|
-
if (from.wasNull()) {
|
26
|
-
to.setNull(toColumn);
|
27
|
-
} else {
|
28
|
-
to.setBoolean(toColumn, v);
|
29
|
-
}
|
30
|
-
}
|
31
|
-
|
32
|
-
@Override
|
33
|
-
public Type getToType()
|
34
|
-
{
|
35
|
-
return Types.BOOLEAN;
|
36
|
-
}
|
37
|
-
}
|
38
|
-
|
39
|
-
public static class LongColumnGetter
|
40
|
-
implements ColumnGetter
|
41
|
-
{
|
42
|
-
@Override
|
43
|
-
public void getAndSet(ResultSet from, int fromIndex,
|
44
|
-
PageBuilder to, Column toColumn) throws SQLException
|
45
|
-
{
|
46
|
-
long v = from.getLong(fromIndex);
|
47
|
-
if (from.wasNull()) {
|
48
|
-
to.setNull(toColumn);
|
49
|
-
} else {
|
50
|
-
to.setLong(toColumn, v);
|
51
|
-
}
|
52
|
-
}
|
53
|
-
|
54
|
-
@Override
|
55
|
-
public Type getToType()
|
56
|
-
{
|
57
|
-
return Types.LONG;
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
public static class DoubleColumnGetter
|
62
|
-
implements ColumnGetter
|
63
|
-
{
|
64
|
-
@Override
|
65
|
-
public void getAndSet(ResultSet from, int fromIndex,
|
66
|
-
PageBuilder to, Column toColumn) throws SQLException
|
67
|
-
{
|
68
|
-
double v = from.getDouble(fromIndex);
|
69
|
-
if (from.wasNull()) {
|
70
|
-
to.setNull(toColumn);
|
71
|
-
} else {
|
72
|
-
to.setDouble(toColumn, v);
|
73
|
-
}
|
74
|
-
}
|
75
|
-
|
76
|
-
@Override
|
77
|
-
public Type getToType()
|
78
|
-
{
|
79
|
-
return Types.DOUBLE;
|
80
|
-
}
|
81
|
-
}
|
82
|
-
|
83
|
-
public static class StringColumnGetter
|
84
|
-
implements ColumnGetter
|
85
|
-
{
|
86
|
-
@Override
|
87
|
-
public void getAndSet(ResultSet from, int fromIndex,
|
88
|
-
PageBuilder to, Column toColumn) throws SQLException
|
89
|
-
{
|
90
|
-
String v = from.getString(fromIndex);
|
91
|
-
if (from.wasNull()) {
|
92
|
-
to.setNull(toColumn);
|
93
|
-
} else {
|
94
|
-
to.setString(toColumn, v);
|
95
|
-
}
|
96
|
-
}
|
97
|
-
|
98
|
-
@Override
|
99
|
-
public Type getToType()
|
100
|
-
{
|
101
|
-
return Types.STRING;
|
102
|
-
}
|
103
|
-
}
|
104
|
-
|
105
|
-
public static class DateColumnGetter
|
106
|
-
implements ColumnGetter
|
107
|
-
{
|
108
|
-
@Override
|
109
|
-
public void getAndSet(ResultSet from, int fromIndex,
|
110
|
-
PageBuilder to, Column toColumn) throws SQLException
|
111
|
-
{
|
112
|
-
java.sql.Date v = from.getDate(fromIndex);
|
113
|
-
if (from.wasNull()) {
|
114
|
-
to.setNull(toColumn);
|
115
|
-
} else {
|
116
|
-
Timestamp t = Timestamp.ofEpochMilli(v.getTime());
|
117
|
-
to.setTimestamp(toColumn, t);
|
118
|
-
}
|
119
|
-
}
|
120
|
-
|
121
|
-
@Override
|
122
|
-
public Type getToType()
|
123
|
-
{
|
124
|
-
return Types.TIMESTAMP.withFormat("%Y-%m-%d");
|
125
|
-
}
|
126
|
-
}
|
127
|
-
|
128
|
-
public static class TimeColumnGetter
|
129
|
-
implements ColumnGetter
|
130
|
-
{
|
131
|
-
@Override
|
132
|
-
public void getAndSet(ResultSet from, int fromIndex,
|
133
|
-
PageBuilder to, Column toColumn) throws SQLException
|
134
|
-
{
|
135
|
-
java.sql.Time v = from.getTime(fromIndex);
|
136
|
-
if (from.wasNull()) {
|
137
|
-
to.setNull(toColumn);
|
138
|
-
} else {
|
139
|
-
Timestamp t = Timestamp.ofEpochMilli(v.getTime());
|
140
|
-
to.setTimestamp(toColumn, t);
|
141
|
-
}
|
142
|
-
}
|
143
|
-
|
144
|
-
@Override
|
145
|
-
public Type getToType()
|
146
|
-
{
|
147
|
-
return Types.TIMESTAMP.withFormat("%H:%M:%S");
|
148
|
-
}
|
149
|
-
}
|
150
|
-
|
151
|
-
public static class TimestampColumnGetter
|
152
|
-
implements ColumnGetter
|
153
|
-
{
|
154
|
-
@Override
|
155
|
-
public void getAndSet(ResultSet from, int fromIndex,
|
156
|
-
PageBuilder to, Column toColumn) throws SQLException
|
157
|
-
{
|
158
|
-
java.sql.Timestamp v = from.getTimestamp(fromIndex);
|
159
|
-
if (from.wasNull()) {
|
160
|
-
to.setNull(toColumn);
|
161
|
-
} else {
|
162
|
-
Timestamp t = Timestamp.ofEpochSecond(v.getTime() / 1000, v.getNanos());
|
163
|
-
to.setTimestamp(toColumn, t);
|
164
|
-
}
|
165
|
-
}
|
166
|
-
|
167
|
-
@Override
|
168
|
-
public Type getToType()
|
169
|
-
{
|
170
|
-
return Types.TIMESTAMP.withFormat("%Y-%m-%d %H:%M:%S");
|
171
|
-
}
|
172
|
-
}
|
173
|
-
|
174
|
-
public static class BigDecimalToDoubleColumnGetter
|
175
|
-
implements ColumnGetter
|
176
|
-
{
|
177
|
-
@Override
|
178
|
-
public void getAndSet(ResultSet from, int fromIndex,
|
179
|
-
PageBuilder to, Column toColumn) throws SQLException
|
180
|
-
{
|
181
|
-
BigDecimal v = from.getBigDecimal(fromIndex);
|
182
|
-
if (from.wasNull()) {
|
183
|
-
to.setNull(toColumn);
|
184
|
-
} else {
|
185
|
-
// rounded value could be Double.NEGATIVE_INFINITY or Double.POSITIVE_INFINITY.
|
186
|
-
double rounded = v.doubleValue();
|
187
|
-
to.setDouble(toColumn, rounded);
|
188
|
-
}
|
189
|
-
}
|
190
|
-
|
191
|
-
@Override
|
192
|
-
public Type getToType()
|
193
|
-
{
|
194
|
-
return Types.DOUBLE;
|
195
|
-
}
|
196
|
-
}
|
197
|
-
}
|