embulk-input-mysql 0.6.0 → 0.6.1

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: dd90341b77cceca9532bf385439c2437f8caf517
4
- data.tar.gz: dd81a39ddc867c7e0c577096792d2178b237dfb9
3
+ metadata.gz: 926a4a94fc9d68597a855726bff1ee7f0aa9642f
4
+ data.tar.gz: 65fb022951c42b95037d989f0e8f0229a500ac60
5
5
  SHA512:
6
- metadata.gz: ddd6c09b93413f5bcc36120ba1841193c4f3e662f9f2e8d1652f75c3ebc609113c7c6a144386ccb3ef8956c5eb383d9addfe7f3380f60eabf04b9ae40b6db47a
7
- data.tar.gz: b7669585a6c96283717542589ed978b53b17c905c7d11cb41d63453e07cfe7783de1a8e73731226c830582d48d39d2393fea1d62e46e1c5f09b2cae8d4bfc2c0
6
+ metadata.gz: ba17b951e574ce78a5605a0ae2c1970b1de516044fd7d627fb6e55c7b62ae55f084a9b21ac5033f5c684534093b3f6352b25e52c10fd7dcab7064471ca733eed
7
+ data.tar.gz: 4363441acac9ce2d250d85f1a6bf425d961e07b9276d2190c98f0d2b0a89f3c8769d5a963401e794e49414879199b33333faa7a681eac1d7226bb9f6813d1577
data/README.md CHANGED
@@ -30,6 +30,8 @@ MySQL input plugins for Embulk loads records from MySQL.
30
30
  - If this value is set to -1:
31
31
  - It uses a client-side built statement and fetches all rows at once. This may cause OutOfMemoryError.
32
32
  - Internally, `useCursorFetch=false` is used and `java.sql.Statement.setFetchSize` is not set.
33
+ - **connect_timeout**: timeout for socket connect. 0 means no timeout. (integer (seconds), default: 300)
34
+ - **socket_timeout**: timeout on network socket operations. 0 means no timeout. (integer (seconds), default: 1800)
33
35
  - **options**: extra JDBC properties (hash, default: {})
34
36
  - **default_timezone**: If the sql type of a column is `date`/`time`/`datetime` and the embulk type is `string`, column values are formatted int this default_timezone. You can overwrite timezone for each columns using column_options option. (string, default: `UTC`)
35
37
  - **column_options**: advanced: a key-value pairs where key is a column name and value is options for the column.
data/build.gradle CHANGED
@@ -3,6 +3,6 @@ dependencies {
3
3
 
4
4
  compile 'mysql:mysql-connector-java:5.1.34'
5
5
 
6
- testCompile 'org.embulk:embulk-standards:0.6.16'
6
+ testCompile 'org.embulk:embulk-standards:0.7.4'
7
7
  testCompile project(':embulk-input-jdbc').sourceSets.test.output
8
8
  }
@@ -4,7 +4,6 @@ import java.util.Properties;
4
4
  import java.sql.Connection;
5
5
  import java.sql.Driver;
6
6
  import java.sql.SQLException;
7
- import com.google.common.base.Throwables;
8
7
  import org.embulk.config.Config;
9
8
  import org.embulk.config.ConfigDefault;
10
9
  import org.embulk.input.jdbc.AbstractJdbcInputPlugin;
@@ -58,8 +57,8 @@ public class MySQLInputPlugin
58
57
 
59
58
  props.setProperty("useCompression", "true");
60
59
 
61
- props.setProperty("connectTimeout", "300000"); // milliseconds
62
- props.setProperty("socketTimeout", "1800000"); // smillieconds
60
+ props.setProperty("connectTimeout", String.valueOf(t.getConnectTimeout() * 1000)); // milliseconds
61
+ props.setProperty("socketTimeout", String.valueOf(t.getSocketTimeout() * 1000)); // milliseconds
63
62
 
64
63
  // Enable keepalive based on tcp_keepalive_time, tcp_keepalive_intvl and tcp_keepalive_probes kernel parameters.
65
64
  // Socket options TCP_KEEPCNT, TCP_KEEPIDLE, and TCP_KEEPINTVL are not configurable.
@@ -16,7 +16,7 @@ public class MySQLInputConnection
16
16
  }
17
17
 
18
18
  @Override
19
- protected BatchSelect newBatchSelect(String select, int fetchRows) throws SQLException
19
+ protected BatchSelect newBatchSelect(String select, int fetchRows, int queryTimeout) throws SQLException
20
20
  {
21
21
  logger.info("SQL: " + select);
22
22
  PreparedStatement stmt = connection.prepareStatement(select, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); // TYPE_FORWARD_ONLY and CONCUR_READ_ONLY are default
@@ -30,6 +30,7 @@ public class MySQLInputConnection
30
30
  // useCursorFetch=true is enabled. MySQL creates temporary table and uses multiple select statements to fetch rows.
31
31
  stmt.setFetchSize(fetchRows);
32
32
  }
33
+ // Because socketTimeout is set in Connection, don't need to set quertyTimeout.
33
34
  return new SingleSelect(stmt);
34
35
  }
35
36
  }
@@ -2,19 +2,14 @@ package org.embulk.input.mysql;
2
2
 
3
3
  import java.io.File;
4
4
  import java.util.ArrayList;
5
- import java.util.Arrays;
6
5
  import java.util.List;
7
6
 
8
- import org.embulk.EmbulkService;
9
- import org.embulk.config.ConfigLoader;
7
+ import org.embulk.EmbulkEmbed;
8
+ import org.embulk.EmbulkEmbed.Bootstrap;
10
9
  import org.embulk.config.ConfigSource;
11
- import org.embulk.exec.BulkLoader;
12
- import org.embulk.exec.ExecutionResult;
13
10
  import org.embulk.plugin.InjectedPluginSource;
14
- import org.embulk.spi.ExecSession;
15
11
 
16
12
  import com.google.inject.Binder;
17
- import com.google.inject.Injector;
18
13
  import com.google.inject.Module;
19
14
 
20
15
  public class EmbulkPluginTester
@@ -37,7 +32,7 @@ public class EmbulkPluginTester
37
32
 
38
33
  private final List<PluginDefinition> plugins = new ArrayList<PluginDefinition>();
39
34
 
40
-
35
+ private EmbulkEmbed embulk;
41
36
 
42
37
  public EmbulkPluginTester()
43
38
  {
@@ -55,30 +50,29 @@ public class EmbulkPluginTester
55
50
 
56
51
  public void run(String ymlPath) throws Exception
57
52
  {
58
- EmbulkService service = new EmbulkService(new EmptyConfigSource()) {
59
- @Override
60
- protected Iterable<? extends Module> getAdditionalModules(ConfigSource systemConfig)
53
+ if (embulk == null) {
54
+ Bootstrap bootstrap = new EmbulkEmbed.Bootstrap();
55
+ bootstrap.addModules(new Module()
61
56
  {
62
- return Arrays.asList(new Module()
57
+ @Override
58
+ public void configure(Binder binder)
63
59
  {
64
- @Override
65
- public void configure(Binder binder)
66
- {
67
- for (PluginDefinition plugin : plugins) {
68
- InjectedPluginSource.registerPluginTo(binder, plugin.iface, plugin.name, plugin.impl);
69
- }
60
+ for (PluginDefinition plugin : plugins) {
61
+ InjectedPluginSource.registerPluginTo(binder, plugin.iface, plugin.name, plugin.impl);
70
62
  }
71
- });
72
- }
73
- };
74
- Injector injector = service.getInjector();
75
- ConfigSource config = injector.getInstance(ConfigLoader.class).fromYamlFile(new File(ymlPath));
76
- ExecSession session = new ExecSession(injector, config);
77
- try {
78
- BulkLoader loader = injector.getInstance(BulkLoader.class);
79
- ExecutionResult result = loader.run(session, config);
80
- } finally {
81
- session.cleanup();
63
+ }
64
+ });
65
+ embulk = bootstrap.initializeCloseable();
66
+ }
67
+
68
+ ConfigSource config = embulk.newConfigLoader().fromYamlFile(new File(ymlPath));
69
+ embulk.run(config);
70
+ }
71
+
72
+ public void destroy() {
73
+ if (embulk != null) {
74
+ embulk.destroy();
75
+ embulk = null;
82
76
  }
83
77
  }
84
78
 
@@ -16,6 +16,7 @@ import java.util.List;
16
16
 
17
17
  import org.embulk.input.MySQLInputPlugin;
18
18
  import org.embulk.spi.InputPlugin;
19
+ import org.junit.AfterClass;
19
20
  import org.junit.BeforeClass;
20
21
  import org.junit.Test;
21
22
 
@@ -24,6 +25,7 @@ import static org.junit.Assert.assertEquals;
24
25
  public class MySQLInputPluginTest
25
26
  {
26
27
  private static boolean prepared = false;
28
+ private static EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "mysql", MySQLInputPlugin.class);
27
29
 
28
30
  @BeforeClass
29
31
  public static void prepare() throws SQLException
@@ -115,11 +117,16 @@ public class MySQLInputPluginTest
115
117
  }
116
118
  }
117
119
 
120
+ @AfterClass
121
+ public static void dispose()
122
+ {
123
+ tester.destroy();
124
+ }
125
+
118
126
  @Test
119
127
  public void test() throws Exception
120
128
  {
121
129
  if (prepared) {
122
- EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "mysql", MySQLInputPlugin.class);
123
130
  tester.run(convertPath("/yml/input.yml"));
124
131
  assertEquals(Arrays.asList(
125
132
  "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15",
@@ -133,7 +140,6 @@ public class MySQLInputPluginTest
133
140
  public void testString() throws Exception
134
141
  {
135
142
  if (prepared) {
136
- EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "mysql", MySQLInputPlugin.class);
137
143
  tester.run(convertPath("/yml/input-string.yml"));
138
144
  assertEquals(Arrays.asList(
139
145
  "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15",
@@ -147,7 +153,6 @@ public class MySQLInputPluginTest
147
153
  public void testBoolean() throws Exception
148
154
  {
149
155
  if (prepared) {
150
- EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "mysql", MySQLInputPlugin.class);
151
156
  tester.run(convertPath("/yml/input-boolean.yml"));
152
157
  assertEquals(Arrays.asList(
153
158
  "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15",
@@ -161,7 +166,6 @@ public class MySQLInputPluginTest
161
166
  public void testLong() throws Exception
162
167
  {
163
168
  if (prepared) {
164
- EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "mysql", MySQLInputPlugin.class);
165
169
  tester.run(convertPath("/yml/input-long.yml"));
166
170
  assertEquals(Arrays.asList(
167
171
  "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15",
@@ -175,7 +179,6 @@ public class MySQLInputPluginTest
175
179
  public void testDouble() throws Exception
176
180
  {
177
181
  if (prepared) {
178
- EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "mysql", MySQLInputPlugin.class);
179
182
  tester.run(convertPath("/yml/input-double.yml"));
180
183
  assertEquals(Arrays.asList(
181
184
  "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15",
@@ -189,7 +192,6 @@ public class MySQLInputPluginTest
189
192
  public void testTimestamp1() throws Exception
190
193
  {
191
194
  if (prepared) {
192
- EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "mysql", MySQLInputPlugin.class);
193
195
  tester.run(convertPath("/yml/input-timestamp1.yml"));
194
196
  assertEquals(Arrays.asList(
195
197
  "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15",
@@ -203,7 +205,6 @@ public class MySQLInputPluginTest
203
205
  public void testTimestamp2() throws Exception
204
206
  {
205
207
  if (prepared) {
206
- EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "mysql", MySQLInputPlugin.class);
207
208
  tester.run(convertPath("/yml/input-timestamp2.yml"));
208
209
  assertEquals(Arrays.asList(
209
210
  "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15",
@@ -217,7 +218,6 @@ public class MySQLInputPluginTest
217
218
  public void testTimestamp3() throws Exception
218
219
  {
219
220
  if (prepared) {
220
- EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "mysql", MySQLInputPlugin.class);
221
221
  tester.run(convertPath("/yml/input-timestamp3.yml"));
222
222
  assertEquals(Arrays.asList(
223
223
  "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15",
@@ -231,7 +231,6 @@ public class MySQLInputPluginTest
231
231
  public void testValueTypeString() throws Exception
232
232
  {
233
233
  if (prepared) {
234
- EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "mysql", MySQLInputPlugin.class);
235
234
  tester.run(convertPath("/yml/input-valuetype-string.yml"));
236
235
  assertEquals(Arrays.asList(
237
236
  "c1",
@@ -244,7 +243,6 @@ public class MySQLInputPluginTest
244
243
  public void testValueTypeDecimal() throws Exception
245
244
  {
246
245
  if (prepared) {
247
- EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "mysql", MySQLInputPlugin.class);
248
246
  tester.run(convertPath("/yml/input-valuetype-decimal.yml"));
249
247
  assertEquals(Arrays.asList(
250
248
  "c1",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-input-mysql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
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-07-07 00:00:00.000000000 Z
11
+ date: 2015-12-08 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Selects records from a table.
14
14
  email:
@@ -22,9 +22,7 @@ files:
22
22
  - lib/embulk/input/mysql.rb
23
23
  - src/main/java/org/embulk/input/MySQLInputPlugin.java
24
24
  - src/main/java/org/embulk/input/mysql/MySQLInputConnection.java
25
- - src/test/java/org/embulk/input/mysql/ChildFirstClassLoader.java
26
25
  - src/test/java/org/embulk/input/mysql/EmbulkPluginTester.java
27
- - src/test/java/org/embulk/input/mysql/EmptyConfigSource.java
28
26
  - src/test/java/org/embulk/input/mysql/MySQLInputPluginTest.java
29
27
  - src/test/resources/yml/input-boolean.yml
30
28
  - src/test/resources/yml/input-double.yml
@@ -36,8 +34,8 @@ files:
36
34
  - src/test/resources/yml/input-valuetype-decimal.yml
37
35
  - src/test/resources/yml/input-valuetype-string.yml
38
36
  - src/test/resources/yml/input.yml
39
- - classpath/embulk-input-jdbc-0.6.0.jar
40
- - classpath/embulk-input-mysql-0.6.0.jar
37
+ - classpath/embulk-input-jdbc-0.6.1.jar
38
+ - classpath/embulk-input-mysql-0.6.1.jar
41
39
  - classpath/mysql-connector-java-5.1.34.jar
42
40
  homepage: https://github.com/embulk/embulk-input-jdbc
43
41
  licenses:
Binary file
@@ -1,42 +0,0 @@
1
- package org.embulk.input.mysql;
2
-
3
- import java.net.URL;
4
- import java.net.URLClassLoader;
5
- import java.util.List;
6
-
7
- public class ChildFirstClassLoader
8
- extends URLClassLoader
9
- {
10
- public ChildFirstClassLoader(List<URL> urls, ClassLoader parent)
11
- {
12
- super(urls.toArray(new URL[urls.size()]), parent);
13
- }
14
-
15
- @Override
16
- protected Class<?> loadClass(String name, boolean resolve)
17
- throws ClassNotFoundException
18
- {
19
- synchronized (getClassLoadingLock(name)) {
20
- Class<?> loadedClass = findLoadedClass(name);
21
- if (loadedClass != null) {
22
- return resolveClass(loadedClass, resolve);
23
- }
24
-
25
- try {
26
- return resolveClass(findClass(name), resolve);
27
- } catch (ClassNotFoundException ignored) {
28
- }
29
-
30
- return super.loadClass(name, resolve);
31
- }
32
- }
33
-
34
- private Class<?> resolveClass(Class<?> clazz, boolean resolve)
35
- {
36
- if (resolve) {
37
- resolveClass(clazz);
38
- }
39
- return clazz;
40
- }
41
-
42
- }
@@ -1,105 +0,0 @@
1
- package org.embulk.input.mysql;
2
-
3
- import java.util.Collections;
4
- import java.util.List;
5
- import java.util.Map.Entry;
6
-
7
- import org.embulk.config.ConfigSource;
8
- import org.embulk.config.DataSource;
9
-
10
- import com.fasterxml.jackson.databind.JsonNode;
11
- import com.fasterxml.jackson.databind.node.ObjectNode;
12
-
13
- public class EmptyConfigSource implements ConfigSource
14
- {
15
-
16
- @Override
17
- public <E> E get(Class<E> type, String attrName)
18
- {
19
- return null;
20
- }
21
-
22
- @Override
23
- public <E> E get(Class<E> type, String attrName, E defaultValue)
24
- {
25
- return defaultValue;
26
- }
27
-
28
- @Override
29
- public List<String> getAttributeNames()
30
- {
31
- return Collections.emptyList();
32
- }
33
-
34
- @Override
35
- public Iterable<Entry<String, JsonNode>> getAttributes()
36
- {
37
- return Collections.emptyList();
38
- }
39
-
40
- @Override
41
- public ObjectNode getObjectNode()
42
- {
43
- return null;
44
- }
45
-
46
- @Override
47
- public boolean isEmpty()
48
- {
49
- return true;
50
- }
51
-
52
- @Override
53
- public ConfigSource deepCopy()
54
- {
55
- return this;
56
- }
57
-
58
- @Override
59
- public ConfigSource getNested(String s)
60
- {
61
- return null;
62
- }
63
-
64
- @Override
65
- public ConfigSource getNestedOrSetEmpty(String s)
66
- {
67
- return null;
68
- }
69
-
70
- @Override
71
- public <T> T loadConfig(Class<T> class1)
72
- {
73
- return null;
74
- }
75
-
76
- @Override
77
- public ConfigSource merge(DataSource datasource)
78
- {
79
- return null;
80
- }
81
-
82
- @Override
83
- public ConfigSource set(String s, Object obj)
84
- {
85
- return null;
86
- }
87
-
88
- @Override
89
- public ConfigSource setAll(DataSource datasource)
90
- {
91
- return null;
92
- }
93
-
94
- @Override
95
- public ConfigSource setNested(String s, DataSource datasource)
96
- {
97
- return null;
98
- }
99
-
100
- @Override
101
- public ConfigSource remove(String arg0) {
102
- return null;
103
- }
104
-
105
- }