embulk-input-jdbc 0.7.1 → 0.7.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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a672095825353519696e26638bf7b750406a720
|
4
|
+
data.tar.gz: f90651ce7041f7435cc07da9435dafe593b027cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5dbd93a8b413d1ff2b3d53d61c04706a1696cc8a544805c094d9fdef05a8bd11072a98b39edf602b08af9ab679684220bd6699df2d0963ded92d514c7d6e7b2e
|
7
|
+
data.tar.gz: 9886411e1b6d7358669827291f53a4994b1a116123d724253c0f39ce9c5041413e8207b8b84ab02b4686c8775be6594f6e70a0e0d74a79190d013f06d0514b23
|
Binary file
|
@@ -186,7 +186,7 @@ public abstract class AbstractJdbcInputPlugin
|
|
186
186
|
return new Schema(columns.build());
|
187
187
|
}
|
188
188
|
|
189
|
-
private String getQuery(PluginTask task, JdbcInputConnection con)
|
189
|
+
private String getQuery(PluginTask task, JdbcInputConnection con) throws SQLException
|
190
190
|
{
|
191
191
|
if (task.getQuery().isPresent()) {
|
192
192
|
if (task.getTable().isPresent() || task.getSelect().isPresent() ||
|
@@ -310,8 +310,23 @@ public abstract class AbstractJdbcInputPlugin
|
|
310
310
|
|
311
311
|
private static JdbcColumnOption columnOptionOf(Map<String, JdbcColumnOption> columnOptions, Map<String, JdbcColumnOption> defaultColumnOptions, JdbcColumn targetColumn, String targetColumnSQLType)
|
312
312
|
{
|
313
|
+
JdbcColumnOption columnOption = columnOptions.get(targetColumn.getName());
|
314
|
+
if (columnOption == null) {
|
315
|
+
String foundName = null;
|
316
|
+
for (Map.Entry<String, JdbcColumnOption> entry : columnOptions.entrySet()) {
|
317
|
+
if (entry.getKey().equalsIgnoreCase(targetColumn.getName())) {
|
318
|
+
if (columnOption != null) {
|
319
|
+
throw new ConfigException(String.format("Cannot specify column '%s' because both '%s' and '%s' exist in column_options.",
|
320
|
+
targetColumn.getName(), foundName, entry.getKey()));
|
321
|
+
}
|
322
|
+
foundName = entry.getKey();
|
323
|
+
columnOption = entry.getValue();
|
324
|
+
}
|
325
|
+
}
|
326
|
+
}
|
327
|
+
|
313
328
|
return Optional
|
314
|
-
.fromNullable(
|
329
|
+
.fromNullable(columnOption)
|
315
330
|
.or(Optional.fromNullable(defaultColumnOptions.get(targetColumnSQLType)))
|
316
331
|
.or(
|
317
332
|
// default column option
|
@@ -5,12 +5,18 @@ import java.sql.DatabaseMetaData;
|
|
5
5
|
import java.sql.PreparedStatement;
|
6
6
|
import java.sql.ResultSet;
|
7
7
|
import java.sql.ResultSetMetaData;
|
8
|
-
import java.sql.Statement;
|
9
8
|
import java.sql.SQLException;
|
9
|
+
import java.sql.Statement;
|
10
|
+
import java.util.Set;
|
11
|
+
|
12
|
+
import org.embulk.config.ConfigException;
|
13
|
+
import org.embulk.spi.Exec;
|
14
|
+
import org.slf4j.Logger;
|
15
|
+
|
10
16
|
import com.google.common.base.Optional;
|
11
17
|
import com.google.common.collect.ImmutableList;
|
12
|
-
import
|
13
|
-
import
|
18
|
+
import com.google.common.collect.ImmutableSet;
|
19
|
+
import com.google.common.collect.ImmutableSet.Builder;
|
14
20
|
|
15
21
|
public class JdbcInputConnection
|
16
22
|
implements AutoCloseable
|
@@ -146,25 +152,90 @@ public class JdbcInputConnection
|
|
146
152
|
|
147
153
|
protected String buildTableName(String tableName)
|
148
154
|
{
|
149
|
-
|
155
|
+
return quoteIdentifierString(tableName);
|
150
156
|
}
|
151
157
|
|
152
158
|
public String buildSelectQuery(String tableName,
|
153
159
|
Optional<String> selectColumnList, Optional<String> whereCondition,
|
154
|
-
Optional<String> orderByColumn)
|
160
|
+
Optional<String> orderByColumn) throws SQLException
|
155
161
|
{
|
162
|
+
String actualTableName;
|
163
|
+
if (tableExists(tableName)) {
|
164
|
+
actualTableName = tableName;
|
165
|
+
} else {
|
166
|
+
String upperTableName = tableName.toUpperCase();
|
167
|
+
String lowerTableName = tableName.toLowerCase();
|
168
|
+
if (tableExists(upperTableName)) {
|
169
|
+
if (tableExists(lowerTableName)) {
|
170
|
+
throw new ConfigException(String.format("Cannot specify table '%s' because both '%s' and '%s' exist.",
|
171
|
+
tableName, upperTableName, lowerTableName));
|
172
|
+
} else {
|
173
|
+
actualTableName = upperTableName;
|
174
|
+
}
|
175
|
+
} else {
|
176
|
+
if (tableExists(lowerTableName)) {
|
177
|
+
actualTableName = lowerTableName;
|
178
|
+
} else {
|
179
|
+
actualTableName = tableName;
|
180
|
+
}
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
156
184
|
StringBuilder sb = new StringBuilder();
|
157
185
|
|
158
186
|
sb.append("SELECT ");
|
159
187
|
sb.append(selectColumnList.or("*"));
|
160
|
-
sb.append(" FROM ").append(buildTableName(
|
188
|
+
sb.append(" FROM ").append(buildTableName(actualTableName));
|
189
|
+
|
161
190
|
if (whereCondition.isPresent()) {
|
162
191
|
sb.append(" WHERE ").append(whereCondition.get());
|
163
192
|
}
|
193
|
+
|
164
194
|
if (orderByColumn.isPresent()) {
|
165
|
-
|
195
|
+
String actualOrderByColumn;
|
196
|
+
Set<String> columnNames = getColumnNames(actualTableName);
|
197
|
+
if (columnNames.contains(orderByColumn.get())) {
|
198
|
+
actualOrderByColumn = orderByColumn.get();
|
199
|
+
} else {
|
200
|
+
String upperOrderByColumn = orderByColumn.get().toUpperCase();
|
201
|
+
String lowerOrderByColumn = orderByColumn.get().toLowerCase();
|
202
|
+
if (columnNames.contains(upperOrderByColumn)) {
|
203
|
+
if (columnNames.contains(lowerOrderByColumn)) {
|
204
|
+
throw new ConfigException(String.format("Cannot specify order-by colum '%s' because both '%s' and '%s' exist.",
|
205
|
+
orderByColumn.get(), upperOrderByColumn, lowerOrderByColumn));
|
206
|
+
} else {
|
207
|
+
actualOrderByColumn = upperOrderByColumn;
|
208
|
+
}
|
209
|
+
} else {
|
210
|
+
if (columnNames.contains(lowerOrderByColumn)) {
|
211
|
+
actualOrderByColumn = lowerOrderByColumn;
|
212
|
+
} else {
|
213
|
+
actualOrderByColumn = orderByColumn.get();
|
214
|
+
}
|
215
|
+
}
|
216
|
+
}
|
217
|
+
|
218
|
+
sb.append("ORDER BY ").append(quoteIdentifierString(actualOrderByColumn)).append(" ASC");
|
166
219
|
}
|
167
220
|
|
168
221
|
return sb.toString();
|
169
222
|
}
|
223
|
+
|
224
|
+
private boolean tableExists(String tableName) throws SQLException
|
225
|
+
{
|
226
|
+
try (ResultSet rs = connection.getMetaData().getTables(null, schemaName, tableName, null)) {
|
227
|
+
return rs.next();
|
228
|
+
}
|
229
|
+
}
|
230
|
+
|
231
|
+
private Set<String> getColumnNames(String tableName) throws SQLException
|
232
|
+
{
|
233
|
+
Builder<String> columnNamesBuilder = ImmutableSet.builder();
|
234
|
+
try (ResultSet rs = connection.getMetaData().getColumns(null, schemaName, tableName, null)) {
|
235
|
+
while (rs.next()) {
|
236
|
+
columnNamesBuilder.add(rs.getString("COLUMN_NAME"));
|
237
|
+
}
|
238
|
+
return columnNamesBuilder.build();
|
239
|
+
}
|
240
|
+
}
|
170
241
|
}
|
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.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sadayuki Furuhashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Selects records from a table.
|
14
14
|
email:
|
@@ -42,7 +42,7 @@ files:
|
|
42
42
|
- src/main/java/org/embulk/input/jdbc/getter/TimeColumnGetter.java
|
43
43
|
- src/main/java/org/embulk/input/jdbc/getter/TimestampColumnGetter.java
|
44
44
|
- src/test/java/org/embulk/input/EmbulkPluginTester.java
|
45
|
-
- classpath/embulk-input-jdbc-0.7.
|
45
|
+
- classpath/embulk-input-jdbc-0.7.2.jar
|
46
46
|
homepage: https://github.com/embulk/embulk-input-jdbc
|
47
47
|
licenses:
|
48
48
|
- Apache 2.0
|