embulk-output-sqlserver 0.7.11 → 0.7.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -1
- data/classpath/embulk-output-jdbc-0.7.12.jar +0 -0
- data/classpath/embulk-output-sqlserver-0.7.12.jar +0 -0
- data/src/main/java/org/embulk/output/SQLServerOutputPlugin.java +12 -2
- data/src/main/java/org/embulk/output/sqlserver/NativeBatchInsert.java +7 -4
- data/src/main/java/org/embulk/output/sqlserver/nativeclient/NativeClientWrapper.java +52 -28
- data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test1.csv +1 -0
- data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_insert_create_expected.csv +1 -0
- data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_insert_expected.csv +1 -0
- data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_truncate_insert_expected.csv +1 -0
- metadata +4 -4
- data/classpath/embulk-output-jdbc-0.7.11.jar +0 -0
- data/classpath/embulk-output-sqlserver-0.7.11.jar +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3ed69cc6fcf1d2f3c438c92cef31529785ca59b
|
4
|
+
data.tar.gz: 9918999eda849dadc22bd7e49941b0f95e41fb48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2afd308537cba8f93859abaaf3e0b7058ac5fa160827062f2a76fbf491fd367224bf082c14a3ffc71639bf0b24da2fe793113d5181edbdc5d523e380ddef93b8
|
7
|
+
data.tar.gz: 6f56d6d312892061f81a463bb80cbdadd008c8613825d197befbba0c140e1038423a1bc0b27071d109ee23729aa3ac129e760079fe9079fe8f569aab49509144
|
data/README.md
CHANGED
@@ -34,6 +34,8 @@ embulk "-J-Djava.library.path=C:\drivers" run input-sqlserver.yml
|
|
34
34
|
- **merge_keys**: key column names for merging records in merge mode (string array, required in merge mode if table doesn't have primary key)
|
35
35
|
- **merge_rule**: list of column assignments for updating existing records used in merge mode, for example `foo = T.foo + S.foo` (`T` means target table and `S` means source table). (string array, default: always overwrites with new values)
|
36
36
|
- **insert_method**: see below
|
37
|
+
- **native_driver**: driver name when using `insert_method: native`. (string, default: `{SQL Server Native Client 11.0}`)
|
38
|
+
- **database_encoding**: database encoding when using `insert_method: native`. (string, default: `MS932`)
|
37
39
|
- **batch_size**: size of a single batch insert (integer, default: 16777216)
|
38
40
|
- **default_timezone**: If input column type (embulk type) is timestamp, this plugin needs to format the timestamp into a SQL string. This default_timezone option is used to control the timezone. You can overwrite timezone for each columns using column_options option. (string, default: `UTC`)
|
39
41
|
- **column_options**: advanced: a key-value pairs where key is a column name and value is options for the column.
|
@@ -74,7 +76,9 @@ insert_method supports three options.
|
|
74
76
|
"normal" means normal insert (default). It requires SQL Server JDBC driver.
|
75
77
|
|
76
78
|
"native" means bulk insert using native client. It is faster than "normal".
|
77
|
-
It requires both SQL Server JDBC driver and SQL Server Native Client (
|
79
|
+
It requires both SQL Server JDBC driver and SQL Server Native Client (or newer version of Microsoft ODBC Driver).
|
80
|
+
|
81
|
+
If you embulk use on Linux, you needed to [install mssql-tools](https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server).
|
78
82
|
|
79
83
|
### Supported types
|
80
84
|
|
Binary file
|
Binary file
|
@@ -83,6 +83,14 @@ public class SQLServerOutputPlugin
|
|
83
83
|
@Config("insert_method")
|
84
84
|
@ConfigDefault("\"normal\"")
|
85
85
|
public InsertMethod getInsertMethod();
|
86
|
+
|
87
|
+
@Config("native_driver")
|
88
|
+
@ConfigDefault("null")
|
89
|
+
public Optional<String> getNativeDriverName();
|
90
|
+
|
91
|
+
@Config("database_encoding")
|
92
|
+
@ConfigDefault("\"MS932\"")
|
93
|
+
public String getDatabaseEncoding();
|
86
94
|
}
|
87
95
|
|
88
96
|
private static class UrlAndProperties {
|
@@ -265,8 +273,10 @@ public class SQLServerOutputPlugin
|
|
265
273
|
{
|
266
274
|
SQLServerPluginTask sqlServerTask = (SQLServerPluginTask) task;
|
267
275
|
if (sqlServerTask.getInsertMethod() == InsertMethod.NATIVE) {
|
268
|
-
return new NativeBatchInsert(
|
269
|
-
sqlServerTask.
|
276
|
+
return new NativeBatchInsert(
|
277
|
+
sqlServerTask.getHost().get(), sqlServerTask.getPort(), sqlServerTask.getInstance(),
|
278
|
+
sqlServerTask.getDatabase().get(), sqlServerTask.getUser(), sqlServerTask.getPassword(),
|
279
|
+
sqlServerTask.getNativeDriverName(), sqlServerTask.getDatabaseEncoding());
|
270
280
|
}
|
271
281
|
return new StandardBatchInsert(getConnector(task, true), mergeConfig);
|
272
282
|
}
|
@@ -33,6 +33,8 @@ public class NativeBatchInsert implements BatchInsert
|
|
33
33
|
private final String database;
|
34
34
|
private final Optional<String> user;
|
35
35
|
private final Optional<String> password;
|
36
|
+
private final Optional<String> nativeDriverName;
|
37
|
+
private final String databaseEncoding;
|
36
38
|
|
37
39
|
private int batchWeight;
|
38
40
|
private int batchRows;
|
@@ -45,7 +47,8 @@ public class NativeBatchInsert implements BatchInsert
|
|
45
47
|
|
46
48
|
|
47
49
|
public NativeBatchInsert(String server, int port, Optional<String> instance,
|
48
|
-
String database, Optional<String> user, Optional<String> password
|
50
|
+
String database, Optional<String> user, Optional<String> password,
|
51
|
+
Optional<String> nativeDriverName, String databaseEncoding)
|
49
52
|
{
|
50
53
|
this.server = server;
|
51
54
|
this.port = port;
|
@@ -53,7 +56,8 @@ public class NativeBatchInsert implements BatchInsert
|
|
53
56
|
this.database = database;
|
54
57
|
this.user = user;
|
55
58
|
this.password = password;
|
56
|
-
|
59
|
+
this.nativeDriverName = nativeDriverName;
|
60
|
+
this.databaseEncoding = databaseEncoding;
|
57
61
|
lastColumnIndex = 0;
|
58
62
|
}
|
59
63
|
|
@@ -62,8 +66,7 @@ public class NativeBatchInsert implements BatchInsert
|
|
62
66
|
public void prepare(TableIdentifier loadTable, JdbcSchema insertSchema) throws SQLException
|
63
67
|
{
|
64
68
|
columnCount = insertSchema.getCount();
|
65
|
-
client.open(server, port, instance, database, user, password, loadTable.getTableName());
|
66
|
-
|
69
|
+
client.open(server, port, instance, database, user, password, loadTable.getTableName(), nativeDriverName, databaseEncoding);
|
67
70
|
formats = new DateFormat[insertSchema.getCount()];
|
68
71
|
for (int i = 0; i < insertSchema.getCount(); i++) {
|
69
72
|
JdbcColumn column = insertSchema.getColumn(i);
|
@@ -8,6 +8,7 @@ import java.util.HashMap;
|
|
8
8
|
import java.util.Map;
|
9
9
|
|
10
10
|
import jnr.ffi.LibraryLoader;
|
11
|
+
import jnr.ffi.Platform;
|
11
12
|
import jnr.ffi.Pointer;
|
12
13
|
import jnr.ffi.Runtime;
|
13
14
|
import jnr.ffi.provider.jffi.ArrayMemoryIO;
|
@@ -33,35 +34,46 @@ public class NativeClientWrapper
|
|
33
34
|
|
34
35
|
public NativeClientWrapper()
|
35
36
|
{
|
37
|
+
Platform platform = Platform.getPlatform();
|
38
|
+
Platform.OS os = platform.getOS();
|
39
|
+
String odbcLibName;
|
40
|
+
String nativeClientLibName;
|
41
|
+
if (os == Platform.OS.WINDOWS) {
|
42
|
+
odbcLibName = "odbc32";
|
43
|
+
nativeClientLibName = "sqlncli11";
|
44
|
+
} else {
|
45
|
+
odbcLibName = "odbc";
|
46
|
+
nativeClientLibName = "msodbcsql";
|
47
|
+
}
|
36
48
|
synchronized (NativeClientWrapper.class) {
|
37
49
|
if (odbc == null) {
|
38
|
-
logger.info("Loading SQL Server Native Client library (
|
50
|
+
logger.info(String.format("Loading SQL Server Native Client library (%s).", odbcLibName));
|
39
51
|
try {
|
40
|
-
odbc = LibraryLoader.create(ODBC.class).failImmediately().load(
|
52
|
+
odbc = LibraryLoader.create(ODBC.class).failImmediately().load(odbcLibName);
|
41
53
|
} catch (UnsatisfiedLinkError e) {
|
42
|
-
throw new RuntimeException(
|
54
|
+
throw new RuntimeException(platform.mapLibraryName(odbcLibName) + " not found.", e);
|
43
55
|
}
|
44
56
|
}
|
45
57
|
if (client == null) {
|
46
|
-
logger.info("Loading SQL Server Native Client library (
|
58
|
+
logger.info(String.format("Loading SQL Server Native Client library (%s).", nativeClientLibName));
|
47
59
|
try {
|
48
|
-
client = LibraryLoader.create(NativeClient.class).failImmediately().load(
|
60
|
+
client = LibraryLoader.create(NativeClient.class).failImmediately().load(nativeClientLibName);
|
49
61
|
} catch (UnsatisfiedLinkError e) {
|
50
|
-
throw new RuntimeException(
|
62
|
+
throw new RuntimeException(platform.mapLibraryName(nativeClientLibName) + " not found.", e);
|
51
63
|
}
|
52
64
|
}
|
53
65
|
}
|
54
|
-
|
55
|
-
charset = Charset.forName("MS932");
|
56
|
-
wideCharset = Charset.forName("UTF-16LE");
|
57
66
|
}
|
58
67
|
|
59
68
|
public void open(String server, int port, Optional<String> instance,
|
60
69
|
String database, Optional<String> user, Optional<String> password,
|
61
|
-
String table
|
70
|
+
String table, Optional<String> nativeDriverName,
|
71
|
+
String databaseEncoding)
|
62
72
|
throws SQLException
|
63
73
|
{
|
64
74
|
// environment handle
|
75
|
+
charset = Charset.forName(databaseEncoding);
|
76
|
+
wideCharset = Charset.forName("UTF-16LE");
|
65
77
|
Pointer envHandlePointer = createPointerPointer();
|
66
78
|
checkSQLResult("SQLAllocHandle(SQL_HANDLE_ENV)", odbc.SQLAllocHandle(
|
67
79
|
ODBC.SQL_HANDLE_ENV,
|
@@ -92,7 +104,11 @@ public class NativeClientWrapper
|
|
92
104
|
ODBC.SQL_IS_INTEGER));
|
93
105
|
|
94
106
|
StringBuilder connectionString = new StringBuilder();
|
95
|
-
|
107
|
+
if (nativeDriverName.isPresent()) {
|
108
|
+
connectionString.append(String.format("Driver=%s;", nativeDriverName.get()));
|
109
|
+
} else {
|
110
|
+
connectionString.append("Driver={SQL Server Native Client 11.0};");
|
111
|
+
}
|
96
112
|
if (instance.isPresent()) {
|
97
113
|
connectionString.append(String.format("Server=%s,%d\\%s;", server, port, instance.get()));
|
98
114
|
} else {
|
@@ -152,14 +168,15 @@ public class NativeClientWrapper
|
|
152
168
|
public int bindValue(int columnIndex, String value) throws SQLException
|
153
169
|
{
|
154
170
|
ByteBuffer bytes = charset.encode(value);
|
155
|
-
|
156
|
-
pointer
|
171
|
+
int size = bytes.remaining();
|
172
|
+
Pointer pointer = prepareBuffer(columnIndex, size);
|
173
|
+
pointer.put(0, bytes.array(), 0, size);
|
157
174
|
|
158
175
|
checkBCPResult("bcp_bind", client.bcp_bind(
|
159
176
|
odbcHandle,
|
160
177
|
pointer,
|
161
178
|
0,
|
162
|
-
|
179
|
+
size,
|
163
180
|
null,
|
164
181
|
0,
|
165
182
|
NativeClient.SQLCHARACTER,
|
@@ -169,14 +186,15 @@ public class NativeClientWrapper
|
|
169
186
|
|
170
187
|
public int bindValue(int columnIndex, boolean value) throws SQLException
|
171
188
|
{
|
172
|
-
|
189
|
+
int size = 1;
|
190
|
+
Pointer pointer = prepareBuffer(columnIndex, size);
|
173
191
|
pointer.putByte(0, value ? (byte)1 : (byte)0);
|
174
192
|
|
175
193
|
checkBCPResult("bcp_bind", client.bcp_bind(
|
176
194
|
odbcHandle,
|
177
195
|
pointer,
|
178
196
|
0,
|
179
|
-
|
197
|
+
size,
|
180
198
|
null,
|
181
199
|
0,
|
182
200
|
NativeClient.SQLBIT,
|
@@ -186,14 +204,15 @@ public class NativeClientWrapper
|
|
186
204
|
|
187
205
|
public int bindValue(int columnIndex, byte value) throws SQLException
|
188
206
|
{
|
189
|
-
|
207
|
+
int size = 1;
|
208
|
+
Pointer pointer = prepareBuffer(columnIndex, size);
|
190
209
|
pointer.putByte(0, value);
|
191
210
|
|
192
211
|
checkBCPResult("bcp_bind", client.bcp_bind(
|
193
212
|
odbcHandle,
|
194
213
|
pointer,
|
195
214
|
0,
|
196
|
-
|
215
|
+
size,
|
197
216
|
null,
|
198
217
|
0,
|
199
218
|
NativeClient.SQLINT1,
|
@@ -203,14 +222,15 @@ public class NativeClientWrapper
|
|
203
222
|
|
204
223
|
public int bindValue(int columnIndex, short value) throws SQLException
|
205
224
|
{
|
206
|
-
|
225
|
+
int size = 2;
|
226
|
+
Pointer pointer = prepareBuffer(columnIndex, size);
|
207
227
|
pointer.putShort(0, value);
|
208
228
|
|
209
229
|
checkBCPResult("bcp_bind", client.bcp_bind(
|
210
230
|
odbcHandle,
|
211
231
|
pointer,
|
212
232
|
0,
|
213
|
-
|
233
|
+
size,
|
214
234
|
null,
|
215
235
|
0,
|
216
236
|
NativeClient.SQLINT2,
|
@@ -220,14 +240,15 @@ public class NativeClientWrapper
|
|
220
240
|
|
221
241
|
public int bindValue(int columnIndex, int value) throws SQLException
|
222
242
|
{
|
223
|
-
|
243
|
+
int size = 4;
|
244
|
+
Pointer pointer = prepareBuffer(columnIndex, size);
|
224
245
|
pointer.putInt(0, value);
|
225
246
|
|
226
247
|
checkBCPResult("bcp_bind", client.bcp_bind(
|
227
248
|
odbcHandle,
|
228
249
|
pointer,
|
229
250
|
0,
|
230
|
-
|
251
|
+
size,
|
231
252
|
null,
|
232
253
|
0,
|
233
254
|
NativeClient.SQLINT4,
|
@@ -237,14 +258,15 @@ public class NativeClientWrapper
|
|
237
258
|
|
238
259
|
public int bindValue(int columnIndex, long value) throws SQLException
|
239
260
|
{
|
240
|
-
|
261
|
+
int size = 8;
|
262
|
+
Pointer pointer = prepareBuffer(columnIndex, size);
|
241
263
|
pointer.putLongLong(0, value);
|
242
264
|
|
243
265
|
checkBCPResult("bcp_bind", client.bcp_bind(
|
244
266
|
odbcHandle,
|
245
267
|
pointer,
|
246
268
|
0,
|
247
|
-
|
269
|
+
size,
|
248
270
|
null,
|
249
271
|
0,
|
250
272
|
NativeClient.SQLINT8,
|
@@ -254,14 +276,15 @@ public class NativeClientWrapper
|
|
254
276
|
|
255
277
|
public int bindValue(int columnIndex, float value) throws SQLException
|
256
278
|
{
|
257
|
-
|
279
|
+
int size = 4;
|
280
|
+
Pointer pointer = prepareBuffer(columnIndex, size);
|
258
281
|
pointer.putFloat(0, value);
|
259
282
|
|
260
283
|
checkBCPResult("bcp_bind", client.bcp_bind(
|
261
284
|
odbcHandle,
|
262
285
|
pointer,
|
263
286
|
0,
|
264
|
-
|
287
|
+
size,
|
265
288
|
null,
|
266
289
|
0,
|
267
290
|
NativeClient.SQLFLT4,
|
@@ -271,14 +294,15 @@ public class NativeClientWrapper
|
|
271
294
|
|
272
295
|
public int bindValue(int columnIndex, double value) throws SQLException
|
273
296
|
{
|
274
|
-
|
297
|
+
int size = 8;
|
298
|
+
Pointer pointer = prepareBuffer(columnIndex, size);
|
275
299
|
pointer.putDouble(0, value);
|
276
300
|
|
277
301
|
checkBCPResult("bcp_bind", client.bcp_bind(
|
278
302
|
odbcHandle,
|
279
303
|
pointer,
|
280
304
|
0,
|
281
|
-
|
305
|
+
size,
|
282
306
|
null,
|
283
307
|
0,
|
284
308
|
NativeClient.SQLFLT8,
|
@@ -2,3 +2,4 @@ ID:string,TINYINT_ITEM:long,SMALLINT_ITEM:long,INT_ITEM:long,BIGINT_ITEM:long,BI
|
|
2
2
|
A001,0,1234,123456,12345678901,0,1.23,3.456,12.34,123.4567,0.1234567,0.12345678901234,a,b,c,A,B,C,2016-1-1 00:00:00.0 +0900,2017-1-1 1:2:3.123 +0900,2018-1-1 1:2:3.1234567 +0900,2019-1-1 1:2:3.12 +0900,2020-1-1 1:2:3.0 +0900,1970-01-01 3:4:5.1234567 +0900,1970-01-01 6:7:8.12 +0900
|
3
3
|
A002,255,-32768,-2147483648,-9223372036854775808,1,-9999999999.99,-99.999,-214748.3648,-922337203685477.5808,-9999000000,-999999999999000000,あい,あいうえ,あいうえお,かき,かきくけ,かきくけこ,2016-12-31 00:00:00.0 +0900,2017-12-31 23:59:59.997 +0900,2018-12-31 23:59:59.9999999 +0900,2019-12-31 23:59:59.99 +0900,2020-12-31 23:59:59.0 +0900,1970-01-01 23:59:59.9999999 +0900,1970-01-01 23:59:59.99 +0900
|
4
4
|
A003,,,,,,,,,,,,,,,,,,,,,,,,
|
5
|
+
A004,9,9,9,9,0,9,9,9,9,9,9,x,x,x,X,X,X,2016-1-1 00:00:00.0 +0900,2017-1-1 1:2:3.123 +0900,2018-1-1 1:2:3.1234567 +0900,2019-1-1 1:2:3.12 +0900,2020-1-1 1:2:3.0 +0900,1970-01-01 3:4:5.1234567 +0900,1970-01-01 6:7:8.12 +0900
|
@@ -1,3 +1,4 @@
|
|
1
1
|
A001,0,1234,123456,12345678901,0,1.23,3.456,12.34,123.4567,0.1234567,0.12345678901234,a,b,c,A,B,C,2015-12-31 15:00:00.0000000,2016-12-31 16:02:03.1230000,2017-12-31 16:02:03.1234560,2018-12-31 16:02:03.1200000,2019-12-31 16:02:03.0000000,1969-12-31 18:04:05.1234560,1969-12-31 21:07:08.1200000
|
2
2
|
A002,255,-32768,-2147483648,-9223372036854775808,1,-9999999999.99,-99.999,-214748.3648,-922337203685477.5808,-9999000000.0,-9.9999999999900006E+17,あい,あいうえ,あいうえお,かき,かきくけ,かきくけこ,2016-12-30 15:00:00.0000000,2017-12-31 14:59:59.9970000,2018-12-31 14:59:59.9999990,2019-12-31 14:59:59.9900000,2020-12-31 14:59:59.0000000,1970-01-01 14:59:59.9999990,1970-01-01 14:59:59.9900000
|
3
3
|
A003,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
|
4
|
+
A004,9,9,9,9,0,9,9,9,9,9.0,9.0,x,x,x,X,X,X,2015-12-31 15:00:00.0000000,2016-12-31 16:02:03.1230000,2017-12-31 16:02:03.1234560,2018-12-31 16:02:03.1200000,2019-12-31 16:02:03.0000000,1969-12-31 18:04:05.1234560,1969-12-31 21:07:08.1200000
|
data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_insert_expected.csv
CHANGED
@@ -2,3 +2,4 @@
|
|
2
2
|
A001,0,1234,123456,12345678901,0,1.23,3.456,12.3400,123.4567,0.1234567,0.12345678901234,a ,b,c,A ,B,C,2015-12-31,2016-12-31 16:02:03.123,2017-12-31 16:02:03.1234560,2018-12-31 16:02:03.12,2019-12-31 16:02:00,18:04:05.1234560,21:07:08.12
|
3
3
|
A002,255,-32768,-2147483648,-9223372036854775808,1,-9999999999.99,-99.999,-214748.3648,-922337203685477.5808,-9.9989996E+9,-9.9999999999900006E+17,あい,あいうえ,あいうえお,かき ,かきくけ,かきくけこ,2016-12-30,2017-12-31 14:59:59.997,2018-12-31 14:59:59.9999990,2019-12-31 14:59:59.99,2020-12-31 15:00:00,14:59:59.9999990,14:59:59.99
|
4
4
|
A003,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
|
5
|
+
A004,9,9,9,9,0,9.00,9.000,9.0000,9.0000,9.0,9.0,x ,x,x,X ,X,X,2015-12-31,2016-12-31 16:02:03.123,2017-12-31 16:02:03.1234560,2018-12-31 16:02:03.12,2019-12-31 16:02:00,18:04:05.1234560,21:07:08.12
|
@@ -1,3 +1,4 @@
|
|
1
1
|
A001,0,1234,123456,12345678901,0,1.23,3.456,12.3400,123.4567,0.1234567,0.12345678901234,a ,b,c,A ,B,C,2015-12-31,2016-12-31 16:02:03.123,2017-12-31 16:02:03.1234560,2018-12-31 16:02:03.12,2019-12-31 16:02:00,18:04:05.1234560,21:07:08.12
|
2
2
|
A002,255,-32768,-2147483648,-9223372036854775808,1,-9999999999.99,-99.999,-214748.3648,-922337203685477.5808,-9.9989996E+9,-9.9999999999900006E+17,あい,あいうえ,あいうえお,かき ,かきくけ,かきくけこ,2016-12-30,2017-12-31 14:59:59.997,2018-12-31 14:59:59.9999990,2019-12-31 14:59:59.99,2020-12-31 15:00:00,14:59:59.9999990,14:59:59.99
|
3
3
|
A003,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
|
4
|
+
A004,9,9,9,9,0,9.00,9.000,9.0000,9.0000,9.0,9.0,x ,x,x,X ,X,X,2015-12-31,2016-12-31 16:02:03.123,2017-12-31 16:02:03.1234560,2018-12-31 16:02:03.12,2019-12-31 16:02:00,18:04:05.1234560,21:07:08.12
|
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.7.
|
4
|
+
version: 0.7.12
|
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-
|
11
|
+
date: 2017-11-24 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.
|
23
|
-
- classpath/embulk-output-sqlserver-0.7.
|
22
|
+
- classpath/embulk-output-jdbc-0.7.12.jar
|
23
|
+
- classpath/embulk-output-sqlserver-0.7.12.jar
|
24
24
|
- classpath/jtds-1.3.1.jar
|
25
25
|
- lib/embulk/output/sqlserver.rb
|
26
26
|
- src/main/java/org/embulk/output/SQLServerOutputPlugin.java
|
Binary file
|
Binary file
|