embulk-output-oracle 0.2.4 → 0.3.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 +4 -4
- data/README.md +155 -110
- data/build.gradle +6 -6
- data/classpath/embulk-output-jdbc-0.3.0.jar +0 -0
- data/classpath/embulk-output-oracle-0.3.0.jar +0 -0
- data/lib/embulk/output/oracle.rb +3 -3
- data/src/main/cpp/common/dir-path-load.cpp +424 -424
- data/src/main/cpp/common/dir-path-load.h +36 -36
- data/src/main/cpp/common/embulk-output-oracle.cpp +196 -196
- data/src/main/cpp/common/org_embulk_output_oracle_oci_OCI.h +77 -77
- data/src/main/cpp/linux/build.sh +21 -21
- data/src/main/cpp/win/build.bat +31 -31
- data/src/main/cpp/win/dllmain.cpp +25 -25
- data/src/main/cpp/win/embulk-output-oracle.sln +39 -39
- data/src/main/cpp/win/embulk-output-oracle.vcxproj +175 -175
- data/src/main/java/org/embulk/output/OracleOutputPlugin.java +22 -66
- data/src/main/java/org/embulk/output/oracle/DirectBatchInsert.java +289 -289
- data/src/main/java/org/embulk/output/oracle/InsertMethod.java +8 -8
- data/src/main/java/org/embulk/output/oracle/OracleCharset.java +32 -19
- data/src/main/java/org/embulk/output/oracle/OracleOutputConnection.java +165 -134
- data/src/main/java/org/embulk/output/oracle/OracleOutputConnector.java +49 -49
- data/src/main/java/org/embulk/output/oracle/TimestampFormat.java +37 -37
- data/src/main/java/org/embulk/output/oracle/oci/ColumnDefinition.java +26 -26
- data/src/main/java/org/embulk/output/oracle/oci/OCI.java +139 -139
- data/src/main/java/org/embulk/output/oracle/oci/OCIManager.java +64 -64
- data/src/main/java/org/embulk/output/oracle/oci/OCIWrapper.java +96 -96
- data/src/main/java/org/embulk/output/oracle/oci/RowBuffer.java +99 -99
- data/src/main/java/org/embulk/output/oracle/oci/TableDefinition.java +24 -24
- data/src/test/cpp/common/embulk-output-oracle-test.cpp +69 -69
- data/src/test/cpp/linux/build.sh +19 -19
- data/src/test/cpp/win/build.bat +28 -28
- data/src/test/cpp/win/embulk-output-oracle-test.vcxproj +154 -154
- data/src/test/java/org/embulk/input/filesplit/LocalFileSplitInputPlugin.java +187 -187
- data/src/test/java/org/embulk/input/filesplit/PartialFile.java +49 -49
- data/src/test/java/org/embulk/input/filesplit/PartialFileInputStream.java +154 -154
- data/src/test/java/org/embulk/output/oracle/ChildFirstClassLoader.java +42 -42
- data/src/test/java/org/embulk/output/oracle/EmbulkPluginTester.java +120 -120
- data/src/test/java/org/embulk/output/oracle/EmptyConfigSource.java +100 -100
- data/src/test/java/org/embulk/output/oracle/OracleOutputPluginTest.java +172 -161
- data/src/test/java/org/embulk/output/oracle/OracleOutputPluginTestImpl.java +445 -413
- data/src/test/java/org/embulk/output/oracle/TimestampFormatTest.java +57 -57
- data/src/test/resources/data/test1/test1.csv +3 -3
- data/src/test/resources/yml/test-insert-direct.yml +26 -26
- data/src/test/resources/yml/test-insert-oci-split.yml +26 -26
- data/src/test/resources/yml/test-insert-oci.yml +26 -26
- data/src/test/resources/yml/test-insert.yml +25 -25
- data/src/test/resources/yml/test-replace-long-name-multibyte.yml +25 -0
- data/src/test/resources/yml/test-replace-long-name.yml +25 -25
- data/src/test/resources/yml/test-replace.yml +25 -25
- data/src/test/resources/yml/test-string-timestamp.yml +25 -0
- data/src/test/resources/yml/test-url.yml +24 -24
- metadata +6 -5
- data/classpath/embulk-output-jdbc-0.2.4.jar +0 -0
- data/classpath/embulk-output-oracle-0.2.4.jar +0 -0
- data/src/main/java/org/embulk/output/oracle/setter/OracleColumnSetterFactory.java +0 -31
@@ -1,289 +1,289 @@
|
|
1
|
-
package org.embulk.output.oracle;
|
2
|
-
|
3
|
-
import java.io.IOException;
|
4
|
-
import java.math.BigDecimal;
|
5
|
-
import java.sql.Date;
|
6
|
-
import java.sql.SQLException;
|
7
|
-
import java.sql.Time;
|
8
|
-
import java.sql.Timestamp;
|
9
|
-
import java.sql.Types;
|
10
|
-
import java.text.DateFormat;
|
11
|
-
import java.text.SimpleDateFormat;
|
12
|
-
import java.util.ArrayList;
|
13
|
-
import java.util.Arrays;
|
14
|
-
import java.util.List;
|
15
|
-
|
16
|
-
import org.embulk.output.jdbc.BatchInsert;
|
17
|
-
import org.embulk.output.jdbc.JdbcColumn;
|
18
|
-
import org.embulk.output.jdbc.JdbcSchema;
|
19
|
-
import org.embulk.output.oracle.oci.ColumnDefinition;
|
20
|
-
import org.embulk.output.oracle.oci.OCIManager;
|
21
|
-
import org.embulk.output.oracle.oci.OCIWrapper;
|
22
|
-
import org.embulk.output.oracle.oci.RowBuffer;
|
23
|
-
import org.embulk.output.oracle.oci.TableDefinition;
|
24
|
-
import org.embulk.spi.Exec;
|
25
|
-
import org.slf4j.Logger;
|
26
|
-
|
27
|
-
public class DirectBatchInsert implements BatchInsert
|
28
|
-
{
|
29
|
-
private static OCIManager ociManager = new OCIManager();
|
30
|
-
|
31
|
-
private final Logger logger = Exec.getLogger(DirectBatchInsert.class);
|
32
|
-
|
33
|
-
private final List<String> ociKey;
|
34
|
-
private final String database;
|
35
|
-
private final String user;
|
36
|
-
private final String password;
|
37
|
-
private final String table;
|
38
|
-
private final OracleCharset charset;
|
39
|
-
private final int batchSize;
|
40
|
-
private RowBuffer buffer;
|
41
|
-
private long totalRows;
|
42
|
-
private int rowSize;
|
43
|
-
private int batchWeight;
|
44
|
-
|
45
|
-
private DateFormat[] formats;
|
46
|
-
|
47
|
-
|
48
|
-
public DirectBatchInsert(String database, String user, String password, String table, OracleCharset charset, int batchSize)
|
49
|
-
{
|
50
|
-
this.database = database;
|
51
|
-
this.user = user;
|
52
|
-
this.password = password;
|
53
|
-
this.table = table;
|
54
|
-
this.charset = charset;
|
55
|
-
this.batchSize = batchSize;
|
56
|
-
|
57
|
-
ociKey = Arrays.asList(database, user, table);
|
58
|
-
}
|
59
|
-
|
60
|
-
@Override
|
61
|
-
public void prepare(String loadTable, JdbcSchema insertSchema) throws SQLException
|
62
|
-
{
|
63
|
-
|
64
|
-
/*
|
65
|
-
* available mappings
|
66
|
-
*
|
67
|
-
* boolean -> unused
|
68
|
-
* byte -> unused
|
69
|
-
* short -> unused
|
70
|
-
* int -> unused
|
71
|
-
* long -> unused
|
72
|
-
* BigDecimal -> unused
|
73
|
-
* String -> CHAR,VARCHAR,LONGVARCHAR,CLOB, NCHAR,NVARCHAR,NCLOB, NUMBER
|
74
|
-
* NString -> unused
|
75
|
-
* bytes -> unused
|
76
|
-
* SqlDate -> unused
|
77
|
-
* SqlTime -> unused
|
78
|
-
* SqlTimeStamp -> TIMESTAMP
|
79
|
-
*
|
80
|
-
*/
|
81
|
-
|
82
|
-
formats = new DateFormat[insertSchema.getCount()];
|
83
|
-
List<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
|
84
|
-
Timestamp dummy = new Timestamp(System.currentTimeMillis());
|
85
|
-
for (int i = 0; i < insertSchema.getCount(); i++) {
|
86
|
-
JdbcColumn insertColumn = insertSchema.getColumn(i);
|
87
|
-
switch (insertColumn.getSqlType()) {
|
88
|
-
case Types.CHAR:
|
89
|
-
case Types.VARCHAR:
|
90
|
-
case Types.LONGVARCHAR:
|
91
|
-
case Types.CLOB:
|
92
|
-
// TODO: CHAR(n CHAR)
|
93
|
-
columns.add(new ColumnDefinition(insertColumn.getName(),
|
94
|
-
ColumnDefinition.SQLT_CHR,
|
95
|
-
insertColumn.getSizeTypeParameter()));
|
96
|
-
break;
|
97
|
-
|
98
|
-
case Types.DECIMAL:
|
99
|
-
// sign + size
|
100
|
-
int size = 1 + insertColumn.getSizeTypeParameter();
|
101
|
-
if (insertColumn.getSizeTypeParameter() > 0) {
|
102
|
-
// decimal point
|
103
|
-
size += 1;
|
104
|
-
}
|
105
|
-
columns.add(new ColumnDefinition(insertColumn.getName(),
|
106
|
-
ColumnDefinition.SQLT_CHR,
|
107
|
-
size));
|
108
|
-
break;
|
109
|
-
|
110
|
-
case Types.DATE:
|
111
|
-
break;
|
112
|
-
|
113
|
-
case Types.TIMESTAMP:
|
114
|
-
String oracleFormat;
|
115
|
-
DateFormat javaFormat;
|
116
|
-
if (insertColumn.
|
117
|
-
oracleFormat = "YYYY-MM-DD HH24:MI:SS";
|
118
|
-
javaFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
119
|
-
} else {
|
120
|
-
oracleFormat = "YYYY-MM-DD HH24:MI:SS.FF9";
|
121
|
-
javaFormat = new TimestampFormat("yyyy-MM-dd HH:mm:ss", 9);
|
122
|
-
}
|
123
|
-
formats[i] = javaFormat;
|
124
|
-
columns.add(new ColumnDefinition(insertColumn.getName(),
|
125
|
-
ColumnDefinition.SQLT_CHR,
|
126
|
-
javaFormat.format(dummy).length(),
|
127
|
-
oracleFormat));
|
128
|
-
break;
|
129
|
-
|
130
|
-
default:
|
131
|
-
throw new SQLException("Unsupported type : " + insertColumn.
|
132
|
-
}
|
133
|
-
|
134
|
-
}
|
135
|
-
|
136
|
-
rowSize = 0;
|
137
|
-
for (ColumnDefinition column : columns) {
|
138
|
-
rowSize += column.columnSize;
|
139
|
-
}
|
140
|
-
|
141
|
-
TableDefinition tableDefinition = new TableDefinition(table, charset.
|
142
|
-
ociManager.open(ociKey, database, user, password, tableDefinition);
|
143
|
-
|
144
|
-
buffer = new RowBuffer(tableDefinition, Math.max(batchSize / rowSize, 8), charset.
|
145
|
-
}
|
146
|
-
|
147
|
-
@Override
|
148
|
-
public int getBatchWeight()
|
149
|
-
{
|
150
|
-
return batchWeight;
|
151
|
-
}
|
152
|
-
|
153
|
-
@Override
|
154
|
-
public void add() throws IOException, SQLException
|
155
|
-
{
|
156
|
-
batchWeight += rowSize;
|
157
|
-
if (buffer.isFull()) {
|
158
|
-
flush();
|
159
|
-
}
|
160
|
-
}
|
161
|
-
|
162
|
-
@Override
|
163
|
-
public void close() throws IOException, SQLException
|
164
|
-
{
|
165
|
-
ociManager.close(ociKey);
|
166
|
-
}
|
167
|
-
|
168
|
-
@Override
|
169
|
-
public void flush() throws IOException, SQLException
|
170
|
-
{
|
171
|
-
if (buffer.getRowCount() > 0) {
|
172
|
-
try {
|
173
|
-
logger.info(String.format("Loading %,d rows", buffer.getRowCount()));
|
174
|
-
|
175
|
-
long startTime = System.currentTimeMillis();
|
176
|
-
|
177
|
-
OCIWrapper oci = ociManager.get(ociKey);
|
178
|
-
synchronized (oci) {
|
179
|
-
oci.loadBuffer(buffer.getBuffer(), buffer.getRowCount());
|
180
|
-
}
|
181
|
-
|
182
|
-
totalRows += buffer.getRowCount();
|
183
|
-
double seconds = (System.currentTimeMillis() - startTime) / 1000.0;
|
184
|
-
logger.info(String.format("> %.2f seconds (loaded %,d rows in total)", seconds, totalRows));
|
185
|
-
|
186
|
-
} finally {
|
187
|
-
buffer.clear();
|
188
|
-
batchWeight = 0;
|
189
|
-
}
|
190
|
-
}
|
191
|
-
}
|
192
|
-
|
193
|
-
@Override
|
194
|
-
public void finish() throws IOException, SQLException
|
195
|
-
{
|
196
|
-
flush();
|
197
|
-
}
|
198
|
-
|
199
|
-
@Override
|
200
|
-
public void setNull(int sqlType) throws IOException, SQLException
|
201
|
-
{
|
202
|
-
buffer.addValue("");
|
203
|
-
}
|
204
|
-
|
205
|
-
@Override
|
206
|
-
public void setBoolean(boolean v) throws IOException, SQLException
|
207
|
-
{
|
208
|
-
throw new SQLException("Unsupported");
|
209
|
-
}
|
210
|
-
|
211
|
-
@Override
|
212
|
-
public void setByte(byte v) throws IOException, SQLException
|
213
|
-
{
|
214
|
-
throw new SQLException("Unsupported");
|
215
|
-
}
|
216
|
-
|
217
|
-
@Override
|
218
|
-
public void setShort(short v) throws IOException, SQLException
|
219
|
-
{
|
220
|
-
throw new SQLException("Unsupported");
|
221
|
-
}
|
222
|
-
|
223
|
-
@Override
|
224
|
-
public void setInt(int v) throws IOException, SQLException
|
225
|
-
{
|
226
|
-
buffer.addValue(v);
|
227
|
-
}
|
228
|
-
|
229
|
-
@Override
|
230
|
-
public void setLong(long v) throws IOException, SQLException
|
231
|
-
{
|
232
|
-
buffer.addValue(Long.toString(v));
|
233
|
-
}
|
234
|
-
|
235
|
-
@Override
|
236
|
-
public void setFloat(float v) throws IOException, SQLException
|
237
|
-
{
|
238
|
-
throw new SQLException("Unsupported");
|
239
|
-
}
|
240
|
-
|
241
|
-
@Override
|
242
|
-
public void setDouble(double v) throws IOException, SQLException
|
243
|
-
{
|
244
|
-
throw new SQLException("Unsupported");
|
245
|
-
}
|
246
|
-
|
247
|
-
@Override
|
248
|
-
public void setBigDecimal(BigDecimal v) throws IOException, SQLException
|
249
|
-
{
|
250
|
-
throw new SQLException("Unsupported");
|
251
|
-
}
|
252
|
-
|
253
|
-
@Override
|
254
|
-
public void setString(String v) throws IOException, SQLException
|
255
|
-
{
|
256
|
-
buffer.addValue(v);
|
257
|
-
}
|
258
|
-
|
259
|
-
@Override
|
260
|
-
public void setNString(String v) throws IOException, SQLException
|
261
|
-
{
|
262
|
-
throw new SQLException("Unsupported");
|
263
|
-
}
|
264
|
-
|
265
|
-
@Override
|
266
|
-
public void setBytes(byte[] v) throws IOException, SQLException
|
267
|
-
{
|
268
|
-
throw new SQLException("Unsupported");
|
269
|
-
}
|
270
|
-
|
271
|
-
@Override
|
272
|
-
public void setSqlDate(Date v, int sqlType) throws IOException, SQLException
|
273
|
-
{
|
274
|
-
throw new SQLException("Unsupported");
|
275
|
-
}
|
276
|
-
|
277
|
-
@Override
|
278
|
-
public void setSqlTime(Time v, int sqlType) throws IOException, SQLException
|
279
|
-
{
|
280
|
-
throw new SQLException("Unsupported");
|
281
|
-
}
|
282
|
-
|
283
|
-
@Override
|
284
|
-
public void setSqlTimestamp(Timestamp v, int sqlType) throws IOException, SQLException
|
285
|
-
{
|
286
|
-
buffer.addValue(formats[buffer.getCurrentColumn()].format(v));
|
287
|
-
}
|
288
|
-
|
289
|
-
}
|
1
|
+
package org.embulk.output.oracle;
|
2
|
+
|
3
|
+
import java.io.IOException;
|
4
|
+
import java.math.BigDecimal;
|
5
|
+
import java.sql.Date;
|
6
|
+
import java.sql.SQLException;
|
7
|
+
import java.sql.Time;
|
8
|
+
import java.sql.Timestamp;
|
9
|
+
import java.sql.Types;
|
10
|
+
import java.text.DateFormat;
|
11
|
+
import java.text.SimpleDateFormat;
|
12
|
+
import java.util.ArrayList;
|
13
|
+
import java.util.Arrays;
|
14
|
+
import java.util.List;
|
15
|
+
|
16
|
+
import org.embulk.output.jdbc.BatchInsert;
|
17
|
+
import org.embulk.output.jdbc.JdbcColumn;
|
18
|
+
import org.embulk.output.jdbc.JdbcSchema;
|
19
|
+
import org.embulk.output.oracle.oci.ColumnDefinition;
|
20
|
+
import org.embulk.output.oracle.oci.OCIManager;
|
21
|
+
import org.embulk.output.oracle.oci.OCIWrapper;
|
22
|
+
import org.embulk.output.oracle.oci.RowBuffer;
|
23
|
+
import org.embulk.output.oracle.oci.TableDefinition;
|
24
|
+
import org.embulk.spi.Exec;
|
25
|
+
import org.slf4j.Logger;
|
26
|
+
|
27
|
+
public class DirectBatchInsert implements BatchInsert
|
28
|
+
{
|
29
|
+
private static OCIManager ociManager = new OCIManager();
|
30
|
+
|
31
|
+
private final Logger logger = Exec.getLogger(DirectBatchInsert.class);
|
32
|
+
|
33
|
+
private final List<String> ociKey;
|
34
|
+
private final String database;
|
35
|
+
private final String user;
|
36
|
+
private final String password;
|
37
|
+
private final String table;
|
38
|
+
private final OracleCharset charset;
|
39
|
+
private final int batchSize;
|
40
|
+
private RowBuffer buffer;
|
41
|
+
private long totalRows;
|
42
|
+
private int rowSize;
|
43
|
+
private int batchWeight;
|
44
|
+
|
45
|
+
private DateFormat[] formats;
|
46
|
+
|
47
|
+
|
48
|
+
public DirectBatchInsert(String database, String user, String password, String table, OracleCharset charset, int batchSize)
|
49
|
+
{
|
50
|
+
this.database = database;
|
51
|
+
this.user = user;
|
52
|
+
this.password = password;
|
53
|
+
this.table = table;
|
54
|
+
this.charset = charset;
|
55
|
+
this.batchSize = batchSize;
|
56
|
+
|
57
|
+
ociKey = Arrays.asList(database, user, table);
|
58
|
+
}
|
59
|
+
|
60
|
+
@Override
|
61
|
+
public void prepare(String loadTable, JdbcSchema insertSchema) throws SQLException
|
62
|
+
{
|
63
|
+
|
64
|
+
/*
|
65
|
+
* available mappings
|
66
|
+
*
|
67
|
+
* boolean -> unused
|
68
|
+
* byte -> unused
|
69
|
+
* short -> unused
|
70
|
+
* int -> unused
|
71
|
+
* long -> unused
|
72
|
+
* BigDecimal -> unused
|
73
|
+
* String -> CHAR,VARCHAR,LONGVARCHAR,CLOB, NCHAR,NVARCHAR,NCLOB, NUMBER
|
74
|
+
* NString -> unused
|
75
|
+
* bytes -> unused
|
76
|
+
* SqlDate -> unused
|
77
|
+
* SqlTime -> unused
|
78
|
+
* SqlTimeStamp -> TIMESTAMP
|
79
|
+
*
|
80
|
+
*/
|
81
|
+
|
82
|
+
formats = new DateFormat[insertSchema.getCount()];
|
83
|
+
List<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
|
84
|
+
Timestamp dummy = new Timestamp(System.currentTimeMillis());
|
85
|
+
for (int i = 0; i < insertSchema.getCount(); i++) {
|
86
|
+
JdbcColumn insertColumn = insertSchema.getColumn(i);
|
87
|
+
switch (insertColumn.getSqlType()) {
|
88
|
+
case Types.CHAR:
|
89
|
+
case Types.VARCHAR:
|
90
|
+
case Types.LONGVARCHAR:
|
91
|
+
case Types.CLOB:
|
92
|
+
// TODO: CHAR(n CHAR)
|
93
|
+
columns.add(new ColumnDefinition(insertColumn.getName(),
|
94
|
+
ColumnDefinition.SQLT_CHR,
|
95
|
+
insertColumn.getSizeTypeParameter()));
|
96
|
+
break;
|
97
|
+
|
98
|
+
case Types.DECIMAL:
|
99
|
+
// sign + size
|
100
|
+
int size = 1 + insertColumn.getSizeTypeParameter();
|
101
|
+
if (insertColumn.getSizeTypeParameter() > 0) {
|
102
|
+
// decimal point
|
103
|
+
size += 1;
|
104
|
+
}
|
105
|
+
columns.add(new ColumnDefinition(insertColumn.getName(),
|
106
|
+
ColumnDefinition.SQLT_CHR,
|
107
|
+
size));
|
108
|
+
break;
|
109
|
+
|
110
|
+
case Types.DATE:
|
111
|
+
break;
|
112
|
+
|
113
|
+
case Types.TIMESTAMP:
|
114
|
+
String oracleFormat;
|
115
|
+
DateFormat javaFormat;
|
116
|
+
if (insertColumn.getSimpleTypeName().equals("DATE")) {
|
117
|
+
oracleFormat = "YYYY-MM-DD HH24:MI:SS";
|
118
|
+
javaFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
119
|
+
} else {
|
120
|
+
oracleFormat = "YYYY-MM-DD HH24:MI:SS.FF9";
|
121
|
+
javaFormat = new TimestampFormat("yyyy-MM-dd HH:mm:ss", 9);
|
122
|
+
}
|
123
|
+
formats[i] = javaFormat;
|
124
|
+
columns.add(new ColumnDefinition(insertColumn.getName(),
|
125
|
+
ColumnDefinition.SQLT_CHR,
|
126
|
+
javaFormat.format(dummy).length(),
|
127
|
+
oracleFormat));
|
128
|
+
break;
|
129
|
+
|
130
|
+
default:
|
131
|
+
throw new SQLException("Unsupported type : " + insertColumn.getSimpleTypeName());
|
132
|
+
}
|
133
|
+
|
134
|
+
}
|
135
|
+
|
136
|
+
rowSize = 0;
|
137
|
+
for (ColumnDefinition column : columns) {
|
138
|
+
rowSize += column.columnSize;
|
139
|
+
}
|
140
|
+
|
141
|
+
TableDefinition tableDefinition = new TableDefinition(table, charset.getId(), columns);
|
142
|
+
ociManager.open(ociKey, database, user, password, tableDefinition);
|
143
|
+
|
144
|
+
buffer = new RowBuffer(tableDefinition, Math.max(batchSize / rowSize, 8), charset.getJavaCharset());
|
145
|
+
}
|
146
|
+
|
147
|
+
@Override
|
148
|
+
public int getBatchWeight()
|
149
|
+
{
|
150
|
+
return batchWeight;
|
151
|
+
}
|
152
|
+
|
153
|
+
@Override
|
154
|
+
public void add() throws IOException, SQLException
|
155
|
+
{
|
156
|
+
batchWeight += rowSize;
|
157
|
+
if (buffer.isFull()) {
|
158
|
+
flush();
|
159
|
+
}
|
160
|
+
}
|
161
|
+
|
162
|
+
@Override
|
163
|
+
public void close() throws IOException, SQLException
|
164
|
+
{
|
165
|
+
ociManager.close(ociKey);
|
166
|
+
}
|
167
|
+
|
168
|
+
@Override
|
169
|
+
public void flush() throws IOException, SQLException
|
170
|
+
{
|
171
|
+
if (buffer.getRowCount() > 0) {
|
172
|
+
try {
|
173
|
+
logger.info(String.format("Loading %,d rows", buffer.getRowCount()));
|
174
|
+
|
175
|
+
long startTime = System.currentTimeMillis();
|
176
|
+
|
177
|
+
OCIWrapper oci = ociManager.get(ociKey);
|
178
|
+
synchronized (oci) {
|
179
|
+
oci.loadBuffer(buffer.getBuffer(), buffer.getRowCount());
|
180
|
+
}
|
181
|
+
|
182
|
+
totalRows += buffer.getRowCount();
|
183
|
+
double seconds = (System.currentTimeMillis() - startTime) / 1000.0;
|
184
|
+
logger.info(String.format("> %.2f seconds (loaded %,d rows in total)", seconds, totalRows));
|
185
|
+
|
186
|
+
} finally {
|
187
|
+
buffer.clear();
|
188
|
+
batchWeight = 0;
|
189
|
+
}
|
190
|
+
}
|
191
|
+
}
|
192
|
+
|
193
|
+
@Override
|
194
|
+
public void finish() throws IOException, SQLException
|
195
|
+
{
|
196
|
+
flush();
|
197
|
+
}
|
198
|
+
|
199
|
+
@Override
|
200
|
+
public void setNull(int sqlType) throws IOException, SQLException
|
201
|
+
{
|
202
|
+
buffer.addValue("");
|
203
|
+
}
|
204
|
+
|
205
|
+
@Override
|
206
|
+
public void setBoolean(boolean v) throws IOException, SQLException
|
207
|
+
{
|
208
|
+
throw new SQLException("Unsupported");
|
209
|
+
}
|
210
|
+
|
211
|
+
@Override
|
212
|
+
public void setByte(byte v) throws IOException, SQLException
|
213
|
+
{
|
214
|
+
throw new SQLException("Unsupported");
|
215
|
+
}
|
216
|
+
|
217
|
+
@Override
|
218
|
+
public void setShort(short v) throws IOException, SQLException
|
219
|
+
{
|
220
|
+
throw new SQLException("Unsupported");
|
221
|
+
}
|
222
|
+
|
223
|
+
@Override
|
224
|
+
public void setInt(int v) throws IOException, SQLException
|
225
|
+
{
|
226
|
+
buffer.addValue(v);
|
227
|
+
}
|
228
|
+
|
229
|
+
@Override
|
230
|
+
public void setLong(long v) throws IOException, SQLException
|
231
|
+
{
|
232
|
+
buffer.addValue(Long.toString(v));
|
233
|
+
}
|
234
|
+
|
235
|
+
@Override
|
236
|
+
public void setFloat(float v) throws IOException, SQLException
|
237
|
+
{
|
238
|
+
throw new SQLException("Unsupported");
|
239
|
+
}
|
240
|
+
|
241
|
+
@Override
|
242
|
+
public void setDouble(double v) throws IOException, SQLException
|
243
|
+
{
|
244
|
+
throw new SQLException("Unsupported");
|
245
|
+
}
|
246
|
+
|
247
|
+
@Override
|
248
|
+
public void setBigDecimal(BigDecimal v) throws IOException, SQLException
|
249
|
+
{
|
250
|
+
throw new SQLException("Unsupported");
|
251
|
+
}
|
252
|
+
|
253
|
+
@Override
|
254
|
+
public void setString(String v) throws IOException, SQLException
|
255
|
+
{
|
256
|
+
buffer.addValue(v);
|
257
|
+
}
|
258
|
+
|
259
|
+
@Override
|
260
|
+
public void setNString(String v) throws IOException, SQLException
|
261
|
+
{
|
262
|
+
throw new SQLException("Unsupported");
|
263
|
+
}
|
264
|
+
|
265
|
+
@Override
|
266
|
+
public void setBytes(byte[] v) throws IOException, SQLException
|
267
|
+
{
|
268
|
+
throw new SQLException("Unsupported");
|
269
|
+
}
|
270
|
+
|
271
|
+
@Override
|
272
|
+
public void setSqlDate(Date v, int sqlType) throws IOException, SQLException
|
273
|
+
{
|
274
|
+
throw new SQLException("Unsupported");
|
275
|
+
}
|
276
|
+
|
277
|
+
@Override
|
278
|
+
public void setSqlTime(Time v, int sqlType) throws IOException, SQLException
|
279
|
+
{
|
280
|
+
throw new SQLException("Unsupported");
|
281
|
+
}
|
282
|
+
|
283
|
+
@Override
|
284
|
+
public void setSqlTimestamp(Timestamp v, int sqlType) throws IOException, SQLException
|
285
|
+
{
|
286
|
+
buffer.addValue(formats[buffer.getCurrentColumn()].format(v));
|
287
|
+
}
|
288
|
+
|
289
|
+
}
|
@@ -1,8 +1,8 @@
|
|
1
|
-
package org.embulk.output.oracle;
|
2
|
-
|
3
|
-
public enum InsertMethod
|
4
|
-
{
|
5
|
-
normal,
|
6
|
-
direct,
|
7
|
-
oci;
|
8
|
-
}
|
1
|
+
package org.embulk.output.oracle;
|
2
|
+
|
3
|
+
public enum InsertMethod
|
4
|
+
{
|
5
|
+
normal,
|
6
|
+
direct,
|
7
|
+
oci;
|
8
|
+
}
|
@@ -1,19 +1,32 @@
|
|
1
|
-
package org.embulk.output.oracle;
|
2
|
-
|
3
|
-
import java.nio.charset.Charset;
|
4
|
-
|
5
|
-
public class OracleCharset
|
6
|
-
{
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
this.
|
15
|
-
this.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
1
|
+
package org.embulk.output.oracle;
|
2
|
+
|
3
|
+
import java.nio.charset.Charset;
|
4
|
+
|
5
|
+
public class OracleCharset
|
6
|
+
{
|
7
|
+
private final String name;
|
8
|
+
private final short id;
|
9
|
+
private final Charset javaCharset;
|
10
|
+
|
11
|
+
public OracleCharset(String name, short id, Charset javaCharset)
|
12
|
+
{
|
13
|
+
this.name = name;
|
14
|
+
this.id = id;
|
15
|
+
this.javaCharset = javaCharset;
|
16
|
+
}
|
17
|
+
|
18
|
+
public String getName()
|
19
|
+
{
|
20
|
+
return name;
|
21
|
+
}
|
22
|
+
|
23
|
+
public short getId()
|
24
|
+
{
|
25
|
+
return id;
|
26
|
+
}
|
27
|
+
|
28
|
+
public Charset getJavaCharset()
|
29
|
+
{
|
30
|
+
return javaCharset;
|
31
|
+
}
|
32
|
+
}
|