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,36 +1,36 @@
|
|
1
|
-
#include <oci.h>
|
2
|
-
|
3
|
-
|
4
|
-
typedef struct _EMBULK_OUTPUT_ORACLE_OCI_CONTEXT {
|
5
|
-
OCIEnv *env;
|
6
|
-
OCIDirPathCtx *dp;
|
7
|
-
OCISvcCtx *svc;
|
8
|
-
OCIError *err;
|
9
|
-
OCIDirPathColArray *dpca;
|
10
|
-
OCIDirPathStream *dpstr;
|
11
|
-
char *buffer;
|
12
|
-
FILE *csv;
|
13
|
-
char message[512];
|
14
|
-
} EMBULK_OUTPUT_ORACLE_OCI_CONTEXT;
|
15
|
-
|
16
|
-
typedef struct _EMBULK_OUTPUT_ORACLE_OCI_COL_DEF {
|
17
|
-
const char *name;
|
18
|
-
ub4 type;
|
19
|
-
ub4 size;
|
20
|
-
const char *dateFormat;
|
21
|
-
} EMBULK_OUTPUT_ORACLE_OCI_COL_DEF;
|
22
|
-
|
23
|
-
|
24
|
-
int embulk_output_oracle_prepareDirPathCtx(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context, const char *dbName, const char *userName, const char *password);
|
25
|
-
|
26
|
-
int embulk_output_oracle_prepareDirPathStream(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context, const char *tableName, short charsetId, EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs);
|
27
|
-
|
28
|
-
int embulk_output_oracle_loadBuffer(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context, EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs, const char *buffer, int rowCount);
|
29
|
-
|
30
|
-
int embulk_output_oracle_loadCSV(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context, EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs, const char *csvFileName);
|
31
|
-
|
32
|
-
int embulk_output_oracle_commitDirPath(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context);
|
33
|
-
|
34
|
-
int embulk_output_oracle_rollbackDirPath(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context);
|
35
|
-
|
36
|
-
void embulk_output_oracle_freeDirPathHandles(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context);
|
1
|
+
#include <oci.h>
|
2
|
+
|
3
|
+
|
4
|
+
typedef struct _EMBULK_OUTPUT_ORACLE_OCI_CONTEXT {
|
5
|
+
OCIEnv *env;
|
6
|
+
OCIDirPathCtx *dp;
|
7
|
+
OCISvcCtx *svc;
|
8
|
+
OCIError *err;
|
9
|
+
OCIDirPathColArray *dpca;
|
10
|
+
OCIDirPathStream *dpstr;
|
11
|
+
char *buffer;
|
12
|
+
FILE *csv;
|
13
|
+
char message[512];
|
14
|
+
} EMBULK_OUTPUT_ORACLE_OCI_CONTEXT;
|
15
|
+
|
16
|
+
typedef struct _EMBULK_OUTPUT_ORACLE_OCI_COL_DEF {
|
17
|
+
const char *name;
|
18
|
+
ub4 type;
|
19
|
+
ub4 size;
|
20
|
+
const char *dateFormat;
|
21
|
+
} EMBULK_OUTPUT_ORACLE_OCI_COL_DEF;
|
22
|
+
|
23
|
+
|
24
|
+
int embulk_output_oracle_prepareDirPathCtx(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context, const char *dbName, const char *userName, const char *password);
|
25
|
+
|
26
|
+
int embulk_output_oracle_prepareDirPathStream(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context, const char *tableName, short charsetId, EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs);
|
27
|
+
|
28
|
+
int embulk_output_oracle_loadBuffer(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context, EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs, const char *buffer, int rowCount);
|
29
|
+
|
30
|
+
int embulk_output_oracle_loadCSV(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context, EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs, const char *csvFileName);
|
31
|
+
|
32
|
+
int embulk_output_oracle_commitDirPath(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context);
|
33
|
+
|
34
|
+
int embulk_output_oracle_rollbackDirPath(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context);
|
35
|
+
|
36
|
+
void embulk_output_oracle_freeDirPathHandles(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context);
|
@@ -1,196 +1,196 @@
|
|
1
|
-
#include "org_embulk_output_oracle_oci_OCI.h"
|
2
|
-
#include "dir-path-load.h"
|
3
|
-
|
4
|
-
|
5
|
-
static EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *toContext(JNIEnv *env, jbyteArray addrs)
|
6
|
-
{
|
7
|
-
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context;
|
8
|
-
env->GetByteArrayRegion(addrs, 0, sizeof(context), (jbyte*)&context);
|
9
|
-
return context;
|
10
|
-
}
|
11
|
-
|
12
|
-
static EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *toColDefs(JNIEnv *env, jbyteArray addrs)
|
13
|
-
{
|
14
|
-
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs;
|
15
|
-
env->GetByteArrayRegion(addrs, sizeof(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT*), sizeof(colDefs), (jbyte*)&colDefs);
|
16
|
-
return colDefs;
|
17
|
-
}
|
18
|
-
|
19
|
-
JNIEXPORT jbyteArray JNICALL Java_org_embulk_output_oracle_oci_OCI_createContext
|
20
|
-
(JNIEnv *env, jobject)
|
21
|
-
{
|
22
|
-
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = new EMBULK_OUTPUT_ORACLE_OCI_CONTEXT();
|
23
|
-
jbyteArray addrs = env->NewByteArray(sizeof(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT*) + sizeof(EMBULK_OUTPUT_ORACLE_OCI_COL_DEF*));
|
24
|
-
env->SetByteArrayRegion(addrs, 0, sizeof(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT*), (jbyte*)&context);
|
25
|
-
return addrs;
|
26
|
-
}
|
27
|
-
|
28
|
-
|
29
|
-
JNIEXPORT jbyteArray JNICALL Java_org_embulk_output_oracle_oci_OCI_getLasetMessage
|
30
|
-
(JNIEnv *env, jobject, jbyteArray addrs)
|
31
|
-
{
|
32
|
-
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
33
|
-
jbyteArray message = env->NewByteArray(sizeof(context->message));
|
34
|
-
env->SetByteArrayRegion(message, 0, sizeof(context->message), (jbyte*)context->message);
|
35
|
-
return message;
|
36
|
-
}
|
37
|
-
|
38
|
-
|
39
|
-
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_open
|
40
|
-
(JNIEnv *env, jobject, jbyteArray addrs, jstring dbNameString, jstring userNameString, jstring passwordString)
|
41
|
-
{
|
42
|
-
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
43
|
-
|
44
|
-
const char *dbName = env->GetStringUTFChars(dbNameString, NULL);
|
45
|
-
const char *userName = env->GetStringUTFChars(userNameString, NULL);
|
46
|
-
const char *password = env->GetStringUTFChars(passwordString, NULL);
|
47
|
-
|
48
|
-
int result = embulk_output_oracle_prepareDirPathCtx(context, dbName, userName, password);
|
49
|
-
|
50
|
-
env->ReleaseStringUTFChars(dbNameString, dbName);
|
51
|
-
env->ReleaseStringUTFChars(userNameString, userName);
|
52
|
-
env->ReleaseStringUTFChars(passwordString, password);
|
53
|
-
|
54
|
-
if (result != OCI_SUCCESS) {
|
55
|
-
return JNI_FALSE;
|
56
|
-
}
|
57
|
-
|
58
|
-
return JNI_TRUE;
|
59
|
-
}
|
60
|
-
|
61
|
-
|
62
|
-
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_prepareLoad
|
63
|
-
(JNIEnv *env, jobject, jbyteArray addrs, jobject table)
|
64
|
-
{
|
65
|
-
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
66
|
-
|
67
|
-
jclass tableClass = env->FindClass("Lorg/embulk/output/oracle/oci/TableDefinition;");
|
68
|
-
jfieldID tableNameFieldID = env->GetFieldID(tableClass, "tableName", "Ljava/lang/String;");
|
69
|
-
jstring tableNameString = (jstring)env->GetObjectField(table, tableNameFieldID);
|
70
|
-
const char *tableName = env->GetStringUTFChars(tableNameString, NULL);
|
71
|
-
|
72
|
-
jfieldID charsetIdFieldID = env->GetFieldID(tableClass, "charsetId", "S");
|
73
|
-
short charsetId = env->GetShortField(table, charsetIdFieldID);
|
74
|
-
|
75
|
-
jfieldID columnsFieldID = env->GetFieldID(tableClass, "columns", "[Lorg/embulk/output/oracle/oci/ColumnDefinition;");
|
76
|
-
jobjectArray columnArray = (jobjectArray)env->GetObjectField(table, columnsFieldID);
|
77
|
-
int columnCount = env->GetArrayLength(columnArray);
|
78
|
-
|
79
|
-
jclass columnClass = env->FindClass("Lorg/embulk/output/oracle/oci/ColumnDefinition;");
|
80
|
-
jfieldID columnNameFieldID = env->GetFieldID(columnClass, "columnName", "Ljava/lang/String;");
|
81
|
-
jfieldID columnTypeFieldID = env->GetFieldID(columnClass, "columnType", "I");
|
82
|
-
jfieldID columnSizeFieldID = env->GetFieldID(columnClass, "columnSize", "I");
|
83
|
-
jfieldID columnDateFormatID = env->GetFieldID(columnClass, "columnDateFormat", "Ljava/lang/String;");
|
84
|
-
|
85
|
-
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs = new EMBULK_OUTPUT_ORACLE_OCI_COL_DEF[columnCount + 1];
|
86
|
-
for (int i = 0; i < columnCount; i++) {
|
87
|
-
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF &colDef = colDefs[i];
|
88
|
-
|
89
|
-
jobject column = env->GetObjectArrayElement(columnArray, i);
|
90
|
-
jstring columnName = (jstring)env->GetObjectField(column, columnNameFieldID);
|
91
|
-
colDefs[i].name = env->GetStringUTFChars(columnName, NULL);
|
92
|
-
colDefs[i].type = env->GetIntField(column, columnTypeFieldID);
|
93
|
-
colDefs[i].size = env->GetIntField(column, columnSizeFieldID);
|
94
|
-
|
95
|
-
jstring columnDateFormat = (jstring)env->GetObjectField(column, columnDateFormatID);
|
96
|
-
if (columnDateFormat != NULL) {
|
97
|
-
colDef.dateFormat = env->GetStringUTFChars(columnDateFormat, NULL);
|
98
|
-
} else {
|
99
|
-
colDef.dateFormat = NULL;
|
100
|
-
}
|
101
|
-
|
102
|
-
}
|
103
|
-
|
104
|
-
colDefs[columnCount].name = NULL;
|
105
|
-
colDefs[columnCount].type = 0;
|
106
|
-
colDefs[columnCount].size = 0;
|
107
|
-
colDefs[columnCount].dateFormat = NULL;
|
108
|
-
|
109
|
-
int result = embulk_output_oracle_prepareDirPathStream(context, tableName, charsetId, colDefs);
|
110
|
-
|
111
|
-
for (int i = 0; i < columnCount; i++) {
|
112
|
-
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF &colDef = colDefs[i];
|
113
|
-
jobject column = env->GetObjectArrayElement(columnArray, i);
|
114
|
-
|
115
|
-
jstring columnName = (jstring)env->GetObjectField(column, columnNameFieldID);
|
116
|
-
env->ReleaseStringUTFChars(columnName, colDef.name);
|
117
|
-
colDef.name = NULL;
|
118
|
-
|
119
|
-
if (colDef.dateFormat != NULL) {
|
120
|
-
jstring columnDateFormat = (jstring)env->GetObjectField(column, columnDateFormatID);
|
121
|
-
env->ReleaseStringUTFChars(columnDateFormat, colDef.dateFormat);
|
122
|
-
colDef.dateFormat = NULL;
|
123
|
-
}
|
124
|
-
}
|
125
|
-
|
126
|
-
env->SetByteArrayRegion(addrs, sizeof(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT*), sizeof(colDefs), (jbyte*)&colDefs);
|
127
|
-
|
128
|
-
env->ReleaseStringUTFChars(tableNameString, tableName);
|
129
|
-
|
130
|
-
if (result != OCI_SUCCESS) {
|
131
|
-
return JNI_FALSE;
|
132
|
-
}
|
133
|
-
|
134
|
-
return JNI_TRUE;
|
135
|
-
}
|
136
|
-
|
137
|
-
|
138
|
-
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_loadBuffer
|
139
|
-
(JNIEnv *env, jobject, jbyteArray addrs, jbyteArray buffer, jint rowCount)
|
140
|
-
{
|
141
|
-
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
142
|
-
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs = toColDefs(env, addrs);
|
143
|
-
|
144
|
-
jbyte *bytes = env->GetByteArrayElements(buffer, NULL);
|
145
|
-
|
146
|
-
int result = embulk_output_oracle_loadBuffer(context, colDefs, (const char*)bytes, rowCount);
|
147
|
-
|
148
|
-
env->ReleaseByteArrayElements(buffer, bytes, JNI_ABORT);
|
149
|
-
|
150
|
-
if (result != OCI_SUCCESS) {
|
151
|
-
return JNI_FALSE;
|
152
|
-
}
|
153
|
-
|
154
|
-
return JNI_TRUE;
|
155
|
-
}
|
156
|
-
|
157
|
-
|
158
|
-
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_commit
|
159
|
-
(JNIEnv *env, jobject, jbyteArray addrs)
|
160
|
-
{
|
161
|
-
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
162
|
-
if (embulk_output_oracle_commitDirPath(context) !=OCI_SUCCESS) {
|
163
|
-
return JNI_FALSE;
|
164
|
-
}
|
165
|
-
|
166
|
-
return JNI_TRUE;
|
167
|
-
}
|
168
|
-
|
169
|
-
|
170
|
-
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_rollback
|
171
|
-
(JNIEnv *env, jobject, jbyteArray addrs)
|
172
|
-
{
|
173
|
-
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
174
|
-
if (embulk_output_oracle_rollbackDirPath(context) !=OCI_SUCCESS) {
|
175
|
-
return JNI_FALSE;
|
176
|
-
}
|
177
|
-
|
178
|
-
return JNI_TRUE;
|
179
|
-
}
|
180
|
-
|
181
|
-
|
182
|
-
JNIEXPORT void JNICALL Java_org_embulk_output_oracle_oci_OCI_close
|
183
|
-
(JNIEnv *env, jobject, jbyteArray addrs)
|
184
|
-
{
|
185
|
-
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
186
|
-
if (context != NULL) {
|
187
|
-
embulk_output_oracle_freeDirPathHandles(context);
|
188
|
-
delete context;
|
189
|
-
}
|
190
|
-
|
191
|
-
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs = toColDefs(env, addrs);
|
192
|
-
if (colDefs != NULL) {
|
193
|
-
delete[] colDefs;
|
194
|
-
}
|
195
|
-
|
196
|
-
}
|
1
|
+
#include "org_embulk_output_oracle_oci_OCI.h"
|
2
|
+
#include "dir-path-load.h"
|
3
|
+
|
4
|
+
|
5
|
+
static EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *toContext(JNIEnv *env, jbyteArray addrs)
|
6
|
+
{
|
7
|
+
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context;
|
8
|
+
env->GetByteArrayRegion(addrs, 0, sizeof(context), (jbyte*)&context);
|
9
|
+
return context;
|
10
|
+
}
|
11
|
+
|
12
|
+
static EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *toColDefs(JNIEnv *env, jbyteArray addrs)
|
13
|
+
{
|
14
|
+
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs;
|
15
|
+
env->GetByteArrayRegion(addrs, sizeof(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT*), sizeof(colDefs), (jbyte*)&colDefs);
|
16
|
+
return colDefs;
|
17
|
+
}
|
18
|
+
|
19
|
+
JNIEXPORT jbyteArray JNICALL Java_org_embulk_output_oracle_oci_OCI_createContext
|
20
|
+
(JNIEnv *env, jobject)
|
21
|
+
{
|
22
|
+
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = new EMBULK_OUTPUT_ORACLE_OCI_CONTEXT();
|
23
|
+
jbyteArray addrs = env->NewByteArray(sizeof(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT*) + sizeof(EMBULK_OUTPUT_ORACLE_OCI_COL_DEF*));
|
24
|
+
env->SetByteArrayRegion(addrs, 0, sizeof(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT*), (jbyte*)&context);
|
25
|
+
return addrs;
|
26
|
+
}
|
27
|
+
|
28
|
+
|
29
|
+
JNIEXPORT jbyteArray JNICALL Java_org_embulk_output_oracle_oci_OCI_getLasetMessage
|
30
|
+
(JNIEnv *env, jobject, jbyteArray addrs)
|
31
|
+
{
|
32
|
+
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
33
|
+
jbyteArray message = env->NewByteArray(sizeof(context->message));
|
34
|
+
env->SetByteArrayRegion(message, 0, sizeof(context->message), (jbyte*)context->message);
|
35
|
+
return message;
|
36
|
+
}
|
37
|
+
|
38
|
+
|
39
|
+
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_open
|
40
|
+
(JNIEnv *env, jobject, jbyteArray addrs, jstring dbNameString, jstring userNameString, jstring passwordString)
|
41
|
+
{
|
42
|
+
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
43
|
+
|
44
|
+
const char *dbName = env->GetStringUTFChars(dbNameString, NULL);
|
45
|
+
const char *userName = env->GetStringUTFChars(userNameString, NULL);
|
46
|
+
const char *password = env->GetStringUTFChars(passwordString, NULL);
|
47
|
+
|
48
|
+
int result = embulk_output_oracle_prepareDirPathCtx(context, dbName, userName, password);
|
49
|
+
|
50
|
+
env->ReleaseStringUTFChars(dbNameString, dbName);
|
51
|
+
env->ReleaseStringUTFChars(userNameString, userName);
|
52
|
+
env->ReleaseStringUTFChars(passwordString, password);
|
53
|
+
|
54
|
+
if (result != OCI_SUCCESS) {
|
55
|
+
return JNI_FALSE;
|
56
|
+
}
|
57
|
+
|
58
|
+
return JNI_TRUE;
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_prepareLoad
|
63
|
+
(JNIEnv *env, jobject, jbyteArray addrs, jobject table)
|
64
|
+
{
|
65
|
+
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
66
|
+
|
67
|
+
jclass tableClass = env->FindClass("Lorg/embulk/output/oracle/oci/TableDefinition;");
|
68
|
+
jfieldID tableNameFieldID = env->GetFieldID(tableClass, "tableName", "Ljava/lang/String;");
|
69
|
+
jstring tableNameString = (jstring)env->GetObjectField(table, tableNameFieldID);
|
70
|
+
const char *tableName = env->GetStringUTFChars(tableNameString, NULL);
|
71
|
+
|
72
|
+
jfieldID charsetIdFieldID = env->GetFieldID(tableClass, "charsetId", "S");
|
73
|
+
short charsetId = env->GetShortField(table, charsetIdFieldID);
|
74
|
+
|
75
|
+
jfieldID columnsFieldID = env->GetFieldID(tableClass, "columns", "[Lorg/embulk/output/oracle/oci/ColumnDefinition;");
|
76
|
+
jobjectArray columnArray = (jobjectArray)env->GetObjectField(table, columnsFieldID);
|
77
|
+
int columnCount = env->GetArrayLength(columnArray);
|
78
|
+
|
79
|
+
jclass columnClass = env->FindClass("Lorg/embulk/output/oracle/oci/ColumnDefinition;");
|
80
|
+
jfieldID columnNameFieldID = env->GetFieldID(columnClass, "columnName", "Ljava/lang/String;");
|
81
|
+
jfieldID columnTypeFieldID = env->GetFieldID(columnClass, "columnType", "I");
|
82
|
+
jfieldID columnSizeFieldID = env->GetFieldID(columnClass, "columnSize", "I");
|
83
|
+
jfieldID columnDateFormatID = env->GetFieldID(columnClass, "columnDateFormat", "Ljava/lang/String;");
|
84
|
+
|
85
|
+
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs = new EMBULK_OUTPUT_ORACLE_OCI_COL_DEF[columnCount + 1];
|
86
|
+
for (int i = 0; i < columnCount; i++) {
|
87
|
+
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF &colDef = colDefs[i];
|
88
|
+
|
89
|
+
jobject column = env->GetObjectArrayElement(columnArray, i);
|
90
|
+
jstring columnName = (jstring)env->GetObjectField(column, columnNameFieldID);
|
91
|
+
colDefs[i].name = env->GetStringUTFChars(columnName, NULL);
|
92
|
+
colDefs[i].type = env->GetIntField(column, columnTypeFieldID);
|
93
|
+
colDefs[i].size = env->GetIntField(column, columnSizeFieldID);
|
94
|
+
|
95
|
+
jstring columnDateFormat = (jstring)env->GetObjectField(column, columnDateFormatID);
|
96
|
+
if (columnDateFormat != NULL) {
|
97
|
+
colDef.dateFormat = env->GetStringUTFChars(columnDateFormat, NULL);
|
98
|
+
} else {
|
99
|
+
colDef.dateFormat = NULL;
|
100
|
+
}
|
101
|
+
|
102
|
+
}
|
103
|
+
|
104
|
+
colDefs[columnCount].name = NULL;
|
105
|
+
colDefs[columnCount].type = 0;
|
106
|
+
colDefs[columnCount].size = 0;
|
107
|
+
colDefs[columnCount].dateFormat = NULL;
|
108
|
+
|
109
|
+
int result = embulk_output_oracle_prepareDirPathStream(context, tableName, charsetId, colDefs);
|
110
|
+
|
111
|
+
for (int i = 0; i < columnCount; i++) {
|
112
|
+
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF &colDef = colDefs[i];
|
113
|
+
jobject column = env->GetObjectArrayElement(columnArray, i);
|
114
|
+
|
115
|
+
jstring columnName = (jstring)env->GetObjectField(column, columnNameFieldID);
|
116
|
+
env->ReleaseStringUTFChars(columnName, colDef.name);
|
117
|
+
colDef.name = NULL;
|
118
|
+
|
119
|
+
if (colDef.dateFormat != NULL) {
|
120
|
+
jstring columnDateFormat = (jstring)env->GetObjectField(column, columnDateFormatID);
|
121
|
+
env->ReleaseStringUTFChars(columnDateFormat, colDef.dateFormat);
|
122
|
+
colDef.dateFormat = NULL;
|
123
|
+
}
|
124
|
+
}
|
125
|
+
|
126
|
+
env->SetByteArrayRegion(addrs, sizeof(EMBULK_OUTPUT_ORACLE_OCI_CONTEXT*), sizeof(colDefs), (jbyte*)&colDefs);
|
127
|
+
|
128
|
+
env->ReleaseStringUTFChars(tableNameString, tableName);
|
129
|
+
|
130
|
+
if (result != OCI_SUCCESS) {
|
131
|
+
return JNI_FALSE;
|
132
|
+
}
|
133
|
+
|
134
|
+
return JNI_TRUE;
|
135
|
+
}
|
136
|
+
|
137
|
+
|
138
|
+
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_loadBuffer
|
139
|
+
(JNIEnv *env, jobject, jbyteArray addrs, jbyteArray buffer, jint rowCount)
|
140
|
+
{
|
141
|
+
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
142
|
+
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs = toColDefs(env, addrs);
|
143
|
+
|
144
|
+
jbyte *bytes = env->GetByteArrayElements(buffer, NULL);
|
145
|
+
|
146
|
+
int result = embulk_output_oracle_loadBuffer(context, colDefs, (const char*)bytes, rowCount);
|
147
|
+
|
148
|
+
env->ReleaseByteArrayElements(buffer, bytes, JNI_ABORT);
|
149
|
+
|
150
|
+
if (result != OCI_SUCCESS) {
|
151
|
+
return JNI_FALSE;
|
152
|
+
}
|
153
|
+
|
154
|
+
return JNI_TRUE;
|
155
|
+
}
|
156
|
+
|
157
|
+
|
158
|
+
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_commit
|
159
|
+
(JNIEnv *env, jobject, jbyteArray addrs)
|
160
|
+
{
|
161
|
+
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
162
|
+
if (embulk_output_oracle_commitDirPath(context) !=OCI_SUCCESS) {
|
163
|
+
return JNI_FALSE;
|
164
|
+
}
|
165
|
+
|
166
|
+
return JNI_TRUE;
|
167
|
+
}
|
168
|
+
|
169
|
+
|
170
|
+
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_rollback
|
171
|
+
(JNIEnv *env, jobject, jbyteArray addrs)
|
172
|
+
{
|
173
|
+
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
174
|
+
if (embulk_output_oracle_rollbackDirPath(context) !=OCI_SUCCESS) {
|
175
|
+
return JNI_FALSE;
|
176
|
+
}
|
177
|
+
|
178
|
+
return JNI_TRUE;
|
179
|
+
}
|
180
|
+
|
181
|
+
|
182
|
+
JNIEXPORT void JNICALL Java_org_embulk_output_oracle_oci_OCI_close
|
183
|
+
(JNIEnv *env, jobject, jbyteArray addrs)
|
184
|
+
{
|
185
|
+
EMBULK_OUTPUT_ORACLE_OCI_CONTEXT *context = toContext(env, addrs);
|
186
|
+
if (context != NULL) {
|
187
|
+
embulk_output_oracle_freeDirPathHandles(context);
|
188
|
+
delete context;
|
189
|
+
}
|
190
|
+
|
191
|
+
EMBULK_OUTPUT_ORACLE_OCI_COL_DEF *colDefs = toColDefs(env, addrs);
|
192
|
+
if (colDefs != NULL) {
|
193
|
+
delete[] colDefs;
|
194
|
+
}
|
195
|
+
|
196
|
+
}
|
@@ -1,77 +1,77 @@
|
|
1
|
-
/* DO NOT EDIT THIS FILE - it is machine generated */
|
2
|
-
#include <jni.h>
|
3
|
-
/* Header for class org_embulk_output_oracle_oci_OCI */
|
4
|
-
|
5
|
-
#ifndef _Included_org_embulk_output_oracle_oci_OCI
|
6
|
-
#define _Included_org_embulk_output_oracle_oci_OCI
|
7
|
-
#ifdef __cplusplus
|
8
|
-
extern "C" {
|
9
|
-
#endif
|
10
|
-
/*
|
11
|
-
* Class: org_embulk_output_oracle_oci_OCI
|
12
|
-
* Method: createContext
|
13
|
-
* Signature: ()[B
|
14
|
-
*/
|
15
|
-
JNIEXPORT jbyteArray JNICALL Java_org_embulk_output_oracle_oci_OCI_createContext
|
16
|
-
(JNIEnv *, jobject);
|
17
|
-
|
18
|
-
/*
|
19
|
-
* Class: org_embulk_output_oracle_oci_OCI
|
20
|
-
* Method: getLasetMessage
|
21
|
-
* Signature: ([B)[B
|
22
|
-
*/
|
23
|
-
JNIEXPORT jbyteArray JNICALL Java_org_embulk_output_oracle_oci_OCI_getLasetMessage
|
24
|
-
(JNIEnv *, jobject, jbyteArray);
|
25
|
-
|
26
|
-
/*
|
27
|
-
* Class: org_embulk_output_oracle_oci_OCI
|
28
|
-
* Method: open
|
29
|
-
* Signature: ([BLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
|
30
|
-
*/
|
31
|
-
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_open
|
32
|
-
(JNIEnv *, jobject, jbyteArray, jstring, jstring, jstring);
|
33
|
-
|
34
|
-
/*
|
35
|
-
* Class: org_embulk_output_oracle_oci_OCI
|
36
|
-
* Method: prepareLoad
|
37
|
-
* Signature: ([BLorg/embulk/output/oracle/oci/TableDefinition;)Z
|
38
|
-
*/
|
39
|
-
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_prepareLoad
|
40
|
-
(JNIEnv *, jobject, jbyteArray, jobject);
|
41
|
-
|
42
|
-
/*
|
43
|
-
* Class: org_embulk_output_oracle_oci_OCI
|
44
|
-
* Method: loadBuffer
|
45
|
-
* Signature: ([B[BI)Z
|
46
|
-
*/
|
47
|
-
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_loadBuffer
|
48
|
-
(JNIEnv *, jobject, jbyteArray, jbyteArray, jint);
|
49
|
-
|
50
|
-
/*
|
51
|
-
* Class: org_embulk_output_oracle_oci_OCI
|
52
|
-
* Method: commit
|
53
|
-
* Signature: ([B)Z
|
54
|
-
*/
|
55
|
-
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_commit
|
56
|
-
(JNIEnv *, jobject, jbyteArray);
|
57
|
-
|
58
|
-
/*
|
59
|
-
* Class: org_embulk_output_oracle_oci_OCI
|
60
|
-
* Method: rollback
|
61
|
-
* Signature: ([B)Z
|
62
|
-
*/
|
63
|
-
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_rollback
|
64
|
-
(JNIEnv *, jobject, jbyteArray);
|
65
|
-
|
66
|
-
/*
|
67
|
-
* Class: org_embulk_output_oracle_oci_OCI
|
68
|
-
* Method: close
|
69
|
-
* Signature: ([B)V
|
70
|
-
*/
|
71
|
-
JNIEXPORT void JNICALL Java_org_embulk_output_oracle_oci_OCI_close
|
72
|
-
(JNIEnv *, jobject, jbyteArray);
|
73
|
-
|
74
|
-
#ifdef __cplusplus
|
75
|
-
}
|
76
|
-
#endif
|
77
|
-
#endif
|
1
|
+
/* DO NOT EDIT THIS FILE - it is machine generated */
|
2
|
+
#include <jni.h>
|
3
|
+
/* Header for class org_embulk_output_oracle_oci_OCI */
|
4
|
+
|
5
|
+
#ifndef _Included_org_embulk_output_oracle_oci_OCI
|
6
|
+
#define _Included_org_embulk_output_oracle_oci_OCI
|
7
|
+
#ifdef __cplusplus
|
8
|
+
extern "C" {
|
9
|
+
#endif
|
10
|
+
/*
|
11
|
+
* Class: org_embulk_output_oracle_oci_OCI
|
12
|
+
* Method: createContext
|
13
|
+
* Signature: ()[B
|
14
|
+
*/
|
15
|
+
JNIEXPORT jbyteArray JNICALL Java_org_embulk_output_oracle_oci_OCI_createContext
|
16
|
+
(JNIEnv *, jobject);
|
17
|
+
|
18
|
+
/*
|
19
|
+
* Class: org_embulk_output_oracle_oci_OCI
|
20
|
+
* Method: getLasetMessage
|
21
|
+
* Signature: ([B)[B
|
22
|
+
*/
|
23
|
+
JNIEXPORT jbyteArray JNICALL Java_org_embulk_output_oracle_oci_OCI_getLasetMessage
|
24
|
+
(JNIEnv *, jobject, jbyteArray);
|
25
|
+
|
26
|
+
/*
|
27
|
+
* Class: org_embulk_output_oracle_oci_OCI
|
28
|
+
* Method: open
|
29
|
+
* Signature: ([BLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
|
30
|
+
*/
|
31
|
+
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_open
|
32
|
+
(JNIEnv *, jobject, jbyteArray, jstring, jstring, jstring);
|
33
|
+
|
34
|
+
/*
|
35
|
+
* Class: org_embulk_output_oracle_oci_OCI
|
36
|
+
* Method: prepareLoad
|
37
|
+
* Signature: ([BLorg/embulk/output/oracle/oci/TableDefinition;)Z
|
38
|
+
*/
|
39
|
+
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_prepareLoad
|
40
|
+
(JNIEnv *, jobject, jbyteArray, jobject);
|
41
|
+
|
42
|
+
/*
|
43
|
+
* Class: org_embulk_output_oracle_oci_OCI
|
44
|
+
* Method: loadBuffer
|
45
|
+
* Signature: ([B[BI)Z
|
46
|
+
*/
|
47
|
+
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_loadBuffer
|
48
|
+
(JNIEnv *, jobject, jbyteArray, jbyteArray, jint);
|
49
|
+
|
50
|
+
/*
|
51
|
+
* Class: org_embulk_output_oracle_oci_OCI
|
52
|
+
* Method: commit
|
53
|
+
* Signature: ([B)Z
|
54
|
+
*/
|
55
|
+
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_commit
|
56
|
+
(JNIEnv *, jobject, jbyteArray);
|
57
|
+
|
58
|
+
/*
|
59
|
+
* Class: org_embulk_output_oracle_oci_OCI
|
60
|
+
* Method: rollback
|
61
|
+
* Signature: ([B)Z
|
62
|
+
*/
|
63
|
+
JNIEXPORT jboolean JNICALL Java_org_embulk_output_oracle_oci_OCI_rollback
|
64
|
+
(JNIEnv *, jobject, jbyteArray);
|
65
|
+
|
66
|
+
/*
|
67
|
+
* Class: org_embulk_output_oracle_oci_OCI
|
68
|
+
* Method: close
|
69
|
+
* Signature: ([B)V
|
70
|
+
*/
|
71
|
+
JNIEXPORT void JNICALL Java_org_embulk_output_oracle_oci_OCI_close
|
72
|
+
(JNIEnv *, jobject, jbyteArray);
|
73
|
+
|
74
|
+
#ifdef __cplusplus
|
75
|
+
}
|
76
|
+
#endif
|
77
|
+
#endif
|
data/src/main/cpp/linux/build.sh
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
# gcc, g++ and Oracle Instant Client Basic and SDK are requred.
|
2
|
-
#
|
3
|
-
# ln libocci.so.x.x libocci.so
|
4
|
-
# ln libclntsh.so.x.x libclntsh.so
|
5
|
-
#
|
6
|
-
|
7
|
-
if [ "$JAVA_HOME" = "" ]
|
8
|
-
then
|
9
|
-
echo "You should set the environment variable 'JAVA_HOME'."
|
10
|
-
exit 1
|
11
|
-
fi
|
12
|
-
|
13
|
-
if [ "$OCI_PATH" = "" ]
|
14
|
-
then
|
15
|
-
echo "You should set the environment variable 'OCI_PATH'."
|
16
|
-
exit 1
|
17
|
-
fi
|
18
|
-
|
19
|
-
mkdir -p ../../../../lib/embulk/linux_x64
|
20
|
-
|
21
|
-
gcc -fPIC -I. -I"$JAVA_HOME/include" -I"$OCI_PATH/sdk/include" -I../../../main/cpp/common -L"$OCI_PATH" -shared ../../../main/cpp/common/embulk-output-oracle.cpp ../../../main/cpp/common/dir-path-load.cpp -locci -lclntsh -lstdc++ -o ../../../../lib/embulk/linux_x64/libembulk-output-oracle.so
|
1
|
+
# gcc, g++ and Oracle Instant Client Basic and SDK are requred.
|
2
|
+
#
|
3
|
+
# ln libocci.so.x.x libocci.so
|
4
|
+
# ln libclntsh.so.x.x libclntsh.so
|
5
|
+
#
|
6
|
+
|
7
|
+
if [ "$JAVA_HOME" = "" ]
|
8
|
+
then
|
9
|
+
echo "You should set the environment variable 'JAVA_HOME'."
|
10
|
+
exit 1
|
11
|
+
fi
|
12
|
+
|
13
|
+
if [ "$OCI_PATH" = "" ]
|
14
|
+
then
|
15
|
+
echo "You should set the environment variable 'OCI_PATH'."
|
16
|
+
exit 1
|
17
|
+
fi
|
18
|
+
|
19
|
+
mkdir -p ../../../../lib/embulk/linux_x64
|
20
|
+
|
21
|
+
gcc -fPIC -I. -I"$JAVA_HOME/include" -I"$OCI_PATH/sdk/include" -I../../../main/cpp/common -L"$OCI_PATH" -shared ../../../main/cpp/common/embulk-output-oracle.cpp ../../../main/cpp/common/dir-path-load.cpp -locci -lclntsh -lstdc++ -o ../../../../lib/embulk/linux_x64/libembulk-output-oracle.so
|