embulk-output-oracle 0.4.0 → 0.4.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.
- checksums.yaml +4 -4
- data/README.md +160 -160
- data/build.gradle +6 -6
- data/classpath/{embulk-output-jdbc-0.4.0.jar → embulk-output-jdbc-0.4.1.jar} +0 -0
- data/classpath/{embulk-output-oracle-0.4.0.jar → embulk-output-oracle-0.4.1.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 +153 -153
- data/src/main/java/org/embulk/output/oracle/DirectBatchInsert.java +290 -290
- data/src/main/java/org/embulk/output/oracle/InsertMethod.java +8 -8
- data/src/main/java/org/embulk/output/oracle/OracleCharset.java +32 -32
- data/src/main/java/org/embulk/output/oracle/OracleOutputConnection.java +165 -165
- 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 +105 -105
- 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 +124 -120
- data/src/test/java/org/embulk/output/oracle/EmptyConfigSource.java +105 -100
- data/src/test/java/org/embulk/output/oracle/OracleOutputPluginTest.java +38 -14
- data/src/test/java/org/embulk/output/oracle/OracleOutputPluginTestImpl.java +540 -484
- 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-direct-method.yml +26 -0
- data/src/test/resources/yml/test-insert-direct-empty.yml +25 -0
- data/src/test/resources/yml/{test-insert-oci-split.yml → test-insert-direct-oci-method-split.yml} +28 -28
- data/src/test/resources/yml/{test-insert-oci.yml → test-insert-direct-oci-method.yml} +28 -28
- data/src/test/resources/yml/test-insert-direct.yml +25 -26
- data/src/test/resources/yml/test-insert-empty.yml +27 -0
- data/src/test/resources/yml/test-insert.yml +27 -25
- data/src/test/resources/yml/test-replace-empty.yml +31 -0
- data/src/test/resources/yml/test-replace-long-name-multibyte.yml +31 -31
- data/src/test/resources/yml/test-replace-long-name.yml +31 -31
- data/src/test/resources/yml/test-replace.yml +31 -31
- data/src/test/resources/yml/test-string-timestamp.yml +28 -28
- data/src/test/resources/yml/test-url.yml +24 -24
- metadata +10 -6
@@ -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,32 +1,32 @@
|
|
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
|
-
}
|
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
|
+
}
|
@@ -1,165 +1,165 @@
|
|
1
|
-
package org.embulk.output.oracle;
|
2
|
-
|
3
|
-
import java.nio.charset.Charset;
|
4
|
-
import java.sql.Connection;
|
5
|
-
import java.sql.PreparedStatement;
|
6
|
-
import java.sql.ResultSet;
|
7
|
-
import java.sql.SQLException;
|
8
|
-
import java.sql.Statement;
|
9
|
-
import java.util.HashMap;
|
10
|
-
import java.util.Map;
|
11
|
-
|
12
|
-
import org.embulk.output.jdbc.JdbcOutputConnection;
|
13
|
-
import org.embulk.output.jdbc.JdbcColumn;
|
14
|
-
import org.embulk.output.jdbc.JdbcSchema;
|
15
|
-
|
16
|
-
public class OracleOutputConnection
|
17
|
-
extends JdbcOutputConnection
|
18
|
-
{
|
19
|
-
private static final Map<String, String> CHARSET_NAMES = new HashMap<String, String>();
|
20
|
-
static {
|
21
|
-
CHARSET_NAMES.put("JA16SJIS", "MS932");
|
22
|
-
CHARSET_NAMES.put("JA16SJISTILDE", "MS932");
|
23
|
-
CHARSET_NAMES.put("JA16EUC", "EUC-JP");
|
24
|
-
CHARSET_NAMES.put("JA16EUCTILDE", "EUC-JP");
|
25
|
-
CHARSET_NAMES.put("AL32UTF8", "UTF-8");
|
26
|
-
CHARSET_NAMES.put("UTF8", "UTF-8");
|
27
|
-
CHARSET_NAMES.put("AL16UTF16", "UTF-16");
|
28
|
-
}
|
29
|
-
|
30
|
-
private final boolean direct;
|
31
|
-
private OracleCharset charset;
|
32
|
-
|
33
|
-
public OracleOutputConnection(Connection connection, boolean autoCommit, boolean direct)
|
34
|
-
throws SQLException
|
35
|
-
{
|
36
|
-
super(connection, getSchema(connection));
|
37
|
-
connection.setAutoCommit(autoCommit);
|
38
|
-
|
39
|
-
this.direct = direct;
|
40
|
-
}
|
41
|
-
|
42
|
-
@Override
|
43
|
-
protected String buildColumnTypeName(JdbcColumn c)
|
44
|
-
{
|
45
|
-
switch(c.getSimpleTypeName()) {
|
46
|
-
case "BIGINT":
|
47
|
-
return "NUMBER(19,0)";
|
48
|
-
default:
|
49
|
-
return super.buildColumnTypeName(c);
|
50
|
-
}
|
51
|
-
}
|
52
|
-
|
53
|
-
@Override
|
54
|
-
protected void setSearchPath(String schema) throws SQLException {
|
55
|
-
// NOP
|
56
|
-
}
|
57
|
-
|
58
|
-
@Override
|
59
|
-
public void dropTableIfExists(String tableName) throws SQLException
|
60
|
-
{
|
61
|
-
if (tableExists(tableName)) {
|
62
|
-
dropTable(tableName);
|
63
|
-
}
|
64
|
-
}
|
65
|
-
|
66
|
-
@Override
|
67
|
-
protected void dropTableIfExists(Statement stmt, String tableName) throws SQLException {
|
68
|
-
if (tableExists(tableName)) {
|
69
|
-
dropTable(stmt, tableName);
|
70
|
-
}
|
71
|
-
}
|
72
|
-
|
73
|
-
@Override
|
74
|
-
public void createTableIfNotExists(String tableName, JdbcSchema schema) throws SQLException
|
75
|
-
{
|
76
|
-
if (!tableExists(tableName)) {
|
77
|
-
createTable(tableName, schema);
|
78
|
-
}
|
79
|
-
}
|
80
|
-
|
81
|
-
public void createTable(String tableName, JdbcSchema schema) throws SQLException
|
82
|
-
{
|
83
|
-
Statement stmt = connection.createStatement();
|
84
|
-
try {
|
85
|
-
String sql = buildCreateTableSql(tableName, schema);
|
86
|
-
executeUpdate(stmt, sql);
|
87
|
-
commitIfNecessary(connection);
|
88
|
-
} catch (SQLException ex) {
|
89
|
-
throw safeRollback(connection, ex);
|
90
|
-
} finally {
|
91
|
-
stmt.close();
|
92
|
-
}
|
93
|
-
}
|
94
|
-
|
95
|
-
protected String buildCreateTableSql(String name, JdbcSchema schema)
|
96
|
-
{
|
97
|
-
StringBuilder sb = new StringBuilder();
|
98
|
-
|
99
|
-
sb.append("CREATE TABLE ");
|
100
|
-
quoteIdentifierString(sb, name);
|
101
|
-
sb.append(buildCreateTableSchemaSql(schema));
|
102
|
-
return sb.toString();
|
103
|
-
}
|
104
|
-
|
105
|
-
private static String getSchema(Connection connection) throws SQLException
|
106
|
-
{
|
107
|
-
// Because old Oracle JDBC drivers don't support Connection#getSchema method.
|
108
|
-
String sql = "SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL";
|
109
|
-
try (Statement statement = connection.createStatement()) {
|
110
|
-
try (ResultSet resultSet = statement.executeQuery(sql)) {
|
111
|
-
if (resultSet.next()) {
|
112
|
-
return resultSet.getString(1);
|
113
|
-
}
|
114
|
-
throw new SQLException(String.format("Cannot get schema becase \"%s\" didn't return any value.", sql));
|
115
|
-
}
|
116
|
-
}
|
117
|
-
}
|
118
|
-
|
119
|
-
@Override
|
120
|
-
protected String buildPreparedInsertSql(String toTable, JdbcSchema toTableSchema) throws SQLException
|
121
|
-
{
|
122
|
-
String sql = super.buildPreparedInsertSql(toTable, toTableSchema);
|
123
|
-
if (direct) {
|
124
|
-
sql = sql.replaceAll("^INSERT ", "INSERT /*+ APPEND_VALUES */ ");
|
125
|
-
}
|
126
|
-
return sql;
|
127
|
-
}
|
128
|
-
|
129
|
-
@Override
|
130
|
-
public Charset getTableNameCharset() throws SQLException
|
131
|
-
{
|
132
|
-
return getOracleCharset().getJavaCharset();
|
133
|
-
}
|
134
|
-
|
135
|
-
public synchronized OracleCharset getOracleCharset() throws SQLException
|
136
|
-
{
|
137
|
-
if (charset == null) {
|
138
|
-
String charsetName = "UTF8";
|
139
|
-
try (Statement statement = connection.createStatement()) {
|
140
|
-
try (ResultSet resultSet = statement.executeQuery("SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'")) {
|
141
|
-
if (resultSet.next()) {
|
142
|
-
String nlsCharacterSet = resultSet.getString(1);
|
143
|
-
if (CHARSET_NAMES.containsKey(nlsCharacterSet)) {
|
144
|
-
charsetName = nlsCharacterSet;
|
145
|
-
}
|
146
|
-
}
|
147
|
-
}
|
148
|
-
}
|
149
|
-
|
150
|
-
try (PreparedStatement statement = connection.prepareStatement("SELECT NLS_CHARSET_ID(?) FROM DUAL")) {
|
151
|
-
statement.setString(1, charsetName);
|
152
|
-
try (ResultSet resultSet = statement.executeQuery()) {
|
153
|
-
if (!resultSet.next()) {
|
154
|
-
throw new SQLException("Unknown NLS_CHARACTERSET : " + charsetName);
|
155
|
-
}
|
156
|
-
|
157
|
-
charset = new OracleCharset(charsetName,
|
158
|
-
resultSet.getShort(1),
|
159
|
-
Charset.forName(CHARSET_NAMES.get(charsetName)));
|
160
|
-
}
|
161
|
-
}
|
162
|
-
}
|
163
|
-
return charset;
|
164
|
-
}
|
165
|
-
}
|
1
|
+
package org.embulk.output.oracle;
|
2
|
+
|
3
|
+
import java.nio.charset.Charset;
|
4
|
+
import java.sql.Connection;
|
5
|
+
import java.sql.PreparedStatement;
|
6
|
+
import java.sql.ResultSet;
|
7
|
+
import java.sql.SQLException;
|
8
|
+
import java.sql.Statement;
|
9
|
+
import java.util.HashMap;
|
10
|
+
import java.util.Map;
|
11
|
+
|
12
|
+
import org.embulk.output.jdbc.JdbcOutputConnection;
|
13
|
+
import org.embulk.output.jdbc.JdbcColumn;
|
14
|
+
import org.embulk.output.jdbc.JdbcSchema;
|
15
|
+
|
16
|
+
public class OracleOutputConnection
|
17
|
+
extends JdbcOutputConnection
|
18
|
+
{
|
19
|
+
private static final Map<String, String> CHARSET_NAMES = new HashMap<String, String>();
|
20
|
+
static {
|
21
|
+
CHARSET_NAMES.put("JA16SJIS", "MS932");
|
22
|
+
CHARSET_NAMES.put("JA16SJISTILDE", "MS932");
|
23
|
+
CHARSET_NAMES.put("JA16EUC", "EUC-JP");
|
24
|
+
CHARSET_NAMES.put("JA16EUCTILDE", "EUC-JP");
|
25
|
+
CHARSET_NAMES.put("AL32UTF8", "UTF-8");
|
26
|
+
CHARSET_NAMES.put("UTF8", "UTF-8");
|
27
|
+
CHARSET_NAMES.put("AL16UTF16", "UTF-16");
|
28
|
+
}
|
29
|
+
|
30
|
+
private final boolean direct;
|
31
|
+
private OracleCharset charset;
|
32
|
+
|
33
|
+
public OracleOutputConnection(Connection connection, boolean autoCommit, boolean direct)
|
34
|
+
throws SQLException
|
35
|
+
{
|
36
|
+
super(connection, getSchema(connection));
|
37
|
+
connection.setAutoCommit(autoCommit);
|
38
|
+
|
39
|
+
this.direct = direct;
|
40
|
+
}
|
41
|
+
|
42
|
+
@Override
|
43
|
+
protected String buildColumnTypeName(JdbcColumn c)
|
44
|
+
{
|
45
|
+
switch(c.getSimpleTypeName()) {
|
46
|
+
case "BIGINT":
|
47
|
+
return "NUMBER(19,0)";
|
48
|
+
default:
|
49
|
+
return super.buildColumnTypeName(c);
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
@Override
|
54
|
+
protected void setSearchPath(String schema) throws SQLException {
|
55
|
+
// NOP
|
56
|
+
}
|
57
|
+
|
58
|
+
@Override
|
59
|
+
public void dropTableIfExists(String tableName) throws SQLException
|
60
|
+
{
|
61
|
+
if (tableExists(tableName)) {
|
62
|
+
dropTable(tableName);
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
@Override
|
67
|
+
protected void dropTableIfExists(Statement stmt, String tableName) throws SQLException {
|
68
|
+
if (tableExists(tableName)) {
|
69
|
+
dropTable(stmt, tableName);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
@Override
|
74
|
+
public void createTableIfNotExists(String tableName, JdbcSchema schema) throws SQLException
|
75
|
+
{
|
76
|
+
if (!tableExists(tableName)) {
|
77
|
+
createTable(tableName, schema);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
public void createTable(String tableName, JdbcSchema schema) throws SQLException
|
82
|
+
{
|
83
|
+
Statement stmt = connection.createStatement();
|
84
|
+
try {
|
85
|
+
String sql = buildCreateTableSql(tableName, schema);
|
86
|
+
executeUpdate(stmt, sql);
|
87
|
+
commitIfNecessary(connection);
|
88
|
+
} catch (SQLException ex) {
|
89
|
+
throw safeRollback(connection, ex);
|
90
|
+
} finally {
|
91
|
+
stmt.close();
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
protected String buildCreateTableSql(String name, JdbcSchema schema)
|
96
|
+
{
|
97
|
+
StringBuilder sb = new StringBuilder();
|
98
|
+
|
99
|
+
sb.append("CREATE TABLE ");
|
100
|
+
quoteIdentifierString(sb, name);
|
101
|
+
sb.append(buildCreateTableSchemaSql(schema));
|
102
|
+
return sb.toString();
|
103
|
+
}
|
104
|
+
|
105
|
+
private static String getSchema(Connection connection) throws SQLException
|
106
|
+
{
|
107
|
+
// Because old Oracle JDBC drivers don't support Connection#getSchema method.
|
108
|
+
String sql = "SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL";
|
109
|
+
try (Statement statement = connection.createStatement()) {
|
110
|
+
try (ResultSet resultSet = statement.executeQuery(sql)) {
|
111
|
+
if (resultSet.next()) {
|
112
|
+
return resultSet.getString(1);
|
113
|
+
}
|
114
|
+
throw new SQLException(String.format("Cannot get schema becase \"%s\" didn't return any value.", sql));
|
115
|
+
}
|
116
|
+
}
|
117
|
+
}
|
118
|
+
|
119
|
+
@Override
|
120
|
+
protected String buildPreparedInsertSql(String toTable, JdbcSchema toTableSchema) throws SQLException
|
121
|
+
{
|
122
|
+
String sql = super.buildPreparedInsertSql(toTable, toTableSchema);
|
123
|
+
if (direct) {
|
124
|
+
sql = sql.replaceAll("^INSERT ", "INSERT /*+ APPEND_VALUES */ ");
|
125
|
+
}
|
126
|
+
return sql;
|
127
|
+
}
|
128
|
+
|
129
|
+
@Override
|
130
|
+
public Charset getTableNameCharset() throws SQLException
|
131
|
+
{
|
132
|
+
return getOracleCharset().getJavaCharset();
|
133
|
+
}
|
134
|
+
|
135
|
+
public synchronized OracleCharset getOracleCharset() throws SQLException
|
136
|
+
{
|
137
|
+
if (charset == null) {
|
138
|
+
String charsetName = "UTF8";
|
139
|
+
try (Statement statement = connection.createStatement()) {
|
140
|
+
try (ResultSet resultSet = statement.executeQuery("SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'")) {
|
141
|
+
if (resultSet.next()) {
|
142
|
+
String nlsCharacterSet = resultSet.getString(1);
|
143
|
+
if (CHARSET_NAMES.containsKey(nlsCharacterSet)) {
|
144
|
+
charsetName = nlsCharacterSet;
|
145
|
+
}
|
146
|
+
}
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
try (PreparedStatement statement = connection.prepareStatement("SELECT NLS_CHARSET_ID(?) FROM DUAL")) {
|
151
|
+
statement.setString(1, charsetName);
|
152
|
+
try (ResultSet resultSet = statement.executeQuery()) {
|
153
|
+
if (!resultSet.next()) {
|
154
|
+
throw new SQLException("Unknown NLS_CHARACTERSET : " + charsetName);
|
155
|
+
}
|
156
|
+
|
157
|
+
charset = new OracleCharset(charsetName,
|
158
|
+
resultSet.getShort(1),
|
159
|
+
Charset.forName(CHARSET_NAMES.get(charsetName)));
|
160
|
+
}
|
161
|
+
}
|
162
|
+
}
|
163
|
+
return charset;
|
164
|
+
}
|
165
|
+
}
|
@@ -1,49 +1,49 @@
|
|
1
|
-
package org.embulk.output.oracle;
|
2
|
-
|
3
|
-
import java.sql.Connection;
|
4
|
-
import java.sql.DriverManager;
|
5
|
-
import java.sql.SQLException;
|
6
|
-
import java.util.Properties;
|
7
|
-
|
8
|
-
import org.embulk.output.jdbc.JdbcOutputConnector;
|
9
|
-
|
10
|
-
public class OracleOutputConnector
|
11
|
-
implements JdbcOutputConnector
|
12
|
-
{
|
13
|
-
private final String url;
|
14
|
-
private final Properties properties;
|
15
|
-
private final boolean direct;
|
16
|
-
|
17
|
-
public OracleOutputConnector(String url, Properties properties, boolean direct)
|
18
|
-
{
|
19
|
-
try {
|
20
|
-
Class.forName("oracle.jdbc.OracleDriver");
|
21
|
-
} catch (Exception ex) {
|
22
|
-
throw new RuntimeException(ex);
|
23
|
-
}
|
24
|
-
this.url = url;
|
25
|
-
this.properties = properties;
|
26
|
-
this.direct = direct;
|
27
|
-
}
|
28
|
-
|
29
|
-
@Override
|
30
|
-
public OracleOutputConnection connect(boolean autoCommit) throws SQLException
|
31
|
-
{
|
32
|
-
Connection c = DriverManager.getConnection(url, properties);
|
33
|
-
if (c == null) {
|
34
|
-
// driver.connect returns null when url is "jdbc:mysql://...".
|
35
|
-
throw new SQLException("Invalid url : " + url);
|
36
|
-
}
|
37
|
-
|
38
|
-
try {
|
39
|
-
OracleOutputConnection con = new OracleOutputConnection(c, autoCommit, direct);
|
40
|
-
c = null;
|
41
|
-
return con;
|
42
|
-
|
43
|
-
} finally {
|
44
|
-
if (c != null) {
|
45
|
-
c.close();
|
46
|
-
}
|
47
|
-
}
|
48
|
-
}
|
49
|
-
}
|
1
|
+
package org.embulk.output.oracle;
|
2
|
+
|
3
|
+
import java.sql.Connection;
|
4
|
+
import java.sql.DriverManager;
|
5
|
+
import java.sql.SQLException;
|
6
|
+
import java.util.Properties;
|
7
|
+
|
8
|
+
import org.embulk.output.jdbc.JdbcOutputConnector;
|
9
|
+
|
10
|
+
public class OracleOutputConnector
|
11
|
+
implements JdbcOutputConnector
|
12
|
+
{
|
13
|
+
private final String url;
|
14
|
+
private final Properties properties;
|
15
|
+
private final boolean direct;
|
16
|
+
|
17
|
+
public OracleOutputConnector(String url, Properties properties, boolean direct)
|
18
|
+
{
|
19
|
+
try {
|
20
|
+
Class.forName("oracle.jdbc.OracleDriver");
|
21
|
+
} catch (Exception ex) {
|
22
|
+
throw new RuntimeException(ex);
|
23
|
+
}
|
24
|
+
this.url = url;
|
25
|
+
this.properties = properties;
|
26
|
+
this.direct = direct;
|
27
|
+
}
|
28
|
+
|
29
|
+
@Override
|
30
|
+
public OracleOutputConnection connect(boolean autoCommit) throws SQLException
|
31
|
+
{
|
32
|
+
Connection c = DriverManager.getConnection(url, properties);
|
33
|
+
if (c == null) {
|
34
|
+
// driver.connect returns null when url is "jdbc:mysql://...".
|
35
|
+
throw new SQLException("Invalid url : " + url);
|
36
|
+
}
|
37
|
+
|
38
|
+
try {
|
39
|
+
OracleOutputConnection con = new OracleOutputConnection(c, autoCommit, direct);
|
40
|
+
c = null;
|
41
|
+
return con;
|
42
|
+
|
43
|
+
} finally {
|
44
|
+
if (c != null) {
|
45
|
+
c.close();
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|