embulk-input-jdbc 0.3.0 → 0.4.0
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.
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
|