embulk-input-jdbc 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c8e7bcef7a17ff17d0765398c37a01e30069d1e
|
4
|
+
data.tar.gz: e8da2a078d57ea323a94e4e12228ec38aa9ebff8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31f6a9698536e5bb62c795a43a0a7215e3f6c654c3fdacf3155702903699146187953dee40c60da4cb9358fe6e6b420f53ea94511ef4e099d4bd71defee6a305
|
7
|
+
data.tar.gz: 6e95e49f74ac0d529486b610713d75f8372d619fd4fcc47847a2ea908263c0a1aa593a7fbaf7ddc691d4854d0506405c3d8dc83395d377f99c4e1a071e8debb6
|
Binary file
|
@@ -10,6 +10,7 @@ import com.google.common.base.Throwables;
|
|
10
10
|
import com.google.common.collect.ImmutableList;
|
11
11
|
import org.embulk.config.CommitReport;
|
12
12
|
import org.embulk.config.Config;
|
13
|
+
import org.embulk.config.ConfigException;
|
13
14
|
import org.embulk.config.ConfigDefault;
|
14
15
|
import org.embulk.config.ConfigDiff;
|
15
16
|
import org.embulk.config.ConfigInject;
|
@@ -39,7 +40,12 @@ public abstract class AbstractJdbcInputPlugin
|
|
39
40
|
public Properties getOptions();
|
40
41
|
|
41
42
|
@Config("table")
|
42
|
-
|
43
|
+
@ConfigDefault("null")
|
44
|
+
public Optional<String> getTable();
|
45
|
+
|
46
|
+
@Config("query")
|
47
|
+
@ConfigDefault("null")
|
48
|
+
public Optional<String> getQuery();
|
43
49
|
|
44
50
|
@Config("select")
|
45
51
|
@ConfigDefault("null")
|
@@ -134,7 +140,7 @@ public abstract class AbstractJdbcInputPlugin
|
|
134
140
|
private Schema setupTask(JdbcInputConnection con, PluginTask task) throws SQLException
|
135
141
|
{
|
136
142
|
// build SELECT query and gets schema of its result
|
137
|
-
JdbcSchema querySchema = con.getSchemaOfQuery(
|
143
|
+
JdbcSchema querySchema = con.getSchemaOfQuery(getQuery(task, con));
|
138
144
|
task.setQuerySchema(querySchema);
|
139
145
|
|
140
146
|
ColumnGetterFactory factory = newColumnGetterFactory(task);
|
@@ -147,6 +153,22 @@ public abstract class AbstractJdbcInputPlugin
|
|
147
153
|
return new Schema(columns.build());
|
148
154
|
}
|
149
155
|
|
156
|
+
private String getQuery(PluginTask task, JdbcInputConnection con)
|
157
|
+
{
|
158
|
+
if (task.getQuery().isPresent()) {
|
159
|
+
if (task.getTable().isPresent() || task.getSelect().isPresent() ||
|
160
|
+
task.getWhere().isPresent() || task.getOrderBy().isPresent()) {
|
161
|
+
throw new ConfigException("'table', 'select', 'where' and 'order_by' parameters are unnecessary if 'query' parameter is set.");
|
162
|
+
}
|
163
|
+
return task.getQuery().get();
|
164
|
+
} else if (task.getTable().isPresent()) {
|
165
|
+
return con.buildSelectQuery(task.getTable().get(), task.getSelect(),
|
166
|
+
task.getWhere(), task.getOrderBy());
|
167
|
+
} else {
|
168
|
+
throw new ConfigException("'table' parameter is required (if 'query' parameter is not set)");
|
169
|
+
}
|
170
|
+
}
|
171
|
+
|
150
172
|
@Override
|
151
173
|
public ConfigDiff resume(TaskSource taskSource,
|
152
174
|
Schema schema, int taskCount,
|
@@ -201,9 +223,7 @@ public abstract class AbstractJdbcInputPlugin
|
|
201
223
|
List<ColumnGetter> getters = newColumnGetters(task, querySchema);
|
202
224
|
|
203
225
|
try (JdbcInputConnection con = newConnection(task)) {
|
204
|
-
try (BatchSelect cursor = con.newSelectCursor(
|
205
|
-
task.getTable(), task.getSelect(), task.getWhere(),
|
206
|
-
task.getOrderBy(), task.getFetchRows())) {
|
226
|
+
try (BatchSelect cursor = con.newSelectCursor(getQuery(task, con), task.getFetchRows())) {
|
207
227
|
while (true) {
|
208
228
|
// TODO run fetch() in another thread asynchronously
|
209
229
|
// TODO retry fetch() if it failed (maybe order_by is required and unique_column(s) option is also required)
|
@@ -41,31 +41,8 @@ public class JdbcInputConnection
|
|
41
41
|
executeUpdate(sql);
|
42
42
|
}
|
43
43
|
|
44
|
-
|
45
|
-
Optional<String> selectColumnList, Optional<String> whereCondition,
|
46
|
-
Optional<String> orderByColumn)
|
47
|
-
{
|
48
|
-
StringBuilder sb = new StringBuilder();
|
49
|
-
|
50
|
-
sb.append("SELECT ");
|
51
|
-
sb.append(selectColumnList.or("*"));
|
52
|
-
sb.append(" FROM ").append(quoteIdentifierString(tableName));
|
53
|
-
if (whereCondition.isPresent()) {
|
54
|
-
sb.append(" WHERE ").append(whereCondition.get());
|
55
|
-
}
|
56
|
-
if (orderByColumn.isPresent()) {
|
57
|
-
sb.append("ORDER BY ").append(quoteIdentifierString(orderByColumn.get())).append(" ASC");
|
58
|
-
}
|
59
|
-
|
60
|
-
return sb.toString();
|
61
|
-
}
|
62
|
-
|
63
|
-
public JdbcSchema getSchemaOfQuery(String tableName,
|
64
|
-
Optional<String> selectColumnList, Optional<String> whereCondition,
|
65
|
-
Optional<String> orderByColumn) throws SQLException
|
44
|
+
public JdbcSchema getSchemaOfQuery(String query) throws SQLException
|
66
45
|
{
|
67
|
-
String query = buildSelectQuery(tableName, selectColumnList, whereCondition,
|
68
|
-
orderByColumn);
|
69
46
|
PreparedStatement stmt = connection.prepareStatement(query);
|
70
47
|
try {
|
71
48
|
return getSchemaOfResultMetadata(stmt.getMetaData());
|
@@ -89,18 +66,15 @@ public class JdbcInputConnection
|
|
89
66
|
return new JdbcSchema(columns.build());
|
90
67
|
}
|
91
68
|
|
92
|
-
public BatchSelect newSelectCursor(String
|
93
|
-
Optional<String> selectColumnList, Optional<String> whereCondition,
|
94
|
-
Optional<String> orderByColumn, int fetchRows) throws SQLException
|
69
|
+
public BatchSelect newSelectCursor(String query, int fetchRows) throws SQLException
|
95
70
|
{
|
96
|
-
|
97
|
-
return newBatchSelect(select, fetchRows);
|
71
|
+
return newBatchSelect(query, fetchRows);
|
98
72
|
}
|
99
73
|
|
100
|
-
protected BatchSelect newBatchSelect(String
|
74
|
+
protected BatchSelect newBatchSelect(String query, int fetchRows) throws SQLException
|
101
75
|
{
|
102
|
-
logger.info("SQL: " +
|
103
|
-
PreparedStatement stmt = connection.prepareStatement(
|
76
|
+
logger.info("SQL: " + query);
|
77
|
+
PreparedStatement stmt = connection.prepareStatement(query);
|
104
78
|
stmt.setFetchSize(fetchRows);
|
105
79
|
return new SingleSelect(stmt);
|
106
80
|
}
|
@@ -169,4 +143,23 @@ public class JdbcInputConnection
|
|
169
143
|
{
|
170
144
|
return identifierQuoteString + str + identifierQuoteString;
|
171
145
|
}
|
146
|
+
|
147
|
+
public String buildSelectQuery(String tableName,
|
148
|
+
Optional<String> selectColumnList, Optional<String> whereCondition,
|
149
|
+
Optional<String> orderByColumn)
|
150
|
+
{
|
151
|
+
StringBuilder sb = new StringBuilder();
|
152
|
+
|
153
|
+
sb.append("SELECT ");
|
154
|
+
sb.append(selectColumnList.or("*"));
|
155
|
+
sb.append(" FROM ").append(quoteIdentifierString(tableName));
|
156
|
+
if (whereCondition.isPresent()) {
|
157
|
+
sb.append(" WHERE ").append(whereCondition.get());
|
158
|
+
}
|
159
|
+
if (orderByColumn.isPresent()) {
|
160
|
+
sb.append("ORDER BY ").append(quoteIdentifierString(orderByColumn.get())).append(" ASC");
|
161
|
+
}
|
162
|
+
|
163
|
+
return sb.toString();
|
164
|
+
}
|
172
165
|
}
|
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.4.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-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Selects records from a table.
|
14
14
|
email:
|
@@ -27,7 +27,7 @@ files:
|
|
27
27
|
- src/main/java/org/embulk/input/jdbc/getter/ColumnGetter.java
|
28
28
|
- src/main/java/org/embulk/input/jdbc/getter/ColumnGetterFactory.java
|
29
29
|
- src/main/java/org/embulk/input/jdbc/getter/ColumnGetters.java
|
30
|
-
- classpath/embulk-input-jdbc-0.
|
30
|
+
- classpath/embulk-input-jdbc-0.4.0.jar
|
31
31
|
homepage: https://github.com/embulk/embulk-input-jdbc
|
32
32
|
licenses:
|
33
33
|
- Apache 2.0
|