embulk-output-mysql 0.7.6 → 0.7.7

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: 0127c3c0e715d220b912328ea22c7dc102093bc8
4
- data.tar.gz: a705383341114de52f80c9171db7e5f7086ad633
3
+ metadata.gz: bf58d4882f474c11125f531945a5048f350c0f39
4
+ data.tar.gz: 2f28afb1f6bf1bcfdc700595f59eaaf0143984c7
5
5
  SHA512:
6
- metadata.gz: 978d30921dc3e84620dc5bdf689958b3650829022e5a2ddc42594fc91fe5a1dbc8af485b1b5688ac647dc8a75d70aa5b63a1e332404e5fe99ca79363e02f7497
7
- data.tar.gz: 3d6e14091da1ef64063d4bf97ffa4538e2fab06bc376da8ccb292336e92a33f7c73e40c57c8c4edf1d7d0a8577bf0d6e5d47198c29666665f09d83080c8f8470
6
+ metadata.gz: 227b8b0b5a95eb0c464a98a67a2824fb79d93c0491b97bcb729c0b15f624307d86095cdd5c1ed74afc2a424215ca87df070046fdcb2990f83b9398ac72e4e671
7
+ data.tar.gz: 9536f2f57ae9a11a48a0b594b4f67157a8ff35bb83ba3528db9cf05544fec85c60c4ae8a0fd17b979d92e35c5b413e058c41236e0751ad6786fda2e821519fcd
data/README.md CHANGED
@@ -29,6 +29,7 @@ MySQL output plugin for Embulk loads records to MySQL.
29
29
  - **value_type**: This plugin converts input column type (embulk type) into a database type to build a INSERT statement. This value_type option controls the type of the value in a INSERT statement. (string, default: depends on the sql type of the column. Available values options are: `byte`, `short`, `int`, `long`, `double`, `float`, `boolean`, `string`, `nstring`, `date`, `time`, `timestamp`, `decimal`, `json`, `null`, `pass`)
30
30
  - **timestamp_format**: If input column type (embulk type) is timestamp and value_type is `string` or `nstring`, this plugin needs to format the timestamp value into a string. This timestamp_format option is used to control the format of the timestamp. (string, default: `%Y-%m-%d %H:%M:%S.%6N`)
31
31
  - **timezone**: If input column type (embulk type) is timestamp, this plugin needs to format the timestamp value into a SQL string. In this cases, this timezone option is used to control the timezone. (string, value of default_timezone option is used by default)
32
+ - **before_load**: if set, this SQL will be executed before loading all records. In truncate_insert mode, the SQL will be executed after truncating. replace mode doesn't support this option.
32
33
  - **after_load**: if set, this SQL will be executed after loading all records.
33
34
 
34
35
  ### Modes
@@ -34,6 +34,235 @@ public class MySQLOutputPluginTest extends AbstractJdbcOutputPluginTest
34
34
  enabled = true;
35
35
  }
36
36
 
37
+ @Test
38
+ public void testInsertDirectBeforeLoad() throws Exception
39
+ {
40
+ if (!enabled) {
41
+ return;
42
+ }
43
+
44
+ String table = "test1";
45
+
46
+ dropTable(table);
47
+ createTable(table);
48
+ executeSQL(String.format("INSERT INTO %s VALUES('B001', 0, 'z')", table));
49
+ executeSQL(String.format("INSERT INTO %s VALUES('B002', 9, 'z')", table));
50
+
51
+ test("/mysql/yml/test-insert-direct-before-load.yml");
52
+
53
+ List<List<Object>> rows = select(table);
54
+ assertEquals(4, rows.size());
55
+ Iterator<List<Object>> i1 = rows.iterator();
56
+ {
57
+ Iterator<Object> i2 = i1.next().iterator();
58
+ assertEquals("A001", i2.next());
59
+ assertEquals(9, i2.next());
60
+ assertEquals("a", i2.next());
61
+ }
62
+ {
63
+ Iterator<Object> i2 = i1.next().iterator();
64
+ assertEquals("A002", i2.next());
65
+ assertEquals(0, i2.next());
66
+ assertEquals("b", i2.next());
67
+ }
68
+ {
69
+ Iterator<Object> i2 = i1.next().iterator();
70
+ assertEquals("A003", i2.next());
71
+ assertEquals(9, i2.next());
72
+ assertEquals("c", i2.next());
73
+ }
74
+ {
75
+ Iterator<Object> i2 = i1.next().iterator();
76
+ assertEquals("B001", i2.next());
77
+ assertEquals(0, i2.next());
78
+ assertEquals("z", i2.next());
79
+ }
80
+ }
81
+
82
+ @Test
83
+ public void testInsertBeforeLoad() throws Exception
84
+ {
85
+ if (!enabled) {
86
+ return;
87
+ }
88
+
89
+ String table = "test1";
90
+
91
+ dropTable(table);
92
+ createTable(table);
93
+ executeSQL(String.format("INSERT INTO %s VALUES('B001', 0, 'z')", table));
94
+ executeSQL(String.format("INSERT INTO %s VALUES('B002', 9, 'z')", table));
95
+
96
+ test("/mysql/yml/test-insert-before-load.yml");
97
+
98
+ List<List<Object>> rows = select(table);
99
+ assertEquals(4, rows.size());
100
+ Iterator<List<Object>> i1 = rows.iterator();
101
+ {
102
+ Iterator<Object> i2 = i1.next().iterator();
103
+ assertEquals("A001", i2.next());
104
+ assertEquals(9, i2.next());
105
+ assertEquals("a", i2.next());
106
+ }
107
+ {
108
+ Iterator<Object> i2 = i1.next().iterator();
109
+ assertEquals("A002", i2.next());
110
+ assertEquals(0, i2.next());
111
+ assertEquals("b", i2.next());
112
+ }
113
+ {
114
+ Iterator<Object> i2 = i1.next().iterator();
115
+ assertEquals("A003", i2.next());
116
+ assertEquals(9, i2.next());
117
+ assertEquals("c", i2.next());
118
+ }
119
+ {
120
+ Iterator<Object> i2 = i1.next().iterator();
121
+ assertEquals("B001", i2.next());
122
+ assertEquals(0, i2.next());
123
+ assertEquals("z", i2.next());
124
+ }
125
+ }
126
+
127
+ @Test
128
+ public void testTruncateInsertBeforeLoad() throws Exception
129
+ {
130
+ if (!enabled) {
131
+ return;
132
+ }
133
+
134
+ String table = "test1";
135
+
136
+ dropTable(table);
137
+ createTable(table);
138
+ executeSQL(String.format("INSERT INTO %s VALUES('B001', 0, 'z')", table));
139
+ executeSQL(String.format("INSERT INTO %s VALUES('B002', 9, 'z')", table));
140
+
141
+ test("/mysql/yml/test-truncate-insert-before-load.yml");
142
+
143
+ List<List<Object>> rows = select(table);
144
+ assertEquals(4, rows.size());
145
+ Iterator<List<Object>> i1 = rows.iterator();
146
+ {
147
+ Iterator<Object> i2 = i1.next().iterator();
148
+ assertEquals("A001", i2.next());
149
+ assertEquals(9, i2.next());
150
+ assertEquals("a", i2.next());
151
+ }
152
+ {
153
+ Iterator<Object> i2 = i1.next().iterator();
154
+ assertEquals("A002", i2.next());
155
+ assertEquals(0, i2.next());
156
+ assertEquals("b", i2.next());
157
+ }
158
+ {
159
+ Iterator<Object> i2 = i1.next().iterator();
160
+ assertEquals("A003", i2.next());
161
+ assertEquals(9, i2.next());
162
+ assertEquals("c", i2.next());
163
+ }
164
+ {
165
+ Iterator<Object> i2 = i1.next().iterator();
166
+ assertEquals("C001", i2.next());
167
+ assertEquals(0, i2.next());
168
+ assertEquals("x", i2.next());
169
+ }
170
+ }
171
+
172
+ @Test
173
+ public void testMergeDirectBeforeLoad() throws Exception
174
+ {
175
+ if (!enabled) {
176
+ return;
177
+ }
178
+
179
+ String table = "test1";
180
+
181
+ dropTable(table);
182
+ createTable(table);
183
+ executeSQL(String.format("INSERT INTO %s VALUES('A002', 1, 'y')", table));
184
+ executeSQL(String.format("INSERT INTO %s VALUES('A003', 1, 'y')", table));
185
+ executeSQL(String.format("INSERT INTO %s VALUES('B001', 0, 'z')", table));
186
+ executeSQL(String.format("INSERT INTO %s VALUES('B002', 9, 'z')", table));
187
+
188
+ test("/mysql/yml/test-merge-direct-before-load.yml");
189
+
190
+ List<List<Object>> rows = select(table);
191
+ assertEquals(4, rows.size());
192
+ Iterator<List<Object>> i1 = rows.iterator();
193
+ {
194
+ Iterator<Object> i2 = i1.next().iterator();
195
+ assertEquals("A001", i2.next());
196
+ assertEquals(9, i2.next());
197
+ assertEquals("a", i2.next());
198
+ }
199
+ {
200
+ Iterator<Object> i2 = i1.next().iterator();
201
+ assertEquals("A002", i2.next());
202
+ assertEquals(0, i2.next());
203
+ assertEquals("b", i2.next());
204
+ }
205
+ {
206
+ Iterator<Object> i2 = i1.next().iterator();
207
+ assertEquals("A003", i2.next());
208
+ assertEquals(9, i2.next());
209
+ assertEquals("c", i2.next());
210
+ }
211
+ {
212
+ Iterator<Object> i2 = i1.next().iterator();
213
+ assertEquals("B001", i2.next());
214
+ assertEquals(0, i2.next());
215
+ assertEquals("z", i2.next());
216
+ }
217
+ }
218
+
219
+ @Test
220
+ public void testMergeBeforeLoad() throws Exception
221
+ {
222
+ if (!enabled) {
223
+ return;
224
+ }
225
+
226
+ String table = "test1";
227
+
228
+ dropTable(table);
229
+ createTable(table);
230
+ executeSQL(String.format("INSERT INTO %s VALUES('A002', 1, 'y')", table));
231
+ executeSQL(String.format("INSERT INTO %s VALUES('A003', 1, 'y')", table));
232
+ executeSQL(String.format("INSERT INTO %s VALUES('B001', 0, 'z')", table));
233
+ executeSQL(String.format("INSERT INTO %s VALUES('B002', 9, 'z')", table));
234
+
235
+ test("/mysql/yml/test-merge-before-load.yml");
236
+
237
+ List<List<Object>> rows = select(table);
238
+ assertEquals(4, rows.size());
239
+ Iterator<List<Object>> i1 = rows.iterator();
240
+ {
241
+ Iterator<Object> i2 = i1.next().iterator();
242
+ assertEquals("A001", i2.next());
243
+ assertEquals(9, i2.next());
244
+ assertEquals("a", i2.next());
245
+ }
246
+ {
247
+ Iterator<Object> i2 = i1.next().iterator();
248
+ assertEquals("A002", i2.next());
249
+ assertEquals(0, i2.next());
250
+ assertEquals("b", i2.next());
251
+ }
252
+ {
253
+ Iterator<Object> i2 = i1.next().iterator();
254
+ assertEquals("A003", i2.next());
255
+ assertEquals(9, i2.next());
256
+ assertEquals("c", i2.next());
257
+ }
258
+ {
259
+ Iterator<Object> i2 = i1.next().iterator();
260
+ assertEquals("B001", i2.next());
261
+ assertEquals(0, i2.next());
262
+ assertEquals("z", i2.next());
263
+ }
264
+ }
265
+
37
266
  @Test
38
267
  public void testInsertDirectAfterLoad() throws Exception
39
268
  {
@@ -0,0 +1,22 @@
1
+ in:
2
+ type: file
3
+ path_prefix: '/mysql/data/test1.csv'
4
+ parser:
5
+ charset: UTF-8
6
+ newline: CRLF
7
+ type: csv
8
+ delimiter: ','
9
+ quote: ''
10
+ columns:
11
+ - {name: id, type: string}
12
+ - {name: int_item, type: long}
13
+ - {name: varchar_item, type: string}
14
+ out:
15
+ type: mysql
16
+ host: #host#
17
+ database: #database#
18
+ user: #user#
19
+ password: #password#
20
+ table: test1
21
+ mode: insert
22
+ before_load: "delete from test1 where int_item = 9"
@@ -0,0 +1,22 @@
1
+ in:
2
+ type: file
3
+ path_prefix: '/mysql/data/test1.csv'
4
+ parser:
5
+ charset: UTF-8
6
+ newline: CRLF
7
+ type: csv
8
+ delimiter: ','
9
+ quote: ''
10
+ columns:
11
+ - {name: id, type: string}
12
+ - {name: int_item, type: long}
13
+ - {name: varchar_item, type: string}
14
+ out:
15
+ type: mysql
16
+ host: #host#
17
+ database: #database#
18
+ user: #user#
19
+ password: #password#
20
+ table: test1
21
+ mode: insert_direct
22
+ before_load: "delete from test1 where int_item = 9"
@@ -0,0 +1,22 @@
1
+ in:
2
+ type: file
3
+ path_prefix: '/mysql/data/test1.csv'
4
+ parser:
5
+ charset: UTF-8
6
+ newline: CRLF
7
+ type: csv
8
+ delimiter: ','
9
+ quote: ''
10
+ columns:
11
+ - {name: id, type: string}
12
+ - {name: int_item, type: long}
13
+ - {name: varchar_item, type: string}
14
+ out:
15
+ type: mysql
16
+ host: #host#
17
+ database: #database#
18
+ user: #user#
19
+ password: #password#
20
+ table: test1
21
+ mode: merge
22
+ before_load: "delete from test1 where int_item = 9"
@@ -0,0 +1,22 @@
1
+ in:
2
+ type: file
3
+ path_prefix: '/mysql/data/test1.csv'
4
+ parser:
5
+ charset: UTF-8
6
+ newline: CRLF
7
+ type: csv
8
+ delimiter: ','
9
+ quote: ''
10
+ columns:
11
+ - {name: id, type: string}
12
+ - {name: int_item, type: long}
13
+ - {name: varchar_item, type: string}
14
+ out:
15
+ type: mysql
16
+ host: #host#
17
+ database: #database#
18
+ user: #user#
19
+ password: #password#
20
+ table: test1
21
+ mode: merge_direct
22
+ before_load: "delete from test1 where int_item = 9"
@@ -0,0 +1,22 @@
1
+ in:
2
+ type: file
3
+ path_prefix: '/mysql/data/test1.csv'
4
+ parser:
5
+ charset: UTF-8
6
+ newline: CRLF
7
+ type: csv
8
+ delimiter: ','
9
+ quote: ''
10
+ columns:
11
+ - {name: id, type: string}
12
+ - {name: int_item, type: long}
13
+ - {name: varchar_item, type: string}
14
+ out:
15
+ type: mysql
16
+ host: #host#
17
+ database: #database#
18
+ user: #user#
19
+ password: #password#
20
+ table: test1
21
+ mode: truncate_insert
22
+ before_load: "insert into test1 values('C001', 0, 'x')"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-mysql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.6
4
+ version: 0.7.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-23 00:00:00.000000000 Z
11
+ date: 2017-04-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Inserts or updates records to 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-output-jdbc-0.7.6.jar
23
- - classpath/embulk-output-mysql-0.7.6.jar
22
+ - classpath/embulk-output-jdbc-0.7.7.jar
23
+ - classpath/embulk-output-mysql-0.7.7.jar
24
24
  - classpath/mysql-connector-java-5.1.34.jar
25
25
  - lib/embulk/output/mysql.rb
26
26
  - src/main/java/org/embulk/output/MySQLOutputPlugin.java
@@ -30,11 +30,16 @@ files:
30
30
  - src/test/java/org/embulk/output/mysql/MySQLOutputPluginTest.java
31
31
  - src/test/resources/mysql/data/test1.csv
32
32
  - src/test/resources/mysql/yml/test-insert-after-load.yml
33
+ - src/test/resources/mysql/yml/test-insert-before-load.yml
33
34
  - src/test/resources/mysql/yml/test-insert-direct-after-load.yml
35
+ - src/test/resources/mysql/yml/test-insert-direct-before-load.yml
34
36
  - src/test/resources/mysql/yml/test-merge-after-load.yml
37
+ - src/test/resources/mysql/yml/test-merge-before-load.yml
35
38
  - src/test/resources/mysql/yml/test-merge-direct-after-load.yml
39
+ - src/test/resources/mysql/yml/test-merge-direct-before-load.yml
36
40
  - src/test/resources/mysql/yml/test-replace-after-load.yml
37
41
  - src/test/resources/mysql/yml/test-truncate-insert-after-load.yml
42
+ - src/test/resources/mysql/yml/test-truncate-insert-before-load.yml
38
43
  homepage: https://github.com/embulk/embulk-output-jdbc
39
44
  licenses:
40
45
  - Apache 2.0