embulk-output-mysql 0.7.0 → 0.7.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 +4 -4
- data/README.md +1 -0
- data/build.gradle +1 -1
- data/classpath/{embulk-output-jdbc-0.7.0.jar → embulk-output-jdbc-0.7.1.jar} +0 -0
- data/classpath/{embulk-output-mysql-0.7.0.jar → embulk-output-mysql-0.7.1.jar} +0 -0
- data/src/test/java/org/embulk/output/mysql/MySQLOutputPluginTest.java +340 -0
- data/src/test/resources/mysql/data/test1.csv +3 -0
- data/src/test/resources/mysql/yml/test-insert-after-load.yml +22 -0
- data/src/test/resources/mysql/yml/test-insert-direct-after-load.yml +22 -0
- data/src/test/resources/mysql/yml/test-merge-after-load.yml +22 -0
- data/src/test/resources/mysql/yml/test-merge-direct-after-load.yml +22 -0
- data/src/test/resources/mysql/yml/test-replace-after-load.yml +22 -0
- data/src/test/resources/mysql/yml/test-truncate-insert-after-load.yml +22 -0
- metadata +12 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9830d9379f4a4e6e2db01c7048a651b8db696fe2
|
4
|
+
data.tar.gz: ce2688a78d31c9e8b417da61ed4e7e4019b289ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 704b948e549ee8a5376558b99688da68742e1c098bb983eb5c6a30e73f4aa5050d15cac526156b1f4172108f185456b6b2bae73cac6817c12aafb5b1cd9b924a
|
7
|
+
data.tar.gz: 8329a028727fc4dab736663291c83ae511396cb4c85b282983d1584ffa94048b7f44fa05a51e0b113f2fcdfee489453cbc98e9892177962d008920a7b05061c5
|
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
|
+
- **after_load**: if set, this SQL will be executed after loading all records.
|
32
33
|
|
33
34
|
### Modes
|
34
35
|
|
data/build.gradle
CHANGED
Binary file
|
Binary file
|
@@ -0,0 +1,340 @@
|
|
1
|
+
package org.embulk.output.mysql;
|
2
|
+
|
3
|
+
import static java.util.Locale.ENGLISH;
|
4
|
+
import static org.junit.Assert.assertEquals;
|
5
|
+
|
6
|
+
import java.sql.Connection;
|
7
|
+
import java.sql.DriverManager;
|
8
|
+
import java.sql.SQLException;
|
9
|
+
import java.util.Iterator;
|
10
|
+
import java.util.List;
|
11
|
+
|
12
|
+
import org.embulk.output.AbstractJdbcOutputPluginTest;
|
13
|
+
import org.embulk.output.MySQLOutputPlugin;
|
14
|
+
import org.embulk.spi.OutputPlugin;
|
15
|
+
import org.junit.Test;
|
16
|
+
|
17
|
+
|
18
|
+
public class MySQLOutputPluginTest extends AbstractJdbcOutputPluginTest
|
19
|
+
{
|
20
|
+
@Override
|
21
|
+
protected void prepare() throws SQLException
|
22
|
+
{
|
23
|
+
tester.addPlugin(OutputPlugin.class, "mysql", MySQLOutputPlugin.class);
|
24
|
+
|
25
|
+
try {
|
26
|
+
connect();
|
27
|
+
} catch (SQLException e) {
|
28
|
+
System.err.println(e);
|
29
|
+
System.err.println(String.format(ENGLISH, "Warning: prepare a schema on MySQL (server = %s, port = %d, database = %s, user = %s, password = %s).",
|
30
|
+
getHost(), getPort(), getDatabase(), getUser(), getPassword()));
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
|
34
|
+
enabled = true;
|
35
|
+
}
|
36
|
+
|
37
|
+
@Test
|
38
|
+
public void testInsertDirectAfterLoad() 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-after-load.yml");
|
52
|
+
|
53
|
+
List<List<Object>> rows = select(table);
|
54
|
+
assertEquals(5, 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("x", 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("x", 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
|
+
Iterator<Object> i2 = i1.next().iterator();
|
82
|
+
assertEquals("B002", i2.next());
|
83
|
+
assertEquals(9, i2.next());
|
84
|
+
assertEquals("x", i2.next());
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
@Test
|
89
|
+
public void testInsertAfterLoad() throws Exception
|
90
|
+
{
|
91
|
+
if (!enabled) {
|
92
|
+
return;
|
93
|
+
}
|
94
|
+
|
95
|
+
String table = "test1";
|
96
|
+
|
97
|
+
dropTable(table);
|
98
|
+
createTable(table);
|
99
|
+
executeSQL(String.format("INSERT INTO %s VALUES('B001', 0, 'z')", table));
|
100
|
+
executeSQL(String.format("INSERT INTO %s VALUES('B002', 9, 'z')", table));
|
101
|
+
|
102
|
+
test("/mysql/yml/test-insert-after-load.yml");
|
103
|
+
|
104
|
+
List<List<Object>> rows = select(table);
|
105
|
+
assertEquals(5, rows.size());
|
106
|
+
Iterator<List<Object>> i1 = rows.iterator();
|
107
|
+
{
|
108
|
+
Iterator<Object> i2 = i1.next().iterator();
|
109
|
+
assertEquals("A001", i2.next());
|
110
|
+
assertEquals(9, i2.next());
|
111
|
+
assertEquals("x", i2.next());
|
112
|
+
}
|
113
|
+
{
|
114
|
+
Iterator<Object> i2 = i1.next().iterator();
|
115
|
+
assertEquals("A002", i2.next());
|
116
|
+
assertEquals(0, i2.next());
|
117
|
+
assertEquals("b", i2.next());
|
118
|
+
}
|
119
|
+
{
|
120
|
+
Iterator<Object> i2 = i1.next().iterator();
|
121
|
+
assertEquals("A003", i2.next());
|
122
|
+
assertEquals(9, i2.next());
|
123
|
+
assertEquals("x", i2.next());
|
124
|
+
}
|
125
|
+
{
|
126
|
+
Iterator<Object> i2 = i1.next().iterator();
|
127
|
+
assertEquals("B001", i2.next());
|
128
|
+
assertEquals(0, i2.next());
|
129
|
+
assertEquals("z", i2.next());
|
130
|
+
}
|
131
|
+
{
|
132
|
+
Iterator<Object> i2 = i1.next().iterator();
|
133
|
+
assertEquals("B002", i2.next());
|
134
|
+
assertEquals(9, i2.next());
|
135
|
+
assertEquals("x", i2.next());
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
@Test
|
140
|
+
public void testTruncateInsertAfterLoad() throws Exception
|
141
|
+
{
|
142
|
+
if (!enabled) {
|
143
|
+
return;
|
144
|
+
}
|
145
|
+
|
146
|
+
String table = "test1";
|
147
|
+
|
148
|
+
dropTable(table);
|
149
|
+
createTable(table);
|
150
|
+
executeSQL(String.format("INSERT INTO %s VALUES('B001', 0, 'z')", table));
|
151
|
+
executeSQL(String.format("INSERT INTO %s VALUES('B002', 9, 'z')", table));
|
152
|
+
|
153
|
+
test("/mysql/yml/test-truncate-insert-after-load.yml");
|
154
|
+
|
155
|
+
List<List<Object>> rows = select(table);
|
156
|
+
assertEquals(3, rows.size());
|
157
|
+
Iterator<List<Object>> i1 = rows.iterator();
|
158
|
+
{
|
159
|
+
Iterator<Object> i2 = i1.next().iterator();
|
160
|
+
assertEquals("A001", i2.next());
|
161
|
+
assertEquals(9, i2.next());
|
162
|
+
assertEquals("x", i2.next());
|
163
|
+
}
|
164
|
+
{
|
165
|
+
Iterator<Object> i2 = i1.next().iterator();
|
166
|
+
assertEquals("A002", i2.next());
|
167
|
+
assertEquals(0, i2.next());
|
168
|
+
assertEquals("b", i2.next());
|
169
|
+
}
|
170
|
+
{
|
171
|
+
Iterator<Object> i2 = i1.next().iterator();
|
172
|
+
assertEquals("A003", i2.next());
|
173
|
+
assertEquals(9, i2.next());
|
174
|
+
assertEquals("x", i2.next());
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
@Test
|
179
|
+
public void testReplaceAfterLoad() throws Exception
|
180
|
+
{
|
181
|
+
if (!enabled) {
|
182
|
+
return;
|
183
|
+
}
|
184
|
+
|
185
|
+
String table = "test1";
|
186
|
+
|
187
|
+
dropTable(table);
|
188
|
+
createTable(table);
|
189
|
+
executeSQL(String.format("INSERT INTO %s VALUES('B001', 0, 'z')", table));
|
190
|
+
executeSQL(String.format("INSERT INTO %s VALUES('B002', 9, 'z')", table));
|
191
|
+
|
192
|
+
test("/mysql/yml/test-replace-after-load.yml");
|
193
|
+
|
194
|
+
List<List<Object>> rows = select(table);
|
195
|
+
assertEquals(3, rows.size());
|
196
|
+
Iterator<List<Object>> i1 = rows.iterator();
|
197
|
+
{
|
198
|
+
Iterator<Object> i2 = i1.next().iterator();
|
199
|
+
assertEquals("A001", i2.next());
|
200
|
+
assertEquals(9L, i2.next());
|
201
|
+
assertEquals("x", i2.next());
|
202
|
+
}
|
203
|
+
{
|
204
|
+
Iterator<Object> i2 = i1.next().iterator();
|
205
|
+
assertEquals("A002", i2.next());
|
206
|
+
assertEquals(0L, i2.next());
|
207
|
+
assertEquals("b", i2.next());
|
208
|
+
}
|
209
|
+
{
|
210
|
+
Iterator<Object> i2 = i1.next().iterator();
|
211
|
+
assertEquals("A003", i2.next());
|
212
|
+
assertEquals(9L, i2.next());
|
213
|
+
assertEquals("x", i2.next());
|
214
|
+
}
|
215
|
+
}
|
216
|
+
|
217
|
+
@Test
|
218
|
+
public void testMergeDirectAfterLoad() throws Exception
|
219
|
+
{
|
220
|
+
if (!enabled) {
|
221
|
+
return;
|
222
|
+
}
|
223
|
+
|
224
|
+
String table = "test1";
|
225
|
+
|
226
|
+
dropTable(table);
|
227
|
+
createTable(table);
|
228
|
+
executeSQL(String.format("INSERT INTO %s VALUES('A002', 1, 'y')", table));
|
229
|
+
executeSQL(String.format("INSERT INTO %s VALUES('A003', 1, 'y')", table));
|
230
|
+
executeSQL(String.format("INSERT INTO %s VALUES('B001', 0, 'z')", table));
|
231
|
+
executeSQL(String.format("INSERT INTO %s VALUES('B002', 9, 'z')", table));
|
232
|
+
|
233
|
+
test("/mysql/yml/test-merge-direct-after-load.yml");
|
234
|
+
|
235
|
+
List<List<Object>> rows = select(table);
|
236
|
+
assertEquals(5, rows.size());
|
237
|
+
Iterator<List<Object>> i1 = rows.iterator();
|
238
|
+
{
|
239
|
+
Iterator<Object> i2 = i1.next().iterator();
|
240
|
+
assertEquals("A001", i2.next());
|
241
|
+
assertEquals(9, i2.next());
|
242
|
+
assertEquals("x", i2.next());
|
243
|
+
}
|
244
|
+
{
|
245
|
+
Iterator<Object> i2 = i1.next().iterator();
|
246
|
+
assertEquals("A002", i2.next());
|
247
|
+
assertEquals(0, i2.next());
|
248
|
+
assertEquals("b", i2.next());
|
249
|
+
}
|
250
|
+
{
|
251
|
+
Iterator<Object> i2 = i1.next().iterator();
|
252
|
+
assertEquals("A003", i2.next());
|
253
|
+
assertEquals(9, i2.next());
|
254
|
+
assertEquals("x", i2.next());
|
255
|
+
}
|
256
|
+
{
|
257
|
+
Iterator<Object> i2 = i1.next().iterator();
|
258
|
+
assertEquals("B001", i2.next());
|
259
|
+
assertEquals(0, i2.next());
|
260
|
+
assertEquals("z", i2.next());
|
261
|
+
}
|
262
|
+
{
|
263
|
+
Iterator<Object> i2 = i1.next().iterator();
|
264
|
+
assertEquals("B002", i2.next());
|
265
|
+
assertEquals(9, i2.next());
|
266
|
+
assertEquals("x", i2.next());
|
267
|
+
}
|
268
|
+
}
|
269
|
+
|
270
|
+
@Test
|
271
|
+
public void testMergeAfterLoad() throws Exception
|
272
|
+
{
|
273
|
+
if (!enabled) {
|
274
|
+
return;
|
275
|
+
}
|
276
|
+
|
277
|
+
String table = "test1";
|
278
|
+
|
279
|
+
dropTable(table);
|
280
|
+
createTable(table);
|
281
|
+
executeSQL(String.format("INSERT INTO %s VALUES('A002', 1, 'y')", table));
|
282
|
+
executeSQL(String.format("INSERT INTO %s VALUES('A003', 1, 'y')", table));
|
283
|
+
executeSQL(String.format("INSERT INTO %s VALUES('B001', 0, 'z')", table));
|
284
|
+
executeSQL(String.format("INSERT INTO %s VALUES('B002', 9, 'z')", table));
|
285
|
+
|
286
|
+
test("/mysql/yml/test-merge-after-load.yml");
|
287
|
+
|
288
|
+
List<List<Object>> rows = select(table);
|
289
|
+
assertEquals(5, rows.size());
|
290
|
+
Iterator<List<Object>> i1 = rows.iterator();
|
291
|
+
{
|
292
|
+
Iterator<Object> i2 = i1.next().iterator();
|
293
|
+
assertEquals("A001", i2.next());
|
294
|
+
assertEquals(9, i2.next());
|
295
|
+
assertEquals("x", i2.next());
|
296
|
+
}
|
297
|
+
{
|
298
|
+
Iterator<Object> i2 = i1.next().iterator();
|
299
|
+
assertEquals("A002", i2.next());
|
300
|
+
assertEquals(0, i2.next());
|
301
|
+
assertEquals("b", i2.next());
|
302
|
+
}
|
303
|
+
{
|
304
|
+
Iterator<Object> i2 = i1.next().iterator();
|
305
|
+
assertEquals("A003", i2.next());
|
306
|
+
assertEquals(9, i2.next());
|
307
|
+
assertEquals("x", i2.next());
|
308
|
+
}
|
309
|
+
{
|
310
|
+
Iterator<Object> i2 = i1.next().iterator();
|
311
|
+
assertEquals("B001", i2.next());
|
312
|
+
assertEquals(0, i2.next());
|
313
|
+
assertEquals("z", i2.next());
|
314
|
+
}
|
315
|
+
{
|
316
|
+
Iterator<Object> i2 = i1.next().iterator();
|
317
|
+
assertEquals("B002", i2.next());
|
318
|
+
assertEquals(9, i2.next());
|
319
|
+
assertEquals("x", i2.next());
|
320
|
+
}
|
321
|
+
}
|
322
|
+
|
323
|
+
private void createTable(String table) throws SQLException
|
324
|
+
{
|
325
|
+
String sql = String.format("create table %s ("
|
326
|
+
+ "id char(4),"
|
327
|
+
+ "int_item int,"
|
328
|
+
+ "varchar_item varchar(8),"
|
329
|
+
+ "primary key (id))", table);
|
330
|
+
executeSQL(sql);
|
331
|
+
}
|
332
|
+
|
333
|
+
@Override
|
334
|
+
protected Connection connect() throws SQLException
|
335
|
+
{
|
336
|
+
return DriverManager.getConnection(String.format(ENGLISH, "jdbc:mysql://%s:%d/%s", getHost(), getPort(), getDatabase()),
|
337
|
+
getUser(), getPassword());
|
338
|
+
}
|
339
|
+
|
340
|
+
}
|
@@ -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
|
+
after_load: "update test1 set varchar_item = 'x' 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
|
+
after_load: "update test1 set varchar_item = 'x' 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
|
+
after_load: "update test1 set varchar_item = 'x' 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
|
+
after_load: "update test1 set varchar_item = 'x' 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: replace
|
22
|
+
after_load: "update test1 set varchar_item = 'x' 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
|
+
after_load: "update test1 set varchar_item = 'x' where int_item = 9"
|
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.
|
4
|
+
version: 0.7.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: 2016-
|
11
|
+
date: 2016-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Inserts or updates records to a table.
|
14
14
|
email:
|
@@ -19,14 +19,22 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- README.md
|
21
21
|
- build.gradle
|
22
|
-
- classpath/embulk-output-jdbc-0.7.
|
23
|
-
- classpath/embulk-output-mysql-0.7.
|
22
|
+
- classpath/embulk-output-jdbc-0.7.1.jar
|
23
|
+
- classpath/embulk-output-mysql-0.7.1.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
|
27
27
|
- src/main/java/org/embulk/output/mysql/MySQLBatchInsert.java
|
28
28
|
- src/main/java/org/embulk/output/mysql/MySQLOutputConnection.java
|
29
29
|
- src/main/java/org/embulk/output/mysql/MySQLOutputConnector.java
|
30
|
+
- src/test/java/org/embulk/output/mysql/MySQLOutputPluginTest.java
|
31
|
+
- src/test/resources/mysql/data/test1.csv
|
32
|
+
- src/test/resources/mysql/yml/test-insert-after-load.yml
|
33
|
+
- src/test/resources/mysql/yml/test-insert-direct-after-load.yml
|
34
|
+
- src/test/resources/mysql/yml/test-merge-after-load.yml
|
35
|
+
- src/test/resources/mysql/yml/test-merge-direct-after-load.yml
|
36
|
+
- src/test/resources/mysql/yml/test-replace-after-load.yml
|
37
|
+
- src/test/resources/mysql/yml/test-truncate-insert-after-load.yml
|
30
38
|
homepage: https://github.com/embulk/embulk-output-jdbc
|
31
39
|
licenses:
|
32
40
|
- Apache 2.0
|