embulk-output-sqlserver 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (23) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -3
  3. data/classpath/{embulk-output-jdbc-0.5.0.jar → embulk-output-jdbc-0.5.1.jar} +0 -0
  4. data/classpath/embulk-output-sqlserver-0.5.1.jar +0 -0
  5. data/src/main/java/org/embulk/output/SQLServerOutputPlugin.java +22 -4
  6. data/src/main/java/org/embulk/output/sqlserver/InsertMethod.java +32 -0
  7. data/src/main/java/org/embulk/output/sqlserver/NativeBatchInsert.java +247 -0
  8. data/src/main/java/org/embulk/output/sqlserver/SmallDateTimeFormat.java +31 -0
  9. data/src/main/java/org/embulk/output/sqlserver/nativeclient/NativeClient.java +33 -0
  10. data/src/main/java/org/embulk/output/sqlserver/nativeclient/NativeClientWrapper.java +442 -0
  11. data/src/main/java/org/embulk/output/sqlserver/nativeclient/ODBC.java +47 -0
  12. data/src/test/java/org/embulk/output/sqlserver/SQLServerOutputPluginTest.java +174 -10
  13. data/src/test/resources/sqlserver/data/test2/test2.csv +2 -0
  14. data/src/test/resources/sqlserver/data/test3/test3.csv +2 -0
  15. data/src/test/resources/sqlserver/data/test4/test4.csv +2 -0
  16. data/src/test/resources/sqlserver/data/test5/test5.csv +2 -0
  17. data/src/test/resources/sqlserver/yml/test-native-date.yml +26 -0
  18. data/src/test/resources/sqlserver/yml/test-native-decimal.yml +25 -0
  19. data/src/test/resources/sqlserver/yml/test-native-integer.yml +24 -0
  20. data/src/test/resources/sqlserver/yml/test-native-string.yml +25 -0
  21. data/src/test/resources/sqlserver/yml/test-native.yml +44 -0
  22. metadata +19 -4
  23. data/classpath/embulk-output-sqlserver-0.5.0.jar +0 -0
@@ -204,6 +204,170 @@ public class SQLServerOutputPluginTest extends AbstractJdbcOutputPluginTest
204
204
  assertTable(1, table, true);
205
205
  }
206
206
 
207
+ @Test
208
+ public void testNativeString() throws Exception
209
+ {
210
+ if (!canTest) {
211
+ return;
212
+ }
213
+
214
+ String table = "TEST2";
215
+
216
+ dropTable(table);
217
+ executeSQL(String.format("CREATE TABLE %S (ITEM1 CHAR(4), ITEM2 VARCHAR(8), ITEM3 TEXT, ITEM4 NCHAR(4), ITEM5 NVARCHAR(8), ITEM6 NTEXT)", table));
218
+
219
+ tester.run(convertYml("/sqlserver/yml/test-native-string.yml"));
220
+
221
+ List<List<Object>> rows = select(table);
222
+ assertEquals(2, rows.size());
223
+ {
224
+ List<Object> row = rows.get(0);
225
+ assertEquals("A001", row.get(0));
226
+ assertEquals("TEST", row.get(1));
227
+ assertEquals("A", row.get(2));
228
+ assertEquals("あいうえ", row.get(3));
229
+ assertEquals("あいうえおかきく", row.get(4));
230
+ assertEquals("あいうえお", row.get(5));
231
+ }
232
+ {
233
+ List<Object> row = rows.get(1);
234
+ assertEquals("A002", row.get(0));
235
+ assertEquals(null, row.get(1));
236
+ assertEquals(null, row.get(2));
237
+ assertEquals(null, row.get(3));
238
+ assertEquals(null, row.get(4));
239
+ assertEquals(null, row.get(5));
240
+ }
241
+ }
242
+
243
+ @Test
244
+ public void testNativeInteger() throws Exception
245
+ {
246
+ if (!canTest) {
247
+ return;
248
+ }
249
+
250
+ String table = "TEST3";
251
+
252
+ dropTable(table);
253
+ executeSQL(String.format("CREATE TABLE %S (ITEM1 TINYINT, ITEM2 SMALLINT, ITEM3 INT, ITEM4 BIGINT, ITEM5 BIT)", table));
254
+
255
+ tester.run(convertYml("/sqlserver/yml/test-native-integer.yml"));
256
+
257
+ List<List<Object>> rows = select(table);
258
+ assertEquals(2, rows.size());
259
+ {
260
+ List<Object> row = rows.get(0);
261
+ assertEquals((short)1, row.get(0));
262
+ assertEquals((short)1111, row.get(1));
263
+ assertEquals(11111111, row.get(2));
264
+ assertEquals(111111111111L, row.get(3));
265
+ assertEquals(true, row.get(4));
266
+ }
267
+ {
268
+ List<Object> row = rows.get(1);
269
+ assertEquals((short)2, row.get(0));
270
+ assertEquals(null, row.get(1));
271
+ assertEquals(null, row.get(2));
272
+ assertEquals(null, row.get(3));
273
+ assertEquals(null, row.get(4));
274
+ }
275
+ }
276
+
277
+ @Test
278
+ public void testNativeDecimal() throws Exception
279
+ {
280
+ if (!canTest) {
281
+ return;
282
+ }
283
+
284
+ String table = "TEST4";
285
+
286
+ dropTable(table);
287
+ executeSQL(String.format("CREATE TABLE %S (ITEM1 DECIMAL(20,2), ITEM2 NUMERIC(20,2), ITEM3 SMALLMONEY, ITEM4 MONEY, ITEM5 REAL, ITEM6 FLOAT)", table));
288
+
289
+ tester.run(convertYml("/sqlserver/yml/test-native-decimal.yml"));
290
+
291
+ List<List<Object>> rows = select(table);
292
+ assertEquals(2, rows.size());
293
+ {
294
+ List<Object> row = rows.get(0);
295
+ assertEquals(new BigDecimal("1.20"), row.get(0));
296
+ assertEquals(new BigDecimal("12345678901234567.89"), row.get(1));
297
+ assertEquals(new BigDecimal("123.4500"), row.get(2));
298
+ assertEquals(new BigDecimal("678.9000"), row.get(3));
299
+ assertEquals(0.01234F, row.get(4));
300
+ assertEquals(0.05678D, row.get(5));
301
+ }
302
+ {
303
+ List<Object> row = rows.get(1);
304
+ assertEquals(new BigDecimal("2.30"), row.get(0));
305
+ assertEquals(null, row.get(1));
306
+ assertEquals(null, row.get(2));
307
+ assertEquals(null, row.get(3));
308
+ assertEquals(null, row.get(4));
309
+ assertEquals(null, row.get(5));
310
+ }
311
+ }
312
+
313
+ @Test
314
+ public void testNativeDate() throws Exception
315
+ {
316
+ if (!canTest) {
317
+ return;
318
+ }
319
+
320
+ String table = "TEST5";
321
+
322
+ dropTable(table);
323
+ executeSQL(String.format("CREATE TABLE %S (ITEM1 DATE, ITEM2 SMALLDATETIME, ITEM3 DATETIME, ITEM4 DATETIME2, ITEM5 DATETIME2(2), ITEM6 TIME, ITEM7 TIME(2))", table));
324
+
325
+ tester.run(convertYml("/sqlserver/yml/test-native-date.yml"));
326
+
327
+ List<List<Object>> rows = select(table);
328
+ assertEquals(2, rows.size());
329
+ {
330
+ List<Object> row = rows.get(0);
331
+ assertEquals(createDate("2016/01/23"), row.get(0));
332
+ assertEquals(createTimestamp("2016/01/24 11:23:00", 0), row.get(1));
333
+ assertEquals(createTimestamp("2016/01/25 11:22:33", 457000000), row.get(2));
334
+ // Embulk timestamp doesn't support values under microseconds.
335
+ assertEquals(createTimestamp("2016/01/26 11:22:33", 123456000), row.get(3));
336
+ assertEquals(createTimestamp("2016/01/27 11:22:33", 890000000), row.get(4));
337
+ // Embulk timestamp doesn't support values under microseconds.
338
+ assertEquals(createTime("11:22:33", 123456000), row.get(5));
339
+ assertEquals(createTime("11:22:33", 890000000), row.get(6));
340
+ }
341
+ {
342
+ List<Object> row = rows.get(1);
343
+ assertEquals(null, row.get(0));
344
+ assertEquals(null, row.get(1));
345
+ assertEquals(null, row.get(2));
346
+ assertEquals(null, row.get(3));
347
+ assertEquals(null, row.get(4));
348
+ assertEquals(null, row.get(5));
349
+ assertEquals(null, row.get(6));
350
+ }
351
+ }
352
+
353
+ @Test
354
+ public void testNative() throws Exception
355
+ {
356
+ if (!canTest) {
357
+ return;
358
+ }
359
+
360
+ String table = "TEST1";
361
+
362
+ dropTable(table);
363
+ createTable(table);
364
+ insertRecord(table);
365
+
366
+ tester.run(convertYml("/sqlserver/yml/test-native.yml"));
367
+
368
+ assertTable(1, table);
369
+ }
370
+
207
371
  private void assertTable(int skip, String table) throws Exception
208
372
  {
209
373
  assertTable(skip, table, false);
@@ -219,11 +383,11 @@ public class SQLServerOutputPluginTest extends AbstractJdbcOutputPluginTest
219
383
  {
220
384
  Iterator<Object> i2 = i1.next().iterator();
221
385
  assertEquals("A001", i2.next());
222
- assertEquals(Short.valueOf((short)0), i2.next());
223
- assertEquals(Short.valueOf((short)1234), i2.next());
224
- assertEquals(Integer.valueOf(123456), i2.next());
225
- assertEquals(Long.valueOf(12345678901L), i2.next());
226
- assertEquals(Boolean.FALSE, i2.next());
386
+ assertEquals((short)0, i2.next());
387
+ assertEquals((short)1234, i2.next());
388
+ assertEquals(123456, i2.next());
389
+ assertEquals(12345678901L, i2.next());
390
+ assertEquals(false, i2.next());
227
391
  assertEquals(new BigDecimal("1.23"), i2.next());
228
392
  assertEquals(new BigDecimal("3.456"), i2.next());
229
393
  assertEquals(new BigDecimal("12.3400"), i2.next());
@@ -249,11 +413,11 @@ public class SQLServerOutputPluginTest extends AbstractJdbcOutputPluginTest
249
413
  {
250
414
  Iterator<Object> i2 = i1.next().iterator();
251
415
  assertEquals("A002", i2.next());
252
- assertEquals(Short.valueOf((short)255), i2.next());
253
- assertEquals(Short.valueOf((short)-32768), i2.next());
254
- assertEquals(Integer.valueOf(-2147483648), i2.next());
255
- assertEquals(Long.valueOf(-9223372036854775808L), i2.next());
256
- assertEquals(Boolean.TRUE, i2.next());
416
+ assertEquals((short)255, i2.next());
417
+ assertEquals((short)-32768, i2.next());
418
+ assertEquals(-2147483648, i2.next());
419
+ assertEquals(-9223372036854775808L, i2.next());
420
+ assertEquals(true, i2.next());
257
421
  assertEquals(new BigDecimal("-9999999999.99"), i2.next());
258
422
  assertEquals(new BigDecimal("-99.999"), i2.next());
259
423
  assertEquals(new BigDecimal("-214748.3648"), i2.next());
@@ -0,0 +1,2 @@
1
+ A001,TEST,A,あいうえ,あいうえおかきく,あいうえお
2
+ A002,,,,,
@@ -0,0 +1,2 @@
1
+ 1,1111,11111111,111111111111,1
2
+ 2,,,,
@@ -0,0 +1,2 @@
1
+ 1.2,12345678901234567.89,123.45,678.9,0.01234,0.05678
2
+ 2.3,,,,,
@@ -0,0 +1,2 @@
1
+ 2016/1/23,2016/1/24 11:22:33,2016/1/25 11:22:33.457,2016/1/26 11:22:33.1234567,2016/1/27 11:22:33.89,11:22:33.1234567,11:22:33.89
2
+ ,,,,,,
@@ -0,0 +1,26 @@
1
+ in:
2
+ type: file
3
+ path_prefix: '/sqlserver/data/test5/test5.csv'
4
+ parser:
5
+ charset: UTF-8
6
+ newline: CRLF
7
+ type: csv
8
+ delimiter: ','
9
+ quote: ''
10
+ columns:
11
+ - {name: ITEM1, type: timestamp, format: '%Y/%m/%d'}
12
+ - {name: ITEM2, type: timestamp, format: '%Y/%m/%d %H:%M:%S'}
13
+ - {name: ITEM3, type: timestamp, format: '%Y/%m/%d %H:%M:%S.%N'}
14
+ - {name: ITEM4, type: timestamp, format: '%Y/%m/%d %H:%M:%S.%N'}
15
+ - {name: ITEM5, type: timestamp, format: '%Y/%m/%d %H:%M:%S.%N'}
16
+ - {name: ITEM6, type: timestamp, format: '%H:%M:%S.%N'}
17
+ - {name: ITEM7, type: timestamp, format: '%H:%M:%S.%N'}
18
+ out:
19
+ type: sqlserver
20
+ host: localhost
21
+ database: TESTDB
22
+ user: TEST_USER
23
+ password: test_pw
24
+ table: TEST5
25
+ mode: insert_direct
26
+ insert_method: native
@@ -0,0 +1,25 @@
1
+ in:
2
+ type: file
3
+ path_prefix: '/sqlserver/data/test4/test4.csv'
4
+ parser:
5
+ charset: UTF-8
6
+ newline: CRLF
7
+ type: csv
8
+ delimiter: ','
9
+ quote: ''
10
+ columns:
11
+ - {name: ITEM1, type: double}
12
+ - {name: ITEM2, type: string}
13
+ - {name: ITEM3, type: string}
14
+ - {name: ITEM4, type: string}
15
+ - {name: ITEM5, type: double}
16
+ - {name: ITEM6, type: double}
17
+ out:
18
+ type: sqlserver
19
+ host: localhost
20
+ database: TESTDB
21
+ user: TEST_USER
22
+ password: test_pw
23
+ table: TEST4
24
+ mode: insert_direct
25
+ insert_method: native
@@ -0,0 +1,24 @@
1
+ in:
2
+ type: file
3
+ path_prefix: '/sqlserver/data/test3/test3.csv'
4
+ parser:
5
+ charset: UTF-8
6
+ newline: CRLF
7
+ type: csv
8
+ delimiter: ','
9
+ quote: ''
10
+ columns:
11
+ - {name: ITEM1, type: long}
12
+ - {name: ITEM2, type: long}
13
+ - {name: ITEM3, type: long}
14
+ - {name: ITEM4, type: long}
15
+ - {name: ITEM5, type: long}
16
+ out:
17
+ type: sqlserver
18
+ host: localhost
19
+ database: TESTDB
20
+ user: TEST_USER
21
+ password: test_pw
22
+ table: TEST3
23
+ mode: insert_direct
24
+ insert_method: native
@@ -0,0 +1,25 @@
1
+ in:
2
+ type: file
3
+ path_prefix: '/sqlserver/data/test2/test2.csv'
4
+ parser:
5
+ charset: UTF-8
6
+ newline: CRLF
7
+ type: csv
8
+ delimiter: ','
9
+ quote: ''
10
+ columns:
11
+ - {name: ITEM1, type: string}
12
+ - {name: ITEM2, type: string}
13
+ - {name: ITEM3, type: string}
14
+ - {name: ITEM4, type: string}
15
+ - {name: ITEM5, type: string}
16
+ - {name: ITEM6, type: string}
17
+ out:
18
+ type: sqlserver
19
+ host: localhost
20
+ database: TESTDB
21
+ user: TEST_USER
22
+ password: test_pw
23
+ table: TEST2
24
+ mode: insert_direct
25
+ insert_method: native
@@ -0,0 +1,44 @@
1
+ in:
2
+ type: file
3
+ path_prefix: '/sqlserver/data/test1/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: TINYINT_ITEM, type: long}
13
+ - {name: SMALLINT_ITEM, type: long}
14
+ - {name: INT_ITEM, type: long}
15
+ - {name: BIGINT_ITEM, type: long}
16
+ - {name: BIT_ITEM, type: boolean}
17
+ - {name: DECIMAL_ITEM, type: string}
18
+ - {name: NUMERIC_ITEM, type: string}
19
+ - {name: SMALLMONEY_ITEM, type: string}
20
+ - {name: MONEY_ITEM, type: string}
21
+ - {name: REAL_ITEM, type: double}
22
+ - {name: FLOAT_ITEM, type: double}
23
+ - {name: CHAR_ITEM, type: string}
24
+ - {name: VARCHAR_ITEM, type: string}
25
+ - {name: TEXT_ITEM, type: string}
26
+ - {name: NCHAR_ITEM, type: string}
27
+ - {name: NVARCHAR_ITEM, type: string}
28
+ - {name: NTEXT_ITEM, type: string}
29
+ - {name: DATE_ITEM, type: timestamp, format: '%Y/%m/%d'}
30
+ - {name: DATETIME_ITEM, type: timestamp, format: '%Y/%m/%d %H:%M:%S.%N'}
31
+ - {name: DATETIME2_ITEM, type: timestamp, format: '%Y/%m/%d %H:%M:%S.%N'}
32
+ - {name: DATETIME2_2_ITEM, type: timestamp, format: '%Y/%m/%d %H:%M:%S.%N'}
33
+ - {name: SMALLDATETIME_ITEM, type: timestamp, format: '%Y/%m/%d %H:%M:%S'}
34
+ - {name: TIME_ITEM, type: timestamp, format: '%H:%M:%S.%N'}
35
+ - {name: TIME_2_ITEM, type: timestamp, format: '%H:%M:%S.%N'}
36
+ out:
37
+ type: sqlserver
38
+ host: localhost
39
+ database: TESTDB
40
+ user: TEST_USER
41
+ password: test_pw
42
+ table: TEST1
43
+ mode: insert_direct
44
+ insert_method: native
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-sqlserver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.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-01-15 00:00:00.000000000 Z
11
+ date: 2016-03-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Inserts or updates records to a table.
14
14
  email:
@@ -21,22 +21,37 @@ files:
21
21
  - build.gradle
22
22
  - lib/embulk/output/sqlserver.rb
23
23
  - src/main/java/org/embulk/output/SQLServerOutputPlugin.java
24
+ - src/main/java/org/embulk/output/sqlserver/InsertMethod.java
25
+ - src/main/java/org/embulk/output/sqlserver/NativeBatchInsert.java
24
26
  - src/main/java/org/embulk/output/sqlserver/SQLServerOutputConnection.java
25
27
  - src/main/java/org/embulk/output/sqlserver/SQLServerOutputConnector.java
28
+ - src/main/java/org/embulk/output/sqlserver/SmallDateTimeFormat.java
29
+ - src/main/java/org/embulk/output/sqlserver/nativeclient/NativeClient.java
30
+ - src/main/java/org/embulk/output/sqlserver/nativeclient/NativeClientWrapper.java
31
+ - src/main/java/org/embulk/output/sqlserver/nativeclient/ODBC.java
26
32
  - src/main/java/org/embulk/output/sqlserver/setter/SQLServerByteColumnSetter.java
27
33
  - src/main/java/org/embulk/output/sqlserver/setter/SQLServerColumnSetterFactory.java
28
34
  - src/main/java/org/embulk/output/sqlserver/setter/SQLServerSqlTimeColumnSetter.java
29
35
  - src/test/java/org/embulk/output/sqlserver/PreciseTime.java
30
36
  - src/test/java/org/embulk/output/sqlserver/SQLServerOutputPluginTest.java
31
37
  - src/test/resources/sqlserver/data/test1/test1.csv
38
+ - src/test/resources/sqlserver/data/test2/test2.csv
39
+ - src/test/resources/sqlserver/data/test3/test3.csv
40
+ - src/test/resources/sqlserver/data/test4/test4.csv
41
+ - src/test/resources/sqlserver/data/test5/test5.csv
32
42
  - src/test/resources/sqlserver/yml/test-insert-direct.yml
33
43
  - src/test/resources/sqlserver/yml/test-insert.yml
44
+ - src/test/resources/sqlserver/yml/test-native-date.yml
45
+ - src/test/resources/sqlserver/yml/test-native-decimal.yml
46
+ - src/test/resources/sqlserver/yml/test-native-integer.yml
47
+ - src/test/resources/sqlserver/yml/test-native-string.yml
48
+ - src/test/resources/sqlserver/yml/test-native.yml
34
49
  - src/test/resources/sqlserver/yml/test-replace-long-name.yml
35
50
  - src/test/resources/sqlserver/yml/test-replace.yml
36
51
  - src/test/resources/sqlserver/yml/test-string-timestamp.yml
37
52
  - src/test/resources/sqlserver/yml/test-truncate-insert.yml
38
- - classpath/embulk-output-jdbc-0.5.0.jar
39
- - classpath/embulk-output-sqlserver-0.5.0.jar
53
+ - classpath/embulk-output-jdbc-0.5.1.jar
54
+ - classpath/embulk-output-sqlserver-0.5.1.jar
40
55
  homepage: https://github.com/embulk/embulk-output-jdbc
41
56
  licenses:
42
57
  - Apache 2.0