embulk-output-oracle 0.6.3 → 0.6.4
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 +43 -0
- data/build.gradle +2 -2
- data/classpath/{embulk-output-jdbc-0.6.3.jar → embulk-output-jdbc-0.6.4.jar} +0 -0
- data/classpath/embulk-output-oracle-0.6.4.jar +0 -0
- data/lib/embulk/native/x86_64-linux/libembulk-output-oracle-oci.so +0 -0
- data/lib/embulk/native/x86_64-windows/embulk-output-oracle-oci.dll +0 -0
- data/src/main/cpp/common/embulk-output-oracle-oci.cpp +27 -0
- data/src/main/cpp/linux/build.sh +15 -0
- data/src/main/cpp/windows/build.bat +26 -0
- data/src/main/cpp/windows/dllmain.cpp +25 -0
- data/src/main/cpp/windows/embulk-output-oracle-oci.sln +20 -0
- data/src/main/cpp/windows/embulk-output-oracle-oci.vcxproj +171 -0
- data/src/main/java/org/embulk/output/oracle/DirectBatchInsert.java +5 -39
- data/src/main/java/org/embulk/output/oracle/oci/BulkOCI.java +15 -0
- data/src/main/java/org/embulk/output/oracle/oci/OCI.java +1 -0
- data/src/main/java/org/embulk/output/oracle/oci/OCIManager.java +3 -2
- data/src/main/java/org/embulk/output/oracle/oci/OCIWrapper.java +103 -37
- data/src/main/java/org/embulk/output/oracle/oci/PrimitiveBulkOCI.java +47 -0
- data/src/main/java/org/embulk/output/oracle/oci/RowBuffer.java +50 -46
- data/src/main/java/org/embulk/output/oracle/oci/TableDefinition.java +9 -0
- data/src/test/java/org/embulk/output/oracle/OracleOutputPluginTest.java +622 -133
- data/src/test/resources/oracle/data/test3/test3.csv +9999 -0
- data/src/test/resources/oracle/yml/test-insert-direct-oci-method-large.yml +29 -0
- metadata +19 -8
- data/classpath/embulk-output-oracle-0.6.3.jar +0 -0
- data/src/test/java/org/embulk/output/oracle/OracleOutputPluginTestImpl.java +0 -620
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1074dcbca44c9b5e6cc3d80da2eea5b40538bb28
|
4
|
+
data.tar.gz: e560931b3c0dcb3851b4b330d06ed0a01103b34a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 919fc3fc46e0ded5c4e0983459659bde509898506f546932b4b5029fe45ef617279ed0895b24e7352936574090f2097ba1cc2d9dc2dbc4a05d6a98a58b1d65a4
|
7
|
+
data.tar.gz: 1ab155c13bf488e439f3951b31d257f75ee226d1f4b1352212147107d835cf270a8f2859fd8cd09269f88e16798929898d26a4a0af1eb5a87df3191a9a45a31f
|
data/README.md
CHANGED
@@ -63,6 +63,9 @@ It requires Oracle JDBC driver too, but the version 12 driver doesn't work (the
|
|
63
63
|
"oci" means direct path insert using OCI(Oracle Call Interface). It is fastest.
|
64
64
|
It requires both Oracle JDBC driver and Oracle Instant Client (version 12.1.0.2.0).
|
65
65
|
You must set the library loading path to the OCI library.
|
66
|
+
And it uses an optional native library (embulk-output-oracle-oci) written in cpp to improve performance furthermore.
|
67
|
+
Not only the source codes of the library, but also the built libraries for Windows(x64) and Linux(x64) have bean committed.
|
68
|
+
|
66
69
|
|
67
70
|
### Supported types
|
68
71
|
|
@@ -123,6 +126,46 @@ out:
|
|
123
126
|
$ ./gradlew gem
|
124
127
|
```
|
125
128
|
|
129
|
+
#### Build environment for native library
|
130
|
+
|
131
|
+
For Windows (x64)
|
132
|
+
|
133
|
+
(1) Install Microsoft Visual Studio (only 2010 is tested).
|
134
|
+
|
135
|
+
(2) Install Oracle Instant Client SDK 11.1.0.6.0 for Microsoft Windows (x64).
|
136
|
+
|
137
|
+
(3) Set environment variables.
|
138
|
+
|
139
|
+
* OCI\_SDK_PATH ("sdk" directory of Oracle Instant Client)
|
140
|
+
|
141
|
+
(4) Open src/main/cpp/win/embulk-output-oracle-oci.sln by Visual Studio and build.
|
142
|
+
|
143
|
+
For Windows command line, the following are needed in addition to (1) - (4).
|
144
|
+
|
145
|
+
(5) Set environment variables.
|
146
|
+
|
147
|
+
* MSVC_PATH (ex. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC)
|
148
|
+
* MSSDK_PATH (ex. C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A)
|
149
|
+
|
150
|
+
(6) Execute src/main/cpp/win/build.bat .
|
151
|
+
|
152
|
+
|
153
|
+
For Linux (x64) (only Ubuntu Server 14.04 is tested)
|
154
|
+
|
155
|
+
(1) Install gcc and g++ .
|
156
|
+
|
157
|
+
(2) Install Oracle Instant Client Basic and SDK 11.1.0.6.0 for Linux (x64).
|
158
|
+
|
159
|
+
(3) Create symbolic links of OCI libraries.
|
160
|
+
|
161
|
+
ln -s libocci.so.11.1 libocci.so
|
162
|
+
ln -s libclntsh.so.11.1 libclntsh.so
|
163
|
+
|
164
|
+
(4) Set environment variables.
|
165
|
+
|
166
|
+
* OCI_PATH (the directory of Oracle Instant Client Basic and the parent of the "sdk" directory)
|
167
|
+
|
168
|
+
(5) Execute src/main/cpp/linux/build.sh .
|
126
169
|
|
127
170
|
***
|
128
171
|
<img src="https://www.yourkit.com/images/yklogo.png" alt="YourKit"/> is used to improve performance of embulk-output-oracle.
|
data/build.gradle
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
[compileTestJava]*.options*.encoding = 'UTF-8'
|
2
|
-
|
3
1
|
dependencies {
|
4
2
|
compile project(':embulk-output-jdbc')
|
3
|
+
|
5
4
|
testCompile 'org.embulk:embulk-standards:0.8.8'
|
6
5
|
testCompile files('../embulk-output-jdbc/build/classes/test/')
|
6
|
+
testCompile files('driver/ojdbc7.jar')
|
7
7
|
}
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#include <occi.h>
|
2
|
+
|
3
|
+
|
4
|
+
extern "C"
|
5
|
+
#ifdef WIN32
|
6
|
+
__declspec(dllexport)
|
7
|
+
#endif
|
8
|
+
sword embulk_output_oracle_OCIDirPathColArrayEntriesSet(
|
9
|
+
OCIDirPathColArray *dpca,
|
10
|
+
OCIError *errhp,
|
11
|
+
ub2 columnCount,
|
12
|
+
ub4 rowCount,
|
13
|
+
ub1* data,
|
14
|
+
ub2* sizes)
|
15
|
+
{
|
16
|
+
for (ub4 row = 0; row < rowCount; row++) {
|
17
|
+
for (ub2 column = 0; column < columnCount; column++) {
|
18
|
+
ub2 size = *sizes++;
|
19
|
+
sword result = OCIDirPathColArrayEntrySet(dpca, errhp, row, column, data, size, OCI_DIRPATH_COL_COMPLETE);
|
20
|
+
if (result != OCI_SUCCESS) {
|
21
|
+
return result;
|
22
|
+
}
|
23
|
+
data += size;
|
24
|
+
}
|
25
|
+
}
|
26
|
+
return OCI_SUCCESS;
|
27
|
+
}
|
@@ -0,0 +1,15 @@
|
|
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 [ "$OCI_PATH" = "" ]
|
8
|
+
then
|
9
|
+
echo "You should set the environment variable 'OCI_PATH'."
|
10
|
+
exit 1
|
11
|
+
fi
|
12
|
+
|
13
|
+
mkdir -p ../../../../lib/embulk/native/x86_64-linux
|
14
|
+
|
15
|
+
gcc -fPIC -I. -I"$OCI_PATH/sdk/include" -I../../../main/cpp/common -L"$OCI_PATH" -shared ../../../main/cpp/common/embulk-output-oracle-oci.cpp -locci -lclntsh -lstdc++ -o ../../../../lib/embulk/native/x86_64-linux/libembulk-output-oracle-oci.so
|
@@ -0,0 +1,26 @@
|
|
1
|
+
@ECHO OFF
|
2
|
+
|
3
|
+
REM Visual Studio and Oracle Instant Client SDK are requred.
|
4
|
+
REM You should set the environment variable 'PATH' to CL.exe(x86_amd64) of Visual Studio.
|
5
|
+
|
6
|
+
IF "%OCI_SDK_PATH%" == "" (
|
7
|
+
ECHO "You should set the environment variable 'OCI_SDK_PATH'."
|
8
|
+
EXIT /B 1
|
9
|
+
)
|
10
|
+
|
11
|
+
IF "%MSVC_PATH%" == "" (
|
12
|
+
ECHO "You should set the environment variable 'MSVC_PATH'."
|
13
|
+
ECHO "For example : SET MSVC_PATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC"
|
14
|
+
EXIT /B 1
|
15
|
+
)
|
16
|
+
|
17
|
+
IF "%MSSDK_PATH%" == "" (
|
18
|
+
ECHO "You should set the environment variable 'MSSDK_PATH'."
|
19
|
+
ECHO "For example : SET MSSDK_PATH=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A"
|
20
|
+
EXIT /B 1
|
21
|
+
)
|
22
|
+
|
23
|
+
|
24
|
+
MKDIR ..\..\..\..\lib\embulk\native\x86_64-windows
|
25
|
+
|
26
|
+
CL /I"%MSSDK_PATH%\Include" /I"%MSVC_PATH%\include" /I"%OCI_SDK_PATH%\include" /Zi /nologo /W3 /WX- /O2 /Oi /GL /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "EMBULKOUTPUTORACLE_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Gd /errorReport:queue ..\common\embulk-output-oracle-oci.cpp dllmain.cpp /link /LIBPATH:"%MSVC_PATH%\lib\amd64" /LIBPATH:"%MSSDK_PATH%\Lib\x64" /LIBPATH:"%OCI_SDK_PATH%\lib\msvc" /INCREMENTAL:NO /NOLOGO /LIBPATH:"%OCI_SDK_PATH%\lib\msvc" /OUT:"..\..\..\..\lib\embulk\native\x86_64-windows\embulk-output-oracle-oci.dll" /DLL "oci.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X64 /ERRORREPORT:QUEUE
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include <SDKDDKVer.h>
|
4
|
+
|
5
|
+
#define WIN32_LEAN_AND_MEAN
|
6
|
+
|
7
|
+
#include <windows.h>
|
8
|
+
|
9
|
+
|
10
|
+
BOOL APIENTRY DllMain( HMODULE hModule,
|
11
|
+
DWORD ul_reason_for_call,
|
12
|
+
LPVOID lpReserved
|
13
|
+
)
|
14
|
+
{
|
15
|
+
switch (ul_reason_for_call)
|
16
|
+
{
|
17
|
+
case DLL_PROCESS_ATTACH:
|
18
|
+
case DLL_THREAD_ATTACH:
|
19
|
+
case DLL_THREAD_DETACH:
|
20
|
+
case DLL_PROCESS_DETACH:
|
21
|
+
break;
|
22
|
+
}
|
23
|
+
return TRUE;
|
24
|
+
}
|
25
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
Microsoft Visual Studio Solution File, Format Version 11.00
|
3
|
+
# Visual Studio 2010
|
4
|
+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embulk-output-oracle-oci", "embulk-output-oracle-oci.vcxproj", "{2284D821-588E-419F-8790-F5BCC12F93BD}"
|
5
|
+
EndProject
|
6
|
+
Global
|
7
|
+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
8
|
+
Debug|x64 = Debug|x64
|
9
|
+
Release|x64 = Release|x64
|
10
|
+
EndGlobalSection
|
11
|
+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
12
|
+
{2284D821-588E-419F-8790-F5BCC12F93BD}.Debug|x64.ActiveCfg = Debug|x64
|
13
|
+
{2284D821-588E-419F-8790-F5BCC12F93BD}.Debug|x64.Build.0 = Debug|x64
|
14
|
+
{2284D821-588E-419F-8790-F5BCC12F93BD}.Release|x64.ActiveCfg = Release|x64
|
15
|
+
{2284D821-588E-419F-8790-F5BCC12F93BD}.Release|x64.Build.0 = Release|x64
|
16
|
+
EndGlobalSection
|
17
|
+
GlobalSection(SolutionProperties) = preSolution
|
18
|
+
HideSolutionNode = FALSE
|
19
|
+
EndGlobalSection
|
20
|
+
EndGlobal
|
@@ -0,0 +1,171 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
3
|
+
<ItemGroup Label="ProjectConfigurations">
|
4
|
+
<ProjectConfiguration Include="Debug|Win32">
|
5
|
+
<Configuration>Debug</Configuration>
|
6
|
+
<Platform>Win32</Platform>
|
7
|
+
</ProjectConfiguration>
|
8
|
+
<ProjectConfiguration Include="Debug|x64">
|
9
|
+
<Configuration>Debug</Configuration>
|
10
|
+
<Platform>x64</Platform>
|
11
|
+
</ProjectConfiguration>
|
12
|
+
<ProjectConfiguration Include="Release|Win32">
|
13
|
+
<Configuration>Release</Configuration>
|
14
|
+
<Platform>Win32</Platform>
|
15
|
+
</ProjectConfiguration>
|
16
|
+
<ProjectConfiguration Include="Release|x64">
|
17
|
+
<Configuration>Release</Configuration>
|
18
|
+
<Platform>x64</Platform>
|
19
|
+
</ProjectConfiguration>
|
20
|
+
</ItemGroup>
|
21
|
+
<PropertyGroup Label="Globals">
|
22
|
+
<ProjectGuid>{2284D821-588E-419F-8790-F5BCC12F93BD}</ProjectGuid>
|
23
|
+
<Keyword>Win32Proj</Keyword>
|
24
|
+
<RootNamespace>embulkoutputoracle</RootNamespace>
|
25
|
+
<ProjectName>embulk-output-oracle-oci</ProjectName>
|
26
|
+
</PropertyGroup>
|
27
|
+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
28
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
29
|
+
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
30
|
+
<UseDebugLibraries>true</UseDebugLibraries>
|
31
|
+
<CharacterSet>Unicode</CharacterSet>
|
32
|
+
</PropertyGroup>
|
33
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
34
|
+
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
35
|
+
<UseDebugLibraries>true</UseDebugLibraries>
|
36
|
+
<CharacterSet>Unicode</CharacterSet>
|
37
|
+
</PropertyGroup>
|
38
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
39
|
+
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
40
|
+
<UseDebugLibraries>false</UseDebugLibraries>
|
41
|
+
<WholeProgramOptimization>true</WholeProgramOptimization>
|
42
|
+
<CharacterSet>Unicode</CharacterSet>
|
43
|
+
</PropertyGroup>
|
44
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
45
|
+
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
46
|
+
<UseDebugLibraries>false</UseDebugLibraries>
|
47
|
+
<WholeProgramOptimization>true</WholeProgramOptimization>
|
48
|
+
<CharacterSet>Unicode</CharacterSet>
|
49
|
+
</PropertyGroup>
|
50
|
+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
51
|
+
<ImportGroup Label="ExtensionSettings">
|
52
|
+
</ImportGroup>
|
53
|
+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
54
|
+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
55
|
+
</ImportGroup>
|
56
|
+
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
57
|
+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
58
|
+
</ImportGroup>
|
59
|
+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
60
|
+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
61
|
+
</ImportGroup>
|
62
|
+
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
63
|
+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
64
|
+
</ImportGroup>
|
65
|
+
<PropertyGroup Label="UserMacros" />
|
66
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
67
|
+
<LinkIncremental>true</LinkIncremental>
|
68
|
+
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
|
69
|
+
</PropertyGroup>
|
70
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
71
|
+
<LinkIncremental>true</LinkIncremental>
|
72
|
+
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
|
73
|
+
</PropertyGroup>
|
74
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
75
|
+
<LinkIncremental>false</LinkIncremental>
|
76
|
+
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
|
77
|
+
</PropertyGroup>
|
78
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
79
|
+
<LinkIncremental>false</LinkIncremental>
|
80
|
+
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
|
81
|
+
</PropertyGroup>
|
82
|
+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
83
|
+
<ClCompile>
|
84
|
+
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
85
|
+
<WarningLevel>Level3</WarningLevel>
|
86
|
+
<Optimization>Disabled</Optimization>
|
87
|
+
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;EMBULKOUTPUTORACLE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
88
|
+
<AdditionalIncludeDirectories>$(OCI_SDK_PATH)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
89
|
+
</ClCompile>
|
90
|
+
<Link>
|
91
|
+
<SubSystem>Windows</SubSystem>
|
92
|
+
<GenerateDebugInformation>true</GenerateDebugInformation>
|
93
|
+
<AdditionalLibraryDirectories>$(OCI_SDK_PATH)\lib\msvc;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
94
|
+
<OutputFile>..\..\..\..\lib\$(TargetName)$(TargetExt)</OutputFile>
|
95
|
+
</Link>
|
96
|
+
</ItemDefinitionGroup>
|
97
|
+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
98
|
+
<ClCompile>
|
99
|
+
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
100
|
+
<WarningLevel>Level3</WarningLevel>
|
101
|
+
<Optimization>Disabled</Optimization>
|
102
|
+
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;EMBULKOUTPUTORACLE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
103
|
+
<AdditionalIncludeDirectories>$(OCI_SDK_PATH)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
104
|
+
</ClCompile>
|
105
|
+
<Link>
|
106
|
+
<SubSystem>Windows</SubSystem>
|
107
|
+
<GenerateDebugInformation>true</GenerateDebugInformation>
|
108
|
+
<AdditionalLibraryDirectories>$(OCI_SDK_PATH)\lib\msvc;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
109
|
+
<AdditionalDependencies>oci.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
110
|
+
<OutputFile>..\..\..\..\lib\embulk\native\x86_64-windows\$(TargetName)$(TargetExt)</OutputFile>
|
111
|
+
</Link>
|
112
|
+
</ItemDefinitionGroup>
|
113
|
+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
114
|
+
<ClCompile>
|
115
|
+
<WarningLevel>Level3</WarningLevel>
|
116
|
+
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
117
|
+
<Optimization>MaxSpeed</Optimization>
|
118
|
+
<FunctionLevelLinking>true</FunctionLevelLinking>
|
119
|
+
<IntrinsicFunctions>true</IntrinsicFunctions>
|
120
|
+
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;EMBULKOUTPUTORACLE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
121
|
+
<AdditionalIncludeDirectories>$(OCI_SDK_PATH)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
122
|
+
</ClCompile>
|
123
|
+
<Link>
|
124
|
+
<SubSystem>Windows</SubSystem>
|
125
|
+
<GenerateDebugInformation>true</GenerateDebugInformation>
|
126
|
+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
127
|
+
<OptimizeReferences>true</OptimizeReferences>
|
128
|
+
<OutputFile>..\..\..\..\lib\$(TargetName)$(TargetExt)</OutputFile>
|
129
|
+
</Link>
|
130
|
+
</ItemDefinitionGroup>
|
131
|
+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
132
|
+
<ClCompile>
|
133
|
+
<WarningLevel>Level3</WarningLevel>
|
134
|
+
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
135
|
+
<Optimization>MaxSpeed</Optimization>
|
136
|
+
<FunctionLevelLinking>true</FunctionLevelLinking>
|
137
|
+
<IntrinsicFunctions>true</IntrinsicFunctions>
|
138
|
+
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;EMBULKOUTPUTORACLE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
139
|
+
<AdditionalIncludeDirectories>$(OCI_SDK_PATH)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
140
|
+
</ClCompile>
|
141
|
+
<Link>
|
142
|
+
<SubSystem>Windows</SubSystem>
|
143
|
+
<GenerateDebugInformation>true</GenerateDebugInformation>
|
144
|
+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
145
|
+
<OptimizeReferences>true</OptimizeReferences>
|
146
|
+
<AdditionalLibraryDirectories>$(OCI_SDK_PATH)\lib\msvc;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
147
|
+
<AdditionalDependencies>oci.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
148
|
+
<OutputFile>..\..\..\..\lib\embulk\native\x86_64-windows\$(TargetName)$(TargetExt)</OutputFile>
|
149
|
+
</Link>
|
150
|
+
</ItemDefinitionGroup>
|
151
|
+
<ItemGroup>
|
152
|
+
<ClCompile Include="..\common\embulk-output-oracle-oci.cpp" />
|
153
|
+
<ClCompile Include="dllmain.cpp">
|
154
|
+
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
|
155
|
+
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</CompileAsManaged>
|
156
|
+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
157
|
+
</PrecompiledHeader>
|
158
|
+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
159
|
+
</PrecompiledHeader>
|
160
|
+
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
|
161
|
+
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
|
162
|
+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
163
|
+
</PrecompiledHeader>
|
164
|
+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
165
|
+
</PrecompiledHeader>
|
166
|
+
</ClCompile>
|
167
|
+
</ItemGroup>
|
168
|
+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
169
|
+
<ImportGroup Label="ExtensionTargets">
|
170
|
+
</ImportGroup>
|
171
|
+
</Project>
|
@@ -21,16 +21,12 @@ import org.embulk.output.oracle.oci.OCIManager;
|
|
21
21
|
import org.embulk.output.oracle.oci.OCIWrapper;
|
22
22
|
import org.embulk.output.oracle.oci.RowBuffer;
|
23
23
|
import org.embulk.output.oracle.oci.TableDefinition;
|
24
|
-
import org.embulk.spi.Exec;
|
25
24
|
import org.embulk.spi.time.Timestamp;
|
26
|
-
import org.slf4j.Logger;
|
27
25
|
|
28
26
|
public class DirectBatchInsert implements BatchInsert
|
29
27
|
{
|
30
28
|
private static OCIManager ociManager = new OCIManager();
|
31
29
|
|
32
|
-
private final Logger logger = Exec.getLogger(DirectBatchInsert.class);
|
33
|
-
|
34
30
|
private List<String> ociKey;
|
35
31
|
private final String database;
|
36
32
|
private final String user;
|
@@ -40,9 +36,6 @@ public class DirectBatchInsert implements BatchInsert
|
|
40
36
|
private final OracleCharset nationalCharset;
|
41
37
|
private final int batchSize;
|
42
38
|
private RowBuffer buffer;
|
43
|
-
private long totalRows;
|
44
|
-
private int rowSize;
|
45
|
-
private int batchWeight;
|
46
39
|
private boolean closed;
|
47
40
|
|
48
41
|
private DateFormat[] formats;
|
@@ -148,31 +141,23 @@ public class DirectBatchInsert implements BatchInsert
|
|
148
141
|
|
149
142
|
}
|
150
143
|
|
151
|
-
rowSize = 0;
|
152
|
-
for (ColumnDefinition column : columns) {
|
153
|
-
rowSize += column.getDataSize();
|
154
|
-
}
|
155
|
-
|
156
144
|
TableDefinition tableDefinition = new TableDefinition(schema, loadTable, columns);
|
157
145
|
ociKey = Arrays.asList(database, user, loadTable);
|
158
|
-
ociManager.open(ociKey, database, user, password, tableDefinition);
|
146
|
+
OCIWrapper oci = ociManager.open(ociKey, database, user, password, tableDefinition, batchSize);
|
159
147
|
|
160
|
-
buffer = new RowBuffer(
|
148
|
+
buffer = new RowBuffer(oci, tableDefinition);
|
161
149
|
}
|
162
150
|
|
163
151
|
@Override
|
164
152
|
public int getBatchWeight()
|
165
153
|
{
|
166
|
-
|
154
|
+
// Automatically flushed in RowBuffer
|
155
|
+
return 0;
|
167
156
|
}
|
168
157
|
|
169
158
|
@Override
|
170
159
|
public void add() throws IOException, SQLException
|
171
160
|
{
|
172
|
-
batchWeight += rowSize;
|
173
|
-
if (buffer.isFull()) {
|
174
|
-
flush();
|
175
|
-
}
|
176
161
|
}
|
177
162
|
|
178
163
|
@Override
|
@@ -187,26 +172,7 @@ public class DirectBatchInsert implements BatchInsert
|
|
187
172
|
@Override
|
188
173
|
public void flush() throws IOException, SQLException
|
189
174
|
{
|
190
|
-
|
191
|
-
try {
|
192
|
-
logger.info(String.format("Loading %,d rows", buffer.getRowCount()));
|
193
|
-
|
194
|
-
long startTime = System.currentTimeMillis();
|
195
|
-
|
196
|
-
OCIWrapper oci = ociManager.get(ociKey);
|
197
|
-
synchronized (oci) {
|
198
|
-
oci.loadBuffer(buffer);
|
199
|
-
}
|
200
|
-
|
201
|
-
totalRows += buffer.getRowCount();
|
202
|
-
double seconds = (System.currentTimeMillis() - startTime) / 1000.0;
|
203
|
-
logger.info(String.format("> %.2f seconds (loaded %,d rows in total)", seconds, totalRows));
|
204
|
-
|
205
|
-
} finally {
|
206
|
-
buffer.clear();
|
207
|
-
batchWeight = 0;
|
208
|
-
}
|
209
|
-
}
|
175
|
+
buffer.flush();
|
210
176
|
}
|
211
177
|
|
212
178
|
@Override
|