embulk-output-oracle 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +110 -110
  3. data/build.gradle +6 -6
  4. data/classpath/{embulk-output-jdbc-0.2.3.jar → embulk-output-jdbc-0.2.4.jar} +0 -0
  5. data/classpath/{embulk-output-oracle-0.2.3.jar → embulk-output-oracle-0.2.4.jar} +0 -0
  6. data/lib/embulk/output/oracle.rb +3 -3
  7. data/src/main/cpp/common/dir-path-load.cpp +424 -424
  8. data/src/main/cpp/common/dir-path-load.h +36 -36
  9. data/src/main/cpp/common/embulk-output-oracle.cpp +196 -196
  10. data/src/main/cpp/common/org_embulk_output_oracle_oci_OCI.h +77 -77
  11. data/src/main/cpp/linux/build.sh +21 -21
  12. data/src/main/cpp/win/build.bat +31 -31
  13. data/src/main/cpp/win/dllmain.cpp +25 -25
  14. data/src/main/cpp/win/embulk-output-oracle.sln +39 -39
  15. data/src/main/cpp/win/embulk-output-oracle.vcxproj +175 -175
  16. data/src/main/java/org/embulk/output/oracle/DirectBatchInsert.java +289 -289
  17. data/src/main/java/org/embulk/output/oracle/InsertMethod.java +8 -8
  18. data/src/main/java/org/embulk/output/oracle/OracleCharset.java +19 -19
  19. data/src/main/java/org/embulk/output/oracle/OracleOutputConnection.java +134 -134
  20. data/src/main/java/org/embulk/output/oracle/OracleOutputConnector.java +49 -49
  21. data/src/main/java/org/embulk/output/oracle/TimestampFormat.java +37 -37
  22. data/src/main/java/org/embulk/output/oracle/oci/ColumnDefinition.java +26 -26
  23. data/src/main/java/org/embulk/output/oracle/oci/OCI.java +139 -139
  24. data/src/main/java/org/embulk/output/oracle/oci/OCIManager.java +64 -64
  25. data/src/main/java/org/embulk/output/oracle/oci/OCIWrapper.java +96 -96
  26. data/src/main/java/org/embulk/output/oracle/oci/RowBuffer.java +99 -99
  27. data/src/main/java/org/embulk/output/oracle/oci/TableDefinition.java +24 -24
  28. data/src/main/java/org/embulk/output/oracle/setter/OracleColumnSetterFactory.java +31 -31
  29. data/src/test/cpp/common/embulk-output-oracle-test.cpp +69 -69
  30. data/src/test/cpp/linux/build.sh +19 -19
  31. data/src/test/cpp/win/build.bat +28 -28
  32. data/src/test/cpp/win/embulk-output-oracle-test.vcxproj +154 -154
  33. data/src/test/java/org/embulk/input/filesplit/LocalFileSplitInputPlugin.java +187 -187
  34. data/src/test/java/org/embulk/input/filesplit/PartialFile.java +49 -49
  35. data/src/test/java/org/embulk/input/filesplit/PartialFileInputStream.java +154 -154
  36. data/src/test/java/org/embulk/output/oracle/ChildFirstClassLoader.java +42 -42
  37. data/src/test/java/org/embulk/output/oracle/EmbulkPluginTester.java +120 -120
  38. data/src/test/java/org/embulk/output/oracle/EmptyConfigSource.java +100 -100
  39. data/src/test/java/org/embulk/output/oracle/OracleOutputPluginTest.java +161 -161
  40. data/src/test/java/org/embulk/output/oracle/OracleOutputPluginTestImpl.java +413 -413
  41. data/src/test/java/org/embulk/output/oracle/TimestampFormatTest.java +57 -57
  42. data/src/test/resources/data/test1/test1.csv +3 -3
  43. data/src/test/resources/yml/test-insert-direct.yml +26 -26
  44. data/src/test/resources/yml/test-insert-oci-split.yml +26 -26
  45. data/src/test/resources/yml/test-insert-oci.yml +26 -26
  46. data/src/test/resources/yml/test-insert.yml +25 -25
  47. data/src/test/resources/yml/test-replace-long-name.yml +25 -25
  48. data/src/test/resources/yml/test-replace.yml +25 -25
  49. data/src/test/resources/yml/test-url.yml +24 -24
  50. metadata +4 -4
@@ -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,19 @@
1
- package org.embulk.output.oracle;
2
-
3
- import java.nio.charset.Charset;
4
-
5
- public class OracleCharset
6
- {
7
- public final String charsetName;
8
- public final short charstId;
9
- public final Charset javaCharset;
10
-
11
-
12
- public OracleCharset(String charsetName, short charstId, Charset javaCharset)
13
- {
14
- this.charsetName = charsetName;
15
- this.charstId = charstId;
16
- this.javaCharset = javaCharset;
17
- }
18
-
19
- }
1
+ package org.embulk.output.oracle;
2
+
3
+ import java.nio.charset.Charset;
4
+
5
+ public class OracleCharset
6
+ {
7
+ public final String charsetName;
8
+ public final short charstId;
9
+ public final Charset javaCharset;
10
+
11
+
12
+ public OracleCharset(String charsetName, short charstId, Charset javaCharset)
13
+ {
14
+ this.charsetName = charsetName;
15
+ this.charstId = charstId;
16
+ this.javaCharset = javaCharset;
17
+ }
18
+
19
+ }
@@ -1,134 +1,134 @@
1
- package org.embulk.output.oracle;
2
-
3
-
4
- import java.nio.charset.Charset;
5
- import java.sql.Connection;
6
- import java.sql.PreparedStatement;
7
- import java.sql.ResultSet;
8
- import java.sql.SQLException;
9
- import java.sql.Statement;
10
- import java.util.HashMap;
11
- import java.util.Map;
12
-
13
- import org.embulk.output.jdbc.JdbcOutputConnection;
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", "Shift_JIS");
22
- CHARSET_NAMES.put("JA16SJISTILDE", "Shift_JIS");
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
-
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 convertTypeName(String typeName)
44
- {
45
- switch(typeName) {
46
- case "BIGINT":
47
- return "NUMBER(19,0)";
48
- default:
49
- return typeName;
50
- }
51
- }
52
-
53
- @Override
54
- protected void setSearchPath(String schema) throws SQLException {
55
- // NOP
56
- }
57
-
58
-
59
- @Override
60
- public void dropTableIfExists(String tableName) throws SQLException
61
- {
62
- if (tableExists(tableName)) {
63
- dropTable(tableName);
64
- }
65
- }
66
-
67
- @Override
68
- protected void dropTableIfExists(Statement stmt, String tableName) throws SQLException {
69
- if (tableExists(tableName)) {
70
- dropTable(stmt, tableName);
71
- }
72
- }
73
-
74
- @Override
75
- public void createTableIfNotExists(String tableName, JdbcSchema schema) throws SQLException
76
- {
77
- if (!tableExists(tableName)) {
78
- createTable(tableName, schema);
79
- }
80
- }
81
-
82
- private static String getSchema(Connection connection) throws SQLException
83
- {
84
- // Because old Oracle JDBC drivers don't support Connection#getSchema method.
85
- String sql = "SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL";
86
- try (Statement statement = connection.createStatement()) {
87
- try (ResultSet resultSet = statement.executeQuery(sql)) {
88
- if (resultSet.next()) {
89
- return resultSet.getString(1);
90
- }
91
- throw new SQLException(String.format("Cannot get schema becase \"%s\" didn't return any value.", sql));
92
- }
93
- }
94
- }
95
-
96
- @Override
97
- protected String buildPrepareInsertSql(String toTable, JdbcSchema toTableSchema) throws SQLException
98
- {
99
- String sql = super.buildPrepareInsertSql(toTable, toTableSchema);
100
- if (direct) {
101
- sql = sql.replaceAll("^INSERT ", "INSERT /*+ APPEND_VALUES */ ");
102
- }
103
- return sql;
104
- }
105
-
106
- public OracleCharset getCharset() throws SQLException
107
- {
108
- String charsetName = "UTF8";
109
- try (Statement statement = connection.createStatement()) {
110
- try (ResultSet resultSet = statement.executeQuery("SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'")) {
111
- if (resultSet.next()) {
112
- String nlsCharacterSet = resultSet.getString(1);
113
- if (CHARSET_NAMES.containsKey(nlsCharacterSet)) {
114
- charsetName = nlsCharacterSet;
115
- }
116
- }
117
- }
118
- }
119
-
120
- try (PreparedStatement statement = connection.prepareStatement("SELECT NLS_CHARSET_ID(?) FROM DUAL")) {
121
- statement.setString(1, charsetName);
122
- try (ResultSet resultSet = statement.executeQuery()) {
123
- if (!resultSet.next()) {
124
- throw new SQLException("Unknown NLS_CHARACTERSET : " + charsetName);
125
- }
126
-
127
- return new OracleCharset(charsetName,
128
- resultSet.getShort(1),
129
- Charset.forName(CHARSET_NAMES.get(charsetName)));
130
- }
131
- }
132
- }
133
-
134
- }
1
+ package org.embulk.output.oracle;
2
+
3
+
4
+ import java.nio.charset.Charset;
5
+ import java.sql.Connection;
6
+ import java.sql.PreparedStatement;
7
+ import java.sql.ResultSet;
8
+ import java.sql.SQLException;
9
+ import java.sql.Statement;
10
+ import java.util.HashMap;
11
+ import java.util.Map;
12
+
13
+ import org.embulk.output.jdbc.JdbcOutputConnection;
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", "Shift_JIS");
22
+ CHARSET_NAMES.put("JA16SJISTILDE", "Shift_JIS");
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
+
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 convertTypeName(String typeName)
44
+ {
45
+ switch(typeName) {
46
+ case "BIGINT":
47
+ return "NUMBER(19,0)";
48
+ default:
49
+ return typeName;
50
+ }
51
+ }
52
+
53
+ @Override
54
+ protected void setSearchPath(String schema) throws SQLException {
55
+ // NOP
56
+ }
57
+
58
+
59
+ @Override
60
+ public void dropTableIfExists(String tableName) throws SQLException
61
+ {
62
+ if (tableExists(tableName)) {
63
+ dropTable(tableName);
64
+ }
65
+ }
66
+
67
+ @Override
68
+ protected void dropTableIfExists(Statement stmt, String tableName) throws SQLException {
69
+ if (tableExists(tableName)) {
70
+ dropTable(stmt, tableName);
71
+ }
72
+ }
73
+
74
+ @Override
75
+ public void createTableIfNotExists(String tableName, JdbcSchema schema) throws SQLException
76
+ {
77
+ if (!tableExists(tableName)) {
78
+ createTable(tableName, schema);
79
+ }
80
+ }
81
+
82
+ private static String getSchema(Connection connection) throws SQLException
83
+ {
84
+ // Because old Oracle JDBC drivers don't support Connection#getSchema method.
85
+ String sql = "SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL";
86
+ try (Statement statement = connection.createStatement()) {
87
+ try (ResultSet resultSet = statement.executeQuery(sql)) {
88
+ if (resultSet.next()) {
89
+ return resultSet.getString(1);
90
+ }
91
+ throw new SQLException(String.format("Cannot get schema becase \"%s\" didn't return any value.", sql));
92
+ }
93
+ }
94
+ }
95
+
96
+ @Override
97
+ protected String buildPrepareInsertSql(String toTable, JdbcSchema toTableSchema) throws SQLException
98
+ {
99
+ String sql = super.buildPrepareInsertSql(toTable, toTableSchema);
100
+ if (direct) {
101
+ sql = sql.replaceAll("^INSERT ", "INSERT /*+ APPEND_VALUES */ ");
102
+ }
103
+ return sql;
104
+ }
105
+
106
+ public OracleCharset getCharset() throws SQLException
107
+ {
108
+ String charsetName = "UTF8";
109
+ try (Statement statement = connection.createStatement()) {
110
+ try (ResultSet resultSet = statement.executeQuery("SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'")) {
111
+ if (resultSet.next()) {
112
+ String nlsCharacterSet = resultSet.getString(1);
113
+ if (CHARSET_NAMES.containsKey(nlsCharacterSet)) {
114
+ charsetName = nlsCharacterSet;
115
+ }
116
+ }
117
+ }
118
+ }
119
+
120
+ try (PreparedStatement statement = connection.prepareStatement("SELECT NLS_CHARSET_ID(?) FROM DUAL")) {
121
+ statement.setString(1, charsetName);
122
+ try (ResultSet resultSet = statement.executeQuery()) {
123
+ if (!resultSet.next()) {
124
+ throw new SQLException("Unknown NLS_CHARACTERSET : " + charsetName);
125
+ }
126
+
127
+ return new OracleCharset(charsetName,
128
+ resultSet.getShort(1),
129
+ Charset.forName(CHARSET_NAMES.get(charsetName)));
130
+ }
131
+ }
132
+ }
133
+
134
+ }
@@ -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
+ }
@@ -1,37 +1,37 @@
1
- package org.embulk.output.oracle;
2
-
3
- import java.sql.Timestamp;
4
- import java.text.FieldPosition;
5
- import java.text.SimpleDateFormat;
6
- import java.util.Date;
7
-
8
-
9
- public class TimestampFormat extends SimpleDateFormat
10
- {
11
-
12
- private final int scale;
13
-
14
- public TimestampFormat(String pattern, int scale)
15
- {
16
- super(pattern);
17
-
18
- this.scale = scale;
19
- }
20
-
21
- @Override
22
- public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos)
23
- {
24
- StringBuffer buffer = super.format(date, toAppendTo, pos);
25
- if (scale > 0) {
26
- buffer.append('.');
27
- String nanos = Integer.toString(((Timestamp)date).getNanos());
28
- int zeros = Math.min(scale, 9 - nanos.length());
29
- for (int i = 0; i < zeros; i++) {
30
- buffer.append('0');
31
- }
32
- buffer.append(nanos.substring(0, scale - zeros));
33
- }
34
- return buffer;
35
- }
36
-
37
- }
1
+ package org.embulk.output.oracle;
2
+
3
+ import java.sql.Timestamp;
4
+ import java.text.FieldPosition;
5
+ import java.text.SimpleDateFormat;
6
+ import java.util.Date;
7
+
8
+
9
+ public class TimestampFormat extends SimpleDateFormat
10
+ {
11
+
12
+ private final int scale;
13
+
14
+ public TimestampFormat(String pattern, int scale)
15
+ {
16
+ super(pattern);
17
+
18
+ this.scale = scale;
19
+ }
20
+
21
+ @Override
22
+ public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos)
23
+ {
24
+ StringBuffer buffer = super.format(date, toAppendTo, pos);
25
+ if (scale > 0) {
26
+ buffer.append('.');
27
+ String nanos = Integer.toString(((Timestamp)date).getNanos());
28
+ int zeros = Math.min(scale, 9 - nanos.length());
29
+ for (int i = 0; i < zeros; i++) {
30
+ buffer.append('0');
31
+ }
32
+ buffer.append(nanos.substring(0, scale - zeros));
33
+ }
34
+ return buffer;
35
+ }
36
+
37
+ }