embulk-output-sqlserver 0.5.0 → 0.5.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.
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