embulk-input-mysql 0.9.3 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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