embulk-input-mysql 0.9.3 → 0.10.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.
Files changed (41) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +12 -2
  3. data/build.gradle +1 -1
  4. data/classpath/embulk-input-jdbc-0.10.0.jar +0 -0
  5. data/classpath/embulk-input-mysql-0.10.0.jar +0 -0
  6. data/src/main/java/org/embulk/input/mysql/getter/MySQLColumnGetterFactory.java +13 -1
  7. data/src/test/java/org/embulk/input/mysql/BasicTest.java +9 -0
  8. data/src/test/java/org/embulk/input/mysql/MySQLColumnGetterFactoryTest.java +70 -0
  9. data/src/test/java/org/embulk/input/mysql/MySQLTests.java +13 -1
  10. data/src/test/java/org/embulk/input/mysql/OptionTest.java +93 -0
  11. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/setup.sql +4 -1
  12. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_boolean_expected.csv +2 -2
  13. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_double_expected.csv +2 -2
  14. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_expected.csv +2 -2
  15. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_long_expected.csv +2 -2
  16. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_string_expected.csv +2 -2
  17. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_timestamp1_expected.csv +2 -2
  18. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_timestamp2_expected.csv +2 -2
  19. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_timestamp3_expected.csv +2 -2
  20. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_decimal_expected.csv +2 -2
  21. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_json_config.yml +3 -0
  22. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_json_expected.csv +2 -0
  23. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_json_expected.diff +2 -0
  24. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_string_config.yml +1 -0
  25. data/src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_string_expected.csv +2 -2
  26. data/src/test/resources/org/embulk/input/mysql/test/expect/option/after_select.yml +3 -0
  27. data/src/test/resources/org/embulk/input/mysql/test/expect/option/after_select_expected.csv +3 -0
  28. data/src/test/resources/org/embulk/input/mysql/test/expect/option/before_select.yml +3 -0
  29. data/src/test/resources/org/embulk/input/mysql/test/expect/option/before_select_expected.csv +3 -0
  30. data/src/test/resources/org/embulk/input/mysql/test/expect/option/before_setup.yml +6 -0
  31. data/src/test/resources/org/embulk/input/mysql/test/expect/option/before_setup_expected.csv +2 -0
  32. data/src/test/resources/org/embulk/input/mysql/test/expect/option/column_options.yml +5 -0
  33. data/src/test/resources/org/embulk/input/mysql/test/expect/option/column_options_expected.csv +3 -0
  34. data/src/test/resources/org/embulk/input/mysql/test/expect/option/default_column_options.yml +6 -0
  35. data/src/test/resources/org/embulk/input/mysql/test/expect/option/default_column_options_expected.csv +3 -0
  36. data/src/test/resources/org/embulk/input/mysql/test/expect/option/expected1.csv +4 -0
  37. data/src/test/resources/org/embulk/input/mysql/test/expect/option/input.yml +2 -0
  38. data/src/test/resources/org/embulk/input/mysql/test/expect/option/setup.sql +29 -0
  39. metadata +23 -5
  40. data/classpath/embulk-input-jdbc-0.9.3.jar +0 -0
  41. data/classpath/embulk-input-mysql-0.9.3.jar +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 744e51df72489a3bf53272c5df5d459ba838489e
4
- data.tar.gz: 9df128d4fa0b33718b3db3c6407a184bc3f699b8
2
+ SHA256:
3
+ metadata.gz: cc441427089a73c25d30442c2683f881bebcb3d6297d3ef062ebb3a069912a49
4
+ data.tar.gz: c9dba75abd31ef6fff03aa0e7a5fb3938e8df75ef3202ddfedebf106419e4902
5
5
  SHA512:
6
- metadata.gz: 5951714019851189f8992454620fcbeb8ed070aabf8051f480764a9b39dfbaa8fa73dcd2eb1f4442dab9d6b428363881cce9ca50f67c5ed435ca7ab63a646e38
7
- data.tar.gz: ca3690c6eed9cff67728fd99e65afe21a57a74e05919a9fb72c8538e7b4de7136777b90a05793d60098d8dbfdeabbb91cefbab712a15ddb86b139f1d06b5aea5
6
+ metadata.gz: 7105db953dedce4d4b84bffcdb9219cdc52dd889592a6907a3b3c2b5ca52d821ec29029d2f9765bbce29779f1fd0df193adc2c86029eb08dcde84065db697fe9
7
+ data.tar.gz: 75a2c458dfb3b43d0d0321b145c5d8db6789d9a3408110d3a807e358f9f15d40e032cb5f9e6e20258f0ac0f8b51be8921739770c098805a2d441e8cb2ca19948
data/README.md CHANGED
@@ -7,6 +7,10 @@ MySQL input plugin for Embulk loads records from MySQL.
7
7
  * **Plugin type**: input
8
8
  * **Resume supported**: yes
9
9
 
10
+ **[WARNING!]**
11
+
12
+ - The default embulk type for MySQL JSON type will be changed from `string` to `json`.
13
+
10
14
  ## Configuration
11
15
 
12
16
  - **driver_path**: path to the jar file of the MySQL JDBC driver. If not set, the bundled JDBC driver (MySQL Connector/J 5.1.44) will be used (string). NOTE: embulk-input-mysql 0.9.0 upgraded the bundled MySQL Connector/J version from 5.1.34 to 5.1.44 . And set useLegacyDatetimeCode=false by default in order to get correct datetime value when the server timezone and the client timezone are different. Set useLegacyDatetimeCode=true if you need to get datetime value same as older embulk-input-mysql.
@@ -41,7 +45,8 @@ MySQL input plugin for Embulk loads records from MySQL.
41
45
  - **last_record**: values of the last record for incremental loading (array of objects, default: load all records)
42
46
  - **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`)
43
47
  - **use_legacy_datetime_code**: recommended not to set the property (boolean, default: false). If true, embulk-output-mysql will get wrong datetime values when the server timezone and the client server timezone are different as older embulk-output-mysql did.
44
- - **column_options**: advanced: a key-value pairs where key is a column name and value is options for the column.
48
+ - **default_column_options**: advanced: column_options for each JDBC type as default. key-value pairs where key is a JDBC type (e.g. 'DATE', 'BIGINT') and value is same as column_options's value.
49
+ - **column_options**: advanced: key-value pairs where key is a column name and value is options for the column.
45
50
  - **value_type**: embulk get values from database as this value_type. Typically, the value_type determines `getXXX` method of `java.sql.PreparedStatement`.
46
51
  (string, default: depends on the sql type of the column. Available values options are: `long`, `double`, `float`, `decimal`, `boolean`, `string`, `json`, `date`, `time`, `timestamp`)
47
52
  - **type**: Column values are converted to this embulk type.
@@ -50,6 +55,8 @@ MySQL input plugin for Embulk loads records from MySQL.
50
55
  - **timestamp_format**: If the sql type of the column is `date`/`time`/`datetime` and the embulk type is `string`, column values are formatted by this timestamp_format. And if the embulk type is `timestamp`, this timestamp_format may be used in the output plugin. For example, stdout plugin use the timestamp_format, but *csv formatter plugin doesn't use*. (string, default : `%Y-%m-%d` for `date`, `%H:%M:%S` for `time`, `%Y-%m-%d %H:%M:%S` for `timestamp`)
51
56
  - **timezone**: If the sql type of the column is `date`/`time`/`datetime` and the embulk type is `string`, column values are formatted in this timezone.
52
57
  (string, value of default_timezone option is used by default)
58
+ - **before_setup**: if set, this SQL will be executed before setup. You can prepare table for input by this option.
59
+ - **before_select**: if set, this SQL will be executed before the SELECT query in the same transaction.
53
60
  - **after_select**: if set, this SQL will be executed after the SELECT query in the same transaction.
54
61
 
55
62
 
@@ -86,7 +93,7 @@ Then, it updates `last_record: ` so that next execution uses the updated last_re
86
93
  CREATE INDEX embulk_incremental_loading_index ON table (updated_at, id);
87
94
  ```
88
95
 
89
- Recommended usage is to leave `incremental_columns` unset and let this plugin automatically finds an AUTO_INCREMENT primary key. Currently, only strings and integers are supported as incremental_columns.
96
+ Recommended usage is to leave `incremental_columns` unset and let this plugin automatically finds an AUTO_INCREMENT primary key. Currently, only strings, integers, DATETIME and TIMESTAMP are supported as incremental_columns.
90
97
 
91
98
 
92
99
  ## Trouble shooting
@@ -178,6 +185,9 @@ in:
178
185
  table: "my_table"
179
186
  select: "col1, col2, col3"
180
187
  where: "col4 != 'a'"
188
+ default_column_options:
189
+ TIMESTAMP: { type: string, timestamp_format: "%Y/%m/%d %H:%M:%S", timezone: "+0900"}
190
+ BIGINT: { type: string }
181
191
  column_options:
182
192
  col1: {type: long}
183
193
  col3: {type: string, timestamp_format: "%Y/%m/%d", timezone: "+0900"}
@@ -4,5 +4,5 @@ dependencies {
4
4
  compile 'mysql:mysql-connector-java:5.1.44'
5
5
  defaultJdbcDriver 'mysql:mysql-connector-java:5.1.44'
6
6
 
7
- testCompile 'org.embulk:embulk-standards:0.8.15'
7
+ testCompile 'org.embulk:embulk-standards:0.9.12'
8
8
  }
@@ -1,6 +1,5 @@
1
1
  package org.embulk.input.mysql.getter;
2
2
 
3
- import com.google.common.base.Optional;
4
3
  import org.embulk.config.ConfigException;
5
4
  import org.embulk.input.jdbc.AbstractJdbcInputPlugin.PluginTask;
6
5
  import org.embulk.input.jdbc.JdbcColumn;
@@ -8,8 +7,10 @@ import org.embulk.input.jdbc.JdbcColumnOption;
8
7
  import org.embulk.input.jdbc.JdbcInputConnection;
9
8
  import org.embulk.input.jdbc.getter.ColumnGetter;
10
9
  import org.embulk.input.jdbc.getter.ColumnGetterFactory;
10
+ import org.embulk.input.jdbc.getter.JsonColumnGetter;
11
11
  import org.embulk.input.mysql.MySQLInputConnection;
12
12
  import org.embulk.spi.PageBuilder;
13
+ import org.embulk.spi.type.Types;
13
14
  import org.joda.time.DateTimeZone;
14
15
 
15
16
  import java.util.TimeZone;
@@ -54,8 +55,19 @@ public class MySQLColumnGetterFactory
54
55
  else { // TIMESTAMP
55
56
  return new MySQLTimestampTimestampIncrementalHandler(sessionTimeZone, getter);
56
57
  }
58
+ case "JSON":
59
+ return new JsonColumnGetter(to, Types.JSON);
57
60
  default:
58
61
  return getter;
59
62
  }
60
63
  }
64
+
65
+ @Override
66
+ protected String sqlTypeToValueType(JdbcColumn column, int sqlType)
67
+ {
68
+ if ("json".equals(column.getTypeName())) {
69
+ return "json";
70
+ }
71
+ return super.sqlTypeToValueType(column, sqlType);
72
+ }
61
73
  }
@@ -134,4 +134,13 @@ public class BasicTest
134
134
  assertThat(readSortedFile(out1), is(readResource("test_valuetype_decimal_expected.csv")));
135
135
  assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_valuetype_decimal_expected.diff")));
136
136
  }
137
+
138
+ @Test
139
+ public void testValueTypeJson() throws Exception
140
+ {
141
+ Path out1 = embulk.createTempFile("csv");
142
+ TestingEmbulk.RunResult result1 = embulk.runInput(baseConfig.merge(loadYamlResource(embulk, "test_valuetype_json_config.yml")), out1);
143
+ assertThat(readSortedFile(out1), is(readResource("test_valuetype_json_expected.csv")));
144
+ assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_valuetype_json_expected.diff")));
145
+ }
137
146
  }
@@ -0,0 +1,70 @@
1
+ package org.embulk.input.mysql;
2
+
3
+ import com.google.common.base.Optional;
4
+ import org.embulk.config.TaskSource;
5
+ import org.embulk.input.jdbc.JdbcColumn;
6
+ import org.embulk.input.jdbc.JdbcColumnOption;
7
+ import org.embulk.input.jdbc.getter.ColumnGetterFactory;
8
+ import org.embulk.input.jdbc.getter.JsonColumnGetter;
9
+ import org.embulk.input.jdbc.getter.StringColumnGetter;
10
+ import org.embulk.input.mysql.getter.MySQLColumnGetterFactory;
11
+ import org.embulk.spi.time.TimestampFormat;
12
+ import org.embulk.spi.type.Type;
13
+ import org.joda.time.DateTimeZone;
14
+ import org.junit.Test;
15
+
16
+ import static org.hamcrest.MatcherAssert.assertThat;
17
+ import static org.hamcrest.core.IsInstanceOf.instanceOf;
18
+
19
+ public class MySQLColumnGetterFactoryTest
20
+ {
21
+ @Test
22
+ public void testJsonSupported()
23
+ {
24
+ JdbcColumnOption mockColumnOption = new JdbcColumnOption()
25
+ {
26
+ @Override
27
+ public String getValueType()
28
+ {
29
+ return "coalesce";
30
+ }
31
+
32
+ @Override
33
+ public Optional<Type> getType()
34
+ {
35
+ return Optional.absent();
36
+ }
37
+
38
+ @Override
39
+ public Optional<TimestampFormat> getTimestampFormat()
40
+ {
41
+ return Optional.absent();
42
+ }
43
+
44
+ @Override
45
+ public Optional<DateTimeZone> getTimeZone()
46
+ {
47
+ return Optional.absent();
48
+ }
49
+
50
+ @Override
51
+ public void validate()
52
+ {
53
+
54
+ }
55
+
56
+ @Override
57
+ public TaskSource dump()
58
+ {
59
+ return null;
60
+ }
61
+ };
62
+ JdbcColumn jsonColumn = new JdbcColumn("any_column_name", "JSON", 1, 0, 0); // 1: CHAR
63
+
64
+ ColumnGetterFactory fac = new MySQLColumnGetterFactory(null, null);
65
+ assertThat(fac.newColumnGetter(null, null, jsonColumn, mockColumnOption), instanceOf(JsonColumnGetter.class));
66
+
67
+ fac = new ColumnGetterFactory(null, null);
68
+ assertThat(fac.newColumnGetter(null, null, jsonColumn, mockColumnOption), instanceOf(StringColumnGetter.class));
69
+ }
70
+ }
@@ -3,11 +3,14 @@ package org.embulk.input.mysql;
3
3
  import com.google.common.base.Throwables;
4
4
  import com.google.common.collect.ImmutableList;
5
5
  import com.google.common.io.ByteStreams;
6
+
6
7
  import org.embulk.config.ConfigSource;
7
8
  import org.embulk.test.EmbulkTests;
8
9
 
9
10
  import java.io.IOException;
10
11
 
12
+ import jnr.ffi.Platform;
13
+ import jnr.ffi.Platform.OS;
11
14
  import static java.util.Locale.ENGLISH;
12
15
 
13
16
  public class MySQLTests
@@ -35,7 +38,7 @@ public class MySQLTests
35
38
  .add(config.get(String.class, "port", "3306"))
36
39
  .add(config.get(String.class, "database"))
37
40
  .add("-e")
38
- .add(sql);
41
+ .add(convert(sql));
39
42
 
40
43
  ProcessBuilder pb = new ProcessBuilder(args.build());
41
44
  pb.redirectErrorStream(true);
@@ -52,4 +55,13 @@ public class MySQLTests
52
55
  "Command finished with non-zero exit code. Exit code is %d.", code));
53
56
  }
54
57
  }
58
+
59
+ private static String convert(String sql)
60
+ {
61
+ if (Platform.getNativePlatform().getOS().equals(OS.WINDOWS)) {
62
+ // '"' should be '\"' and '\' should be '\\' in Windows
63
+ return sql.replace("\\\\", "\\").replace("\\", "\\\\").replace("\"", "\\\"");
64
+ }
65
+ return sql;
66
+ }
55
67
  }
@@ -0,0 +1,93 @@
1
+ package org.embulk.input.mysql;
2
+
3
+ import org.embulk.config.ConfigSource;
4
+ import org.embulk.input.MySQLInputPlugin;
5
+ import org.embulk.spi.InputPlugin;
6
+ import org.embulk.test.EmbulkTests;
7
+ import org.embulk.test.TestingEmbulk;
8
+ import org.junit.Before;
9
+ import org.junit.Rule;
10
+ import org.junit.Test;
11
+
12
+ import java.nio.file.Path;
13
+
14
+ import static org.embulk.input.mysql.MySQLTests.execute;
15
+ import static org.embulk.test.EmbulkTests.readSortedFile;
16
+ import static org.hamcrest.Matchers.is;
17
+ import static org.junit.Assert.assertThat;
18
+
19
+ public class OptionTest
20
+ {
21
+ private static final String BASIC_RESOURCE_PATH = "org/embulk/input/mysql/test/expect/option/";
22
+
23
+ private static ConfigSource loadYamlResource(TestingEmbulk embulk, String fileName)
24
+ {
25
+ return embulk.loadYamlResource(BASIC_RESOURCE_PATH + fileName);
26
+ }
27
+
28
+ private static String readResource(String fileName)
29
+ {
30
+ return EmbulkTests.readResource(BASIC_RESOURCE_PATH + fileName);
31
+ }
32
+
33
+ @Rule
34
+ public TestingEmbulk embulk = TestingEmbulk.builder()
35
+ .registerPlugin(InputPlugin.class, "mysql", MySQLInputPlugin.class)
36
+ .build();
37
+
38
+ private ConfigSource baseConfig;
39
+
40
+ @Before
41
+ public void setup()
42
+ {
43
+ baseConfig = MySQLTests.baseConfig();
44
+ execute(readResource("setup.sql")); // setup rows
45
+ }
46
+
47
+ @Test
48
+ public void testBeforeSetup() throws Exception
49
+ {
50
+ Path out1 = embulk.createTempFile("csv");
51
+ TestingEmbulk.RunResult result1 = embulk.runInput(baseConfig.merge(loadYamlResource(embulk, "before_setup.yml")), out1);
52
+ assertThat(readSortedFile(out1), is(readResource("before_setup_expected.csv")));
53
+ }
54
+
55
+ @Test
56
+ public void testBeforeSelect() throws Exception
57
+ {
58
+ Path out1 = embulk.createTempFile("csv");
59
+ TestingEmbulk.RunResult result1 = embulk.runInput(baseConfig.merge(loadYamlResource(embulk, "before_select.yml")), out1);
60
+ assertThat(readSortedFile(out1), is(readResource("before_select_expected.csv")));
61
+ }
62
+
63
+ @Test
64
+ public void testAfterSelect() throws Exception
65
+ {
66
+ Path out1 = embulk.createTempFile("csv");
67
+ TestingEmbulk.RunResult result1 = embulk.runInput(baseConfig.merge(loadYamlResource(embulk, "after_select.yml")), out1);
68
+ assertThat(readSortedFile(out1), is(readResource("expected1.csv")));
69
+
70
+ baseConfig = MySQLTests.baseConfig();
71
+ Path out2 = embulk.createTempFile("csv");
72
+ TestingEmbulk.RunResult result2 = embulk.runInput(baseConfig.merge(loadYamlResource(embulk, "input.yml")), out2);
73
+ assertThat(readSortedFile(out2), is(readResource("after_select_expected.csv")));
74
+ }
75
+
76
+ @Test
77
+ public void testColumnOptions() throws Exception
78
+ {
79
+ Path out1 = embulk.createTempFile("csv");
80
+ TestingEmbulk.RunResult result1 = embulk.runInput(baseConfig.merge(loadYamlResource(embulk, "column_options.yml")), out1);
81
+ assertThat(readSortedFile(out1), is(readResource("column_options_expected.csv")));
82
+ }
83
+
84
+ @Test
85
+ public void testDefaultColumnOptions() throws Exception
86
+ {
87
+ Path out1 = embulk.createTempFile("csv");
88
+ TestingEmbulk.RunResult result1 = embulk.runInput(baseConfig.merge(loadYamlResource(embulk, "default_column_options.yml")), out1);
89
+ assertThat(readSortedFile(out1), is(readResource("default_column_options_expected.csv")));
90
+ }
91
+
92
+
93
+ }
@@ -17,6 +17,7 @@ create table test1 (
17
17
  c13 timestamp,
18
18
  c14 time,
19
19
  c15 datetime(6),
20
+ c16 json,
20
21
  primary key(id)
21
22
  );
22
23
 
@@ -36,6 +37,7 @@ insert into test1 values(
36
37
  null,
37
38
  '2015-06-04 23:45:06',
38
39
  null,
40
+ null,
39
41
  null
40
42
  );
41
43
 
@@ -55,7 +57,8 @@ insert into test1 values(
55
57
  '2015-06-04 12:34:56',
56
58
  '2015-06-04 23:45:06',
57
59
  '08:04:02',
58
- '2015-06-04 01:02:03.123456'
60
+ '2015-06-04 01:02:03.123456',
61
+ '{"key":"value"}'
59
62
  );
60
63
 
61
64
  drop table if exists test2;
@@ -1,2 +1,2 @@
1
- 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,
2
- 11,true,true,false,false,true,true,false,true,,,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000
1
+ 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,,
2
+ 11,true,true,false,false,true,true,false,true,,,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000,"{""key"":""value""}"
@@ -1,2 +1,2 @@
1
- 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,
2
- 11,99.0,9999.0,-9.9999999E7,-1.0E16,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678.0,,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000
1
+ 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,,
2
+ 11,99.0,9999.0,-9.9999999E7,-1.0E16,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678.0,,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000,"{""key"":""value""}"
@@ -1,2 +1,2 @@
1
- 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,
2
- 11,99,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000
1
+ 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,,
2
+ 11,99,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000,"{""key"":""value""}"
@@ -1,2 +1,2 @@
1
- 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,
2
- 11,99,9999,-99999999,-9999999999999999,1,1,-1234,123456789012345678,5678,,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000
1
+ 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,,
2
+ 11,99,9999,-99999999,-9999999999999999,1,1,-1234,123456789012345678,5678,,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000,"{""key"":""value""}"
@@ -1,2 +1,2 @@
1
- 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,
2
- 11,99,9999,-99999999,-9999999999999999,1.2345,1.234567890123,-1234,123456789012345678.12,5678,xy,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000
1
+ 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,,
2
+ 11,99,9999,-99999999,-9999999999999999,1.2345,1.234567890123,-1234,123456789012345678.12,5678,xy,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000,"{""key"":""value""}"
@@ -1,2 +1,2 @@
1
- 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,
2
- 11,99,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000
1
+ 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,,
2
+ 11,99,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000,"{""key"":""value""}"
@@ -1,2 +1,2 @@
1
- 10,,,,,,,,,,,,,2015/06/05 08:45:06,,
2
- 11,99,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015/06/03,2015/06/04 12:34:56,2015/06/05 08:45:06,15-04-02,2015/06/04 01:02:03.123456
1
+ 10,,,,,,,,,,,,,2015/06/05 08:45:06,,,
2
+ 11,99,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015/06/03,2015/06/04 12:34:56,2015/06/05 08:45:06,15-04-02,2015/06/04 01:02:03.123456,"{""key"":""value""}"
@@ -1,2 +1,2 @@
1
- 10,,,,,,,,,,,,,2015/06/05 08:45:06,,
2
- 11,99,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015/06/04,2015/06/04 21:34:56,2015/06/05 08:45:06,09-04-02,2015/06/04 10:02:03.123456
1
+ 10,,,,,,,,,,,,,2015/06/05 08:45:06,,,
2
+ 11,99,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015/06/04,2015/06/04 21:34:56,2015/06/05 08:45:06,09-04-02,2015/06/04 10:02:03.123456,"{""key"":""value""}"
@@ -1,2 +1,2 @@
1
- 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,
2
- 11,99.0,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000
1
+ 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,,
2
+ 11,99.0,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000,"{""key"":""value""}"
@@ -0,0 +1,3 @@
1
+ table: test1
2
+ column_options:
3
+ c10: {value_type: json}
@@ -0,0 +1,2 @@
1
+ 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,,
2
+ 11,99,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000,"{""key"":""value""}"
@@ -1,3 +1,4 @@
1
1
  table: test1
2
2
  column_options:
3
3
  c1: {value_type: string}
4
+ c16: {value_type: string}
@@ -1,2 +1,2 @@
1
- 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,
2
- 11,99,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000
1
+ 10,,,,,,,,,,,,,2015-06-04 23:45:06.000000 +0000,,,
2
+ 11,99,9999,-99999999,-9999999999999999,1.2345000505447388,1.234567890123,-1234.0,1.2345678901234568E17,5678,xy,2015-06-03 21:00:00.000000 +0000,2015-06-04 12:34:56.000000 +0000,2015-06-04 23:45:06.000000 +0000,1970-01-01 06:04:02.000000 +0000,2015-06-04 01:02:03.123456 +0000,"{""key"":""value""}"
@@ -0,0 +1,3 @@
1
+ table: test1
2
+ order_by: 'id'
3
+ after_select: delete from test1 where id = 3
@@ -0,0 +1,3 @@
1
+ table: test1
2
+ order_by: 'id'
3
+ before_select: delete from test1 where id = 3
@@ -0,0 +1,6 @@
1
+ table: test2
2
+ order_by: 'id'
3
+ before_setup: create table test2 (id int, num int); insert into test2 values(1, 999), (2, 0);
4
+ d: insert into test2 values(1, 999), (2, 0);
5
+ options:
6
+ allowMultiQueries: true
@@ -0,0 +1,5 @@
1
+ table: test3
2
+ order_by: 'id'
3
+ column_options:
4
+ datetime1: {type: string, timestamp_format: '%Y/%m/%d %H:%M:%S', timezone: "+0000"}
5
+ datetime2: {type: string, timestamp_format: '%Y-%m-%d %H:%M:%S', timezone: "+0900"}
@@ -0,0 +1,3 @@
1
+ 1,,
2
+ 2,2019/01/02 12:34:56,2019-01-02 21:34:56
3
+ 3,2018/12/31 23:59:59,2019-01-01 08:59:59
@@ -0,0 +1,6 @@
1
+ table: test3
2
+ order_by: 'id'
3
+ default_column_options:
4
+ TIMESTAMP: {type: string, timestamp_format: '%Y/%m/%d %H:%M:%S', timezone: "+0000"}
5
+ column_options:
6
+ datetime2: {type: string, timestamp_format: '%Y-%m-%d %H:%M:%S', timezone: "+0900"}
@@ -0,0 +1,3 @@
1
+ 1,,
2
+ 2,2019/01/02 12:34:56,2019-01-02 21:34:56
3
+ 3,2018/12/31 23:59:59,2019-01-01 08:59:59
@@ -0,0 +1,2 @@
1
+ table: test1
2
+ order_by: 'id'
@@ -0,0 +1,29 @@
1
+ drop table if exists test1;
2
+
3
+ create table test1 (
4
+ id int not null,
5
+ name varchar(8) not null,
6
+ primary key(id)
7
+ );
8
+
9
+ insert into test1 values
10
+ (1, 'A'),
11
+ (2, 'B'),
12
+ (3, 'C'),
13
+ (4, 'D');
14
+
15
+ drop table if exists test2;
16
+
17
+ drop table if exists test3;
18
+
19
+ create table test3 (
20
+ id int not null,
21
+ datetime1 datetime,
22
+ datetime2 datetime,
23
+ primary key(id)
24
+ );
25
+
26
+ insert into test3 values
27
+ (1, NULL, NULL),
28
+ (2, '2019-01-02 12:34:56', '2019-01-02 12:34:56'),
29
+ (3, '2018-12-31 23:59:59', '2018-12-31 23:59:59');
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.9.3
4
+ version: 0.10.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: 2018-08-10 00:00:00.000000000 Z
11
+ date: 2019-05-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Selects records from a table.
14
14
  email:
@@ -19,8 +19,8 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - README.md
21
21
  - build.gradle
22
- - classpath/embulk-input-jdbc-0.9.3.jar
23
- - classpath/embulk-input-mysql-0.9.3.jar
22
+ - classpath/embulk-input-jdbc-0.10.0.jar
23
+ - classpath/embulk-input-mysql-0.10.0.jar
24
24
  - default_jdbc_driver/mysql-connector-java-5.1.44.jar
25
25
  - lib/embulk/input/mysql.rb
26
26
  - src/main/java/org/embulk/input/MySQLInputPlugin.java
@@ -31,7 +31,9 @@ files:
31
31
  - src/main/java/org/embulk/input/mysql/getter/MySQLTimestampTimestampIncrementalHandler.java
32
32
  - src/test/java/org/embulk/input/mysql/BasicTest.java
33
33
  - src/test/java/org/embulk/input/mysql/IncrementalTest.java
34
+ - src/test/java/org/embulk/input/mysql/MySQLColumnGetterFactoryTest.java
34
35
  - src/test/java/org/embulk/input/mysql/MySQLTests.java
36
+ - src/test/java/org/embulk/input/mysql/OptionTest.java
35
37
  - src/test/resources/org/embulk/input/mysql/test/expect/basic/setup.sql
36
38
  - src/test/resources/org/embulk/input/mysql/test/expect/basic/test_boolean_config.yml
37
39
  - src/test/resources/org/embulk/input/mysql/test/expect/basic/test_boolean_expected.csv
@@ -60,6 +62,9 @@ files:
60
62
  - src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_decimal_config.yml
61
63
  - src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_decimal_expected.csv
62
64
  - src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_decimal_expected.diff
65
+ - src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_json_config.yml
66
+ - src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_json_expected.csv
67
+ - src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_json_expected.diff
63
68
  - src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_string_config.yml
64
69
  - src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_string_expected.csv
65
70
  - src/test/resources/org/embulk/input/mysql/test/expect/basic/test_valuetype_string_expected.diff
@@ -101,6 +106,19 @@ files:
101
106
  - src/test/resources/org/embulk/input/mysql/test/expect/incremental/ts/expected_2.diff
102
107
  - src/test/resources/org/embulk/input/mysql/test/expect/incremental/ts/insert_more.sql
103
108
  - src/test/resources/org/embulk/input/mysql/test/expect/incremental/ts/setup.sql
109
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/after_select.yml
110
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/after_select_expected.csv
111
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/before_select.yml
112
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/before_select_expected.csv
113
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/before_setup.yml
114
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/before_setup_expected.csv
115
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/column_options.yml
116
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/column_options_expected.csv
117
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/default_column_options.yml
118
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/default_column_options_expected.csv
119
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/expected1.csv
120
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/input.yml
121
+ - src/test/resources/org/embulk/input/mysql/test/expect/option/setup.sql
104
122
  homepage: https://github.com/embulk/embulk-input-jdbc
105
123
  licenses:
106
124
  - Apache 2.0
@@ -121,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
139
  version: '0'
122
140
  requirements: []
123
141
  rubyforge_project:
124
- rubygems_version: 2.4.8
142
+ rubygems_version: 2.6.13
125
143
  signing_key:
126
144
  specification_version: 4
127
145
  summary: JDBC input plugin for Embulk