embulk-output-db2 0.7.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.
- checksums.yaml +7 -0
- data/README.md +118 -0
- data/build.gradle +9 -0
- data/classpath/embulk-output-db2-0.7.0.jar +0 -0
- data/classpath/embulk-output-jdbc-0.7.0.jar +0 -0
- data/lib/embulk/output/db2.rb +3 -0
- data/out/test/db2/data/test-char.csv +3 -0
- data/out/test/db2/data/test-datetime.csv +3 -0
- data/out/test/db2/data/test-number.csv +3 -0
- data/out/test/db2/yml/test-insert-direct-char.yml +27 -0
- data/out/test/db2/yml/test-insert-direct-datetime.yml +24 -0
- data/out/test/db2/yml/test-insert-direct-number.yml +27 -0
- data/src/main/java/org/embulk/output/DB2OutputPlugin.java +89 -0
- data/src/main/java/org/embulk/output/db2/DB2BatchInsert.java +33 -0
- data/src/main/java/org/embulk/output/db2/DB2OutputConnection.java +140 -0
- data/src/main/java/org/embulk/output/db2/DB2OutputConnector.java +49 -0
- data/src/test/java/org/embulk/output/db2/DB2OutputPluginTest.java +499 -0
- data/src/test/resources/db2/data/test-char.csv +3 -0
- data/src/test/resources/db2/data/test-datetime.csv +3 -0
- data/src/test/resources/db2/data/test-number.csv +3 -0
- data/src/test/resources/db2/yml/test-insert-char.yml +27 -0
- data/src/test/resources/db2/yml/test-insert-datetime.yml +24 -0
- data/src/test/resources/db2/yml/test-insert-direct-char.yml +27 -0
- data/src/test/resources/db2/yml/test-insert-direct-datetime.yml +24 -0
- data/src/test/resources/db2/yml/test-insert-direct-number.yml +27 -0
- data/src/test/resources/db2/yml/test-insert-number.yml +27 -0
- data/src/test/resources/db2/yml/test-replace-long-name.yml +27 -0
- data/src/test/resources/db2/yml/test-replace.yml +27 -0
- data/src/test/resources/db2/yml/test-truncate-insert.yml +27 -0
- metadata +72 -0
@@ -0,0 +1,499 @@
|
|
1
|
+
package org.embulk.output.db2;
|
2
|
+
|
3
|
+
import static java.util.Locale.ENGLISH;
|
4
|
+
import static org.junit.Assert.assertEquals;
|
5
|
+
|
6
|
+
import java.math.BigDecimal;
|
7
|
+
import java.sql.Clob;
|
8
|
+
import java.sql.Connection;
|
9
|
+
import java.sql.DriverManager;
|
10
|
+
import java.sql.ResultSet;
|
11
|
+
import java.sql.SQLException;
|
12
|
+
import java.sql.Time;
|
13
|
+
import java.sql.Timestamp;
|
14
|
+
import java.text.DateFormat;
|
15
|
+
import java.text.ParseException;
|
16
|
+
import java.text.SimpleDateFormat;
|
17
|
+
import java.util.Date;
|
18
|
+
import java.util.List;
|
19
|
+
|
20
|
+
import org.embulk.output.AbstractJdbcOutputPluginTest;
|
21
|
+
import org.embulk.output.DB2OutputPlugin;
|
22
|
+
import org.embulk.spi.OutputPlugin;
|
23
|
+
import org.junit.Test;
|
24
|
+
|
25
|
+
|
26
|
+
public class DB2OutputPluginTest extends AbstractJdbcOutputPluginTest
|
27
|
+
{
|
28
|
+
@Override
|
29
|
+
protected void prepare() throws SQLException {
|
30
|
+
tester.addPlugin(OutputPlugin.class, "db2", DB2OutputPlugin.class);
|
31
|
+
|
32
|
+
try {
|
33
|
+
Class.forName("com.ibm.db2.jcc.DB2Driver");
|
34
|
+
} catch (ClassNotFoundException e) {
|
35
|
+
System.err.println("Warning: you should put 'db2jcc4.jar' in 'embulk-input-db2/driver' directory in order to test.");
|
36
|
+
return;
|
37
|
+
}
|
38
|
+
|
39
|
+
try {
|
40
|
+
connect();
|
41
|
+
} catch (SQLException e) {
|
42
|
+
System.err.println(e);
|
43
|
+
System.err.println(String.format(ENGLISH, "Warning: prepare a schema on DB2 (server = %s, port = %d, database = %s, user = %s, password = %s).",
|
44
|
+
getHost(), getPort(), getDatabase(), getUser(), getPassword()));
|
45
|
+
return;
|
46
|
+
}
|
47
|
+
|
48
|
+
enabled = true;
|
49
|
+
}
|
50
|
+
|
51
|
+
@Test
|
52
|
+
public void testInsertDirectNumber() throws Exception
|
53
|
+
{
|
54
|
+
String table = "TEST_NUMBER";
|
55
|
+
|
56
|
+
dropTable(table);
|
57
|
+
createNumberTable(table);
|
58
|
+
|
59
|
+
test("/db2/yml/test-insert-direct-number.yml");
|
60
|
+
|
61
|
+
assertNumberTable(table);
|
62
|
+
}
|
63
|
+
|
64
|
+
@Test
|
65
|
+
public void testInsertDirectChar() throws Exception
|
66
|
+
{
|
67
|
+
String table = "TEST_CHAR";
|
68
|
+
|
69
|
+
dropTable(table);
|
70
|
+
createCharTable(table);
|
71
|
+
|
72
|
+
test("/db2/yml/test-insert-direct-char.yml");
|
73
|
+
|
74
|
+
assertCharTable(table, false);
|
75
|
+
}
|
76
|
+
|
77
|
+
@Test
|
78
|
+
public void testInsertDirectDateTime() throws Exception
|
79
|
+
{
|
80
|
+
String table = "TEST_DATETIME";
|
81
|
+
|
82
|
+
dropTable(table);
|
83
|
+
createDateTimeTable(table);
|
84
|
+
|
85
|
+
test("/db2/yml/test-insert-direct-datetime.yml");
|
86
|
+
|
87
|
+
assertDateTimeTable(table);
|
88
|
+
}
|
89
|
+
|
90
|
+
@Test
|
91
|
+
public void testInsertNumber() throws Exception
|
92
|
+
{
|
93
|
+
String table = "TEST_NUMBER";
|
94
|
+
|
95
|
+
dropTable(table);
|
96
|
+
createNumberTable(table);
|
97
|
+
|
98
|
+
test("/db2/yml/test-insert-number.yml");
|
99
|
+
|
100
|
+
assertNumberTable(table);
|
101
|
+
}
|
102
|
+
|
103
|
+
@Test
|
104
|
+
public void testInsertChar() throws Exception
|
105
|
+
{
|
106
|
+
String table = "TEST_CHAR";
|
107
|
+
|
108
|
+
dropTable(table);
|
109
|
+
createCharTable(table);
|
110
|
+
|
111
|
+
test("/db2/yml/test-insert-char.yml");
|
112
|
+
|
113
|
+
assertCharTable(table, false);
|
114
|
+
}
|
115
|
+
|
116
|
+
@Test
|
117
|
+
public void testInsertDateTime() throws Exception
|
118
|
+
{
|
119
|
+
String table = "TEST_DATETIME";
|
120
|
+
|
121
|
+
dropTable(table);
|
122
|
+
createDateTimeTable(table);
|
123
|
+
|
124
|
+
test("/db2/yml/test-insert-datetime.yml");
|
125
|
+
|
126
|
+
assertDateTimeTable(table);
|
127
|
+
}
|
128
|
+
|
129
|
+
@Test
|
130
|
+
public void testInsertCreateNumber() throws Exception
|
131
|
+
{
|
132
|
+
String table = "TEST_NUMBER";
|
133
|
+
|
134
|
+
dropTable(table);
|
135
|
+
|
136
|
+
test("/db2/yml/test-insert-number.yml");
|
137
|
+
|
138
|
+
List<List<Object>> rows = select(table);
|
139
|
+
assertEquals(3, rows.size());
|
140
|
+
{
|
141
|
+
List<Object> row = rows.get(0);
|
142
|
+
assertEquals("A001", row.get(0));
|
143
|
+
assertEquals(12345L, row.get(1));
|
144
|
+
assertEquals(123456789L, row.get(2));
|
145
|
+
assertEquals(123456789012L, row.get(3));
|
146
|
+
assertEquals("123456.78", row.get(4));
|
147
|
+
assertEquals("876543.21", row.get(5));
|
148
|
+
assertEquals(1.23456D, row.get(6));
|
149
|
+
assertEquals(1.23456789012D, row.get(7));
|
150
|
+
assertEquals(3.45678901234D, row.get(8));
|
151
|
+
}
|
152
|
+
{
|
153
|
+
List<Object> row = rows.get(1);
|
154
|
+
assertEquals("A002", row.get(0));
|
155
|
+
assertEquals(-9999L, row.get(1));
|
156
|
+
assertEquals(-999999999L, row.get(2));
|
157
|
+
assertEquals(-999999999999L, row.get(3));
|
158
|
+
assertEquals("-999999.99", row.get(4));
|
159
|
+
assertEquals("-999999.99", row.get(5));
|
160
|
+
assertEquals(-9.999999D, row.get(6));
|
161
|
+
assertEquals(-9.999999D, row.get(7));
|
162
|
+
assertEquals(-9.99999999999999D, row.get(8));
|
163
|
+
}
|
164
|
+
{
|
165
|
+
List<Object> row = rows.get(2);
|
166
|
+
assertEquals("A003", row.get(0));
|
167
|
+
assertEquals(null, row.get(1));
|
168
|
+
assertEquals(null, row.get(2));
|
169
|
+
assertEquals(null, row.get(3));
|
170
|
+
assertEquals(null, row.get(4));
|
171
|
+
assertEquals(null, row.get(5));
|
172
|
+
assertEquals(null, row.get(6));
|
173
|
+
assertEquals(null, row.get(7));
|
174
|
+
assertEquals(null, row.get(8));
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
@Test
|
179
|
+
public void testInsertCreateChar() throws Exception
|
180
|
+
{
|
181
|
+
String table = "TEST_CHAR";
|
182
|
+
|
183
|
+
dropTable(table);
|
184
|
+
|
185
|
+
test("/db2/yml/test-insert-char.yml");
|
186
|
+
|
187
|
+
assertCharTable(table, true, 0);
|
188
|
+
}
|
189
|
+
|
190
|
+
@Test
|
191
|
+
public void testInsertCreateDateTime() throws Exception
|
192
|
+
{
|
193
|
+
String table = "TEST_DATETIME";
|
194
|
+
|
195
|
+
dropTable(table);
|
196
|
+
|
197
|
+
test("/db2/yml/test-insert-datetime.yml");
|
198
|
+
|
199
|
+
assertDateTimeTable(table, 0);
|
200
|
+
}
|
201
|
+
|
202
|
+
@Test
|
203
|
+
public void testTruncateInsert() throws Exception
|
204
|
+
{
|
205
|
+
String table = "TEST_NUMBER";
|
206
|
+
|
207
|
+
dropTable(table);
|
208
|
+
createNumberTable(table);
|
209
|
+
|
210
|
+
test("/db2/yml/test-truncate-insert.yml");
|
211
|
+
|
212
|
+
assertNumberTable(table, 0);
|
213
|
+
}
|
214
|
+
|
215
|
+
@Test
|
216
|
+
public void testReplace() throws Exception
|
217
|
+
{
|
218
|
+
String table = "TEST_CHAR";
|
219
|
+
|
220
|
+
dropTable(table);
|
221
|
+
createCharTable(table);
|
222
|
+
|
223
|
+
test("/db2/yml/test-replace.yml");
|
224
|
+
|
225
|
+
assertCharTable(table, true, 0);
|
226
|
+
}
|
227
|
+
|
228
|
+
@Test
|
229
|
+
public void testReplaceCreate() throws Exception
|
230
|
+
{
|
231
|
+
String table = "TEST_CHAR";
|
232
|
+
|
233
|
+
dropTable(table);
|
234
|
+
|
235
|
+
test("/db2/yml/test-replace.yml");
|
236
|
+
|
237
|
+
assertCharTable(table, true, 0);
|
238
|
+
}
|
239
|
+
|
240
|
+
@Test
|
241
|
+
public void testReplaceLongName() throws Exception
|
242
|
+
{
|
243
|
+
// 128 characters
|
244
|
+
String table = "TEST_CHAR_1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678";
|
245
|
+
|
246
|
+
dropTable(table);
|
247
|
+
createCharTable(table);
|
248
|
+
|
249
|
+
test("/db2/yml/test-replace-long-name.yml");
|
250
|
+
|
251
|
+
assertCharTable(table, true, 0);
|
252
|
+
}
|
253
|
+
|
254
|
+
|
255
|
+
@Override
|
256
|
+
protected Object getValue(ResultSet resultSet, int index) throws SQLException {
|
257
|
+
Object value = super.getValue(resultSet, index);
|
258
|
+
if (value instanceof Clob) {
|
259
|
+
return resultSet.getString(index);
|
260
|
+
}
|
261
|
+
return value;
|
262
|
+
}
|
263
|
+
|
264
|
+
private java.sql.Date createDate(String s) throws ParseException
|
265
|
+
{
|
266
|
+
DateFormat format = new SimpleDateFormat("yyyy/MM/dd");
|
267
|
+
Date date = format.parse(s);
|
268
|
+
return new java.sql.Date(date.getTime());
|
269
|
+
}
|
270
|
+
|
271
|
+
private Timestamp createTimestamp(String s, int nanos) throws ParseException
|
272
|
+
{
|
273
|
+
DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
274
|
+
Date date = format.parse(s);
|
275
|
+
Timestamp timestamp = new Timestamp(date.getTime());
|
276
|
+
timestamp.setNanos(nanos);
|
277
|
+
return timestamp;
|
278
|
+
}
|
279
|
+
|
280
|
+
private Time createTime(String s) throws ParseException
|
281
|
+
{
|
282
|
+
DateFormat format = new SimpleDateFormat("HH:mm:ss");
|
283
|
+
Date date = format.parse(s);
|
284
|
+
return new Time(date.getTime());
|
285
|
+
}
|
286
|
+
|
287
|
+
private void createNumberTable(String table) throws SQLException
|
288
|
+
{
|
289
|
+
String sql = String.format("CREATE TABLE %s ("
|
290
|
+
+ "ID CHAR(4) NOT NULL,"
|
291
|
+
+ "SMALLINT_ITEM SMALLINT,"
|
292
|
+
+ "INTEGER_ITEM INTEGER,"
|
293
|
+
+ "BIGINT_ITEM BIGINT,"
|
294
|
+
+ "DECIMAL_ITEM DECIMAL(8,2),"
|
295
|
+
+ "NUMERIC_ITEM NUMERIC(8,2),"
|
296
|
+
+ "REAL_ITEM REAL,"
|
297
|
+
+ "DOUBLE_ITEM DOUBLE,"
|
298
|
+
+ "FLOAT_ITEM FLOAT,"
|
299
|
+
+ "PRIMARY KEY (ID))", table);
|
300
|
+
executeSQL(sql);
|
301
|
+
|
302
|
+
executeSQL(String.format("INSERT INTO %s VALUES('9999',"
|
303
|
+
+ "NULL,"
|
304
|
+
+ "NULL,"
|
305
|
+
+ "NULL,"
|
306
|
+
+ "NULL,"
|
307
|
+
+ "NULL,"
|
308
|
+
+ "NULL,"
|
309
|
+
+ "NULL,"
|
310
|
+
+ "NULL)", table));
|
311
|
+
}
|
312
|
+
|
313
|
+
private void createCharTable(String table) throws SQLException
|
314
|
+
{
|
315
|
+
String sql = String.format("CREATE TABLE %s ("
|
316
|
+
+ "ID CHAR(4) NOT NULL,"
|
317
|
+
+ "CHAR_ITEM CHAR(4),"
|
318
|
+
+ "VARCHAR_ITEM VARCHAR(8),"
|
319
|
+
+ "CLOB_ITEM CLOB,"
|
320
|
+
+ "GRAPHIC_ITEM GRAPHIC(4),"
|
321
|
+
+ "VARGRAPHIC_ITEM VARGRAPHIC(8),"
|
322
|
+
+ "NCHAR_ITEM NCHAR(4),"
|
323
|
+
+ "NVARCHAR_ITEM NVARCHAR(8),"
|
324
|
+
+ "NCLOB_ITEM NCLOB,"
|
325
|
+
+ "PRIMARY KEY (ID))", table);
|
326
|
+
executeSQL(sql);
|
327
|
+
|
328
|
+
executeSQL(String.format("INSERT INTO %s VALUES('9999',"
|
329
|
+
+ "NULL,"
|
330
|
+
+ "NULL,"
|
331
|
+
+ "NULL,"
|
332
|
+
+ "NULL,"
|
333
|
+
+ "NULL,"
|
334
|
+
+ "NULL,"
|
335
|
+
+ "NULL,"
|
336
|
+
+ "NULL)", table));
|
337
|
+
}
|
338
|
+
|
339
|
+
private void createDateTimeTable(String table) throws SQLException
|
340
|
+
{
|
341
|
+
String sql = String.format("CREATE TABLE %s ("
|
342
|
+
+ "ID CHAR(4) NOT NULL,"
|
343
|
+
+ "DATE_ITEM DATE,"
|
344
|
+
+ "TIME_ITEM TIME,"
|
345
|
+
+ "TIMESTAMP_ITEM TIMESTAMP,"
|
346
|
+
+ "TIMESTAMP0_ITEM TIMESTAMP(0),"
|
347
|
+
+ "TIMESTAMP12_ITEM TIMESTAMP(12),"
|
348
|
+
+ "PRIMARY KEY (ID))", table);
|
349
|
+
executeSQL(sql);
|
350
|
+
|
351
|
+
executeSQL(String.format("INSERT INTO %s VALUES('9999',"
|
352
|
+
+ "NULL,"
|
353
|
+
+ "NULL,"
|
354
|
+
+ "NULL,"
|
355
|
+
+ "NULL,"
|
356
|
+
+ "NULL)", table));
|
357
|
+
}
|
358
|
+
|
359
|
+
private void assertNumberTable(String table) throws SQLException
|
360
|
+
{
|
361
|
+
assertNumberTable(table, 1);
|
362
|
+
}
|
363
|
+
|
364
|
+
private void assertNumberTable(String table, int skip) throws SQLException
|
365
|
+
{
|
366
|
+
List<List<Object>> rows = select(table);
|
367
|
+
assertEquals(skip + 3, rows.size());
|
368
|
+
{
|
369
|
+
List<Object> row = rows.get(skip + 0);
|
370
|
+
assertEquals("A001", row.get(0));
|
371
|
+
assertEquals(12345, row.get(1));
|
372
|
+
assertEquals(123456789, row.get(2));
|
373
|
+
assertEquals(123456789012L, row.get(3));
|
374
|
+
assertEquals(new BigDecimal("123456.78"), row.get(4));
|
375
|
+
assertEquals(new BigDecimal("876543.21"), row.get(5));
|
376
|
+
assertEquals(1.23456F, row.get(6));
|
377
|
+
assertEquals(1.23456789012D, row.get(7));
|
378
|
+
assertEquals(3.45678901234D, row.get(8));
|
379
|
+
}
|
380
|
+
{
|
381
|
+
List<Object> row = rows.get(skip + 1);
|
382
|
+
assertEquals("A002", row.get(0));
|
383
|
+
assertEquals(-9999, row.get(1));
|
384
|
+
assertEquals(-999999999, row.get(2));
|
385
|
+
assertEquals(-999999999999L, row.get(3));
|
386
|
+
assertEquals(new BigDecimal("-999999.99"), row.get(4));
|
387
|
+
assertEquals(new BigDecimal("-999999.99"), row.get(5));
|
388
|
+
assertEquals(-9.999999F, row.get(6));
|
389
|
+
assertEquals(-9.999999D, row.get(7));
|
390
|
+
assertEquals(-9.99999999999999D, row.get(8));
|
391
|
+
}
|
392
|
+
{
|
393
|
+
List<Object> row = rows.get(skip + 2);
|
394
|
+
assertEquals("A003", row.get(0));
|
395
|
+
assertEquals(null, row.get(1));
|
396
|
+
assertEquals(null, row.get(2));
|
397
|
+
assertEquals(null, row.get(3));
|
398
|
+
assertEquals(null, row.get(4));
|
399
|
+
assertEquals(null, row.get(5));
|
400
|
+
assertEquals(null, row.get(6));
|
401
|
+
assertEquals(null, row.get(7));
|
402
|
+
assertEquals(null, row.get(8));
|
403
|
+
}
|
404
|
+
}
|
405
|
+
|
406
|
+
private void assertCharTable(String table, boolean trimming) throws SQLException
|
407
|
+
{
|
408
|
+
assertCharTable(table, trimming, 1);
|
409
|
+
}
|
410
|
+
|
411
|
+
private void assertCharTable(String table, boolean trimming, int skip) throws SQLException
|
412
|
+
{
|
413
|
+
List<List<Object>> rows = select(table);
|
414
|
+
assertEquals(skip + 3, rows.size());
|
415
|
+
{
|
416
|
+
List<Object> row = rows.get(skip + 0);
|
417
|
+
assertEquals("A001", row.get(0));
|
418
|
+
assertEquals(trimming ? "aa" : "aa ", row.get(1));
|
419
|
+
assertEquals("AA", row.get(2));
|
420
|
+
assertEquals("aaaaaaaaaaaa", row.get(3));
|
421
|
+
assertEquals(trimming? "ああ" : "ああ ", row.get(4));
|
422
|
+
assertEquals("いいいい", row.get(5));
|
423
|
+
assertEquals(trimming? "aa" : "aa ", row.get(6));
|
424
|
+
assertEquals("AA", row.get(7));
|
425
|
+
assertEquals("aaaaaaaa", row.get(8));
|
426
|
+
}
|
427
|
+
{
|
428
|
+
List<Object> row = rows.get(skip + 1);
|
429
|
+
assertEquals("A002", row.get(0));
|
430
|
+
assertEquals("XXXX", row.get(1));
|
431
|
+
assertEquals("XXXXXXXX", row.get(2));
|
432
|
+
assertEquals("XXXXXXXXXXXXXXXX", row.get(3));
|
433
|
+
assertEquals("XXXX", row.get(4));
|
434
|
+
assertEquals("XXXXXXXX", row.get(5));
|
435
|
+
assertEquals("XXXX", row.get(6));
|
436
|
+
assertEquals("XXXXXXXX", row.get(7));
|
437
|
+
assertEquals("XXXXXXXXXXXXXXXX", row.get(8));
|
438
|
+
}
|
439
|
+
{
|
440
|
+
List<Object> row = rows.get(skip + 2);
|
441
|
+
assertEquals("A003", row.get(0));
|
442
|
+
assertEquals(null, row.get(1));
|
443
|
+
assertEquals(null, row.get(2));
|
444
|
+
assertEquals(null, row.get(3));
|
445
|
+
assertEquals(null, row.get(4));
|
446
|
+
assertEquals(null, row.get(5));
|
447
|
+
assertEquals(null, row.get(6));
|
448
|
+
assertEquals(null, row.get(7));
|
449
|
+
assertEquals(null, row.get(8));
|
450
|
+
}
|
451
|
+
}
|
452
|
+
|
453
|
+
private void assertDateTimeTable(String table) throws SQLException, ParseException
|
454
|
+
{
|
455
|
+
assertDateTimeTable(table, 1);
|
456
|
+
}
|
457
|
+
|
458
|
+
private void assertDateTimeTable(String table, int skip) throws SQLException, ParseException
|
459
|
+
{
|
460
|
+
List<List<Object>> rows = select(table);
|
461
|
+
assertEquals(skip + 3, rows.size());
|
462
|
+
{
|
463
|
+
List<Object> row = rows.get(skip + 0);
|
464
|
+
assertEquals("A001", row.get(0));
|
465
|
+
assertEquals(createDate("2016/09/08"), row.get(1));
|
466
|
+
assertEquals(createTime("12:34:45"), row.get(2));
|
467
|
+
assertEquals(createTimestamp("2016/09/09 12:34:45", 123456000), row.get(3));
|
468
|
+
assertEquals(createTimestamp("2016/09/10 12:34:45", 0), row.get(4));
|
469
|
+
// Embulk TimestampParser cannot parse values under microseconds.
|
470
|
+
assertEquals(createTimestamp("2016/09/11 12:34:45", 123456000), row.get(5));
|
471
|
+
}
|
472
|
+
{
|
473
|
+
List<Object> row = rows.get(skip + 1);
|
474
|
+
assertEquals("A002", row.get(0));
|
475
|
+
assertEquals(createDate("2016/12/31"), row.get(1));
|
476
|
+
assertEquals(createTime("23:59:59"), row.get(2));
|
477
|
+
assertEquals(createTimestamp("2016/12/31 23:59:59", 999999000), row.get(3));
|
478
|
+
assertEquals(createTimestamp("2016/12/31 23:59:59", 0), row.get(4));
|
479
|
+
assertEquals(createTimestamp("2016/12/31 23:59:59", 999999000), row.get(5));
|
480
|
+
}
|
481
|
+
{
|
482
|
+
List<Object> row = rows.get(skip + 2);
|
483
|
+
assertEquals("A003", row.get(0));
|
484
|
+
assertEquals(null, row.get(1));
|
485
|
+
assertEquals(null, row.get(2));
|
486
|
+
assertEquals(null, row.get(3));
|
487
|
+
assertEquals(null, row.get(4));
|
488
|
+
assertEquals(null, row.get(5));
|
489
|
+
}
|
490
|
+
}
|
491
|
+
|
492
|
+
@Override
|
493
|
+
protected Connection connect() throws SQLException
|
494
|
+
{
|
495
|
+
return DriverManager.getConnection(String.format(ENGLISH, "jdbc:db2://%s:%d/%s", getHost(), getPort(), getDatabase()),
|
496
|
+
getUser(), getPassword());
|
497
|
+
}
|
498
|
+
|
499
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
in:
|
2
|
+
type: file
|
3
|
+
path_prefix: '/db2/data/test-char.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: CHAR_ITEM, type: string}
|
13
|
+
- {name: VARCHAR_ITEM, type: string}
|
14
|
+
- {name: CLOB_ITEM, type: string}
|
15
|
+
- {name: GRAPHIC_ITEM, type: string}
|
16
|
+
- {name: VARGRAPHIC_ITEM, type: string}
|
17
|
+
- {name: NCHAR_ITEM, type: string}
|
18
|
+
- {name: NVARCHAR_ITEM, type: string}
|
19
|
+
- {name: NCLOB_ITEM, type: string}
|
20
|
+
out:
|
21
|
+
type: db2
|
22
|
+
host: #host#
|
23
|
+
database: #database#
|
24
|
+
user: #user#
|
25
|
+
password: #password#
|
26
|
+
table: TEST_CHAR
|
27
|
+
mode: insert
|
@@ -0,0 +1,24 @@
|
|
1
|
+
in:
|
2
|
+
type: file
|
3
|
+
path_prefix: '/db2/data/test-datetime.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: DATE_ITEM, type: timestamp, format: '%Y/%m/%d'}
|
13
|
+
- {name: TIME_ITEM, type: timestamp, format: '%H:%M:%S'}
|
14
|
+
- {name: TIMESTAMP_ITEM, type: timestamp, format: '%Y/%m/%d %H:%M:%S.%N'}
|
15
|
+
- {name: TIMESTAMP0_ITEM, type: timestamp, format: '%Y/%m/%d %H:%M:%S'}
|
16
|
+
- {name: TIMESTAMP12_ITEM, type: timestamp, format: '%Y/%m/%d %H:%M:%S.%N'}
|
17
|
+
out:
|
18
|
+
type: db2
|
19
|
+
host: #host#
|
20
|
+
database: #database#
|
21
|
+
user: #user#
|
22
|
+
password: #password#
|
23
|
+
table: TEST_DATETIME
|
24
|
+
mode: insert
|
@@ -0,0 +1,27 @@
|
|
1
|
+
in:
|
2
|
+
type: file
|
3
|
+
path_prefix: '/db2/data/test-char.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: CHAR_ITEM, type: string}
|
13
|
+
- {name: VARCHAR_ITEM, type: string}
|
14
|
+
- {name: CLOB_ITEM, type: string}
|
15
|
+
- {name: GRAPHIC_ITEM, type: string}
|
16
|
+
- {name: VARGRAPHIC_ITEM, type: string}
|
17
|
+
- {name: NCHAR_ITEM, type: string}
|
18
|
+
- {name: NVARCHAR_ITEM, type: string}
|
19
|
+
- {name: NCLOB_ITEM, type: string}
|
20
|
+
out:
|
21
|
+
type: db2
|
22
|
+
host: #host#
|
23
|
+
database: #database#
|
24
|
+
user: #user#
|
25
|
+
password: #password#
|
26
|
+
table: TEST_CHAR
|
27
|
+
mode: insert_direct
|
@@ -0,0 +1,24 @@
|
|
1
|
+
in:
|
2
|
+
type: file
|
3
|
+
path_prefix: '/db2/data/test-datetime.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: DATE_ITEM, type: timestamp, format: '%Y/%m/%d'}
|
13
|
+
- {name: TIME_ITEM, type: timestamp, format: '%H:%M:%S'}
|
14
|
+
- {name: TIMESTAMP_ITEM, type: timestamp, format: '%Y/%m/%d %H:%M:%S.%N'}
|
15
|
+
- {name: TIMESTAMP0_ITEM, type: timestamp, format: '%Y/%m/%d %H:%M:%S'}
|
16
|
+
- {name: TIMESTAMP12_ITEM, type: timestamp, format: '%Y/%m/%d %H:%M:%S.%N'}
|
17
|
+
out:
|
18
|
+
type: db2
|
19
|
+
host: #host#
|
20
|
+
database: #database#
|
21
|
+
user: #user#
|
22
|
+
password: #password#
|
23
|
+
table: TEST_DATETIME
|
24
|
+
mode: insert_direct
|
@@ -0,0 +1,27 @@
|
|
1
|
+
in:
|
2
|
+
type: file
|
3
|
+
path_prefix: '/db2/data/test-number.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: SMALLINT_ITEM, type: long}
|
13
|
+
- {name: INTEGER_ITEM, type: long}
|
14
|
+
- {name: BIGINT_ITEM, type: long}
|
15
|
+
- {name: DECIMAL_ITEM, type: string}
|
16
|
+
- {name: NUMERIC_ITEM, type: string}
|
17
|
+
- {name: REAL_ITEM, type: double}
|
18
|
+
- {name: DOUBLE_ITEM, type: double}
|
19
|
+
- {name: FLOAT_ITEM, type: double}
|
20
|
+
out:
|
21
|
+
type: db2
|
22
|
+
host: #host#
|
23
|
+
database: #database#
|
24
|
+
user: #user#
|
25
|
+
password: #password#
|
26
|
+
table: TEST_NUMBER
|
27
|
+
mode: insert_direct
|
@@ -0,0 +1,27 @@
|
|
1
|
+
in:
|
2
|
+
type: file
|
3
|
+
path_prefix: '/db2/data/test-number.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: SMALLINT_ITEM, type: long}
|
13
|
+
- {name: INTEGER_ITEM, type: long}
|
14
|
+
- {name: BIGINT_ITEM, type: long}
|
15
|
+
- {name: DECIMAL_ITEM, type: string}
|
16
|
+
- {name: NUMERIC_ITEM, type: string}
|
17
|
+
- {name: REAL_ITEM, type: double}
|
18
|
+
- {name: DOUBLE_ITEM, type: double}
|
19
|
+
- {name: FLOAT_ITEM, type: double}
|
20
|
+
out:
|
21
|
+
type: db2
|
22
|
+
host: #host#
|
23
|
+
database: #database#
|
24
|
+
user: #user#
|
25
|
+
password: #password#
|
26
|
+
table: TEST_NUMBER
|
27
|
+
mode: insert
|