embulk-output-oracle 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 216d1163436a4fe62fe244ab857d45e454a86213
4
- data.tar.gz: 95dc5c8ef7de58c37f00973a03ef8d4ca8d059c7
3
+ metadata.gz: 885c9eec0bf737ff77ed157431bbe16f2db54fbf
4
+ data.tar.gz: d2044b92a9fcd9148aaf40e3fdb2d2609db6e88e
5
5
  SHA512:
6
- metadata.gz: bacf819a6d2f2c60dd957310bd03558f4212f24f829301576dd7b50b3ca780e2ad32612b5b76eb4459c8950dbe44bc22875cf6a033c6a6ba74faee280f3d261d
7
- data.tar.gz: e1dc2c39559cde175cdbc217b0076b71a759bc5bdaef09429146f783a2497a95d81f2df9de67c6ced280695ed0906a38d5e759bc00a9ea2a1560229f0e1b2039
6
+ metadata.gz: fa3ca6314c186a4d2d682cc9d6d4db42c68fe4bbb9baae74404c43339d0d222a44a9d62e3a6de56bb1c7a2e18114b048a4cd1f9ba796d88f240a8753f3642c2a
7
+ data.tar.gz: 07b1d530ca63c91edc7904a1dd6089b131a684ff9525c44acb127150a3785b212f22d8a19185140e815d2b87bd48961ad215fcac97e6d0cfe2cc53683f9438da
data/README.md CHANGED
@@ -22,12 +22,12 @@ Oracle output plugins for Embulk loads records to Oracle.
22
22
  - **mode**: "insert", "insert_direct", "truncate_insert", or "replace". See bellow. (string, required)
23
23
  - **insert_method**: see below
24
24
  - **batch_size**: size of a single batch insert (integer, default: 16777216)
25
- - **default_timezone**: If input column type (embulk type) is timestamp and destination column type is `string` or `nstring`, this plugin needs to format the timestamp into a string. This default_timezone option is used to control the timezone. You can overwrite timezone for each columns using column_options option. (string, default: `UTC`)
25
+ - **default_timezone**: If input column type (embulk type) is timestamp, this plugin needs to format the timestamp into a SQL string. This default_timezone option is used to control the timezone. You can overwrite timezone for each columns using column_options option. (string, default: `UTC`)
26
26
  - **column_options**: advanced: a key-value pairs where key is a column name and value is options for the column.
27
27
  - **type**: type of a column when this plugin creates new tables (e.g. `VARCHAR(255)`, `INTEGER NOT NULL UNIQUE`). This used when this plugin creates intermediate tables (insert, truncate_insert and merge modes), when it creates the target table (insert_direct and replace modes), and when it creates nonexistent target table automatically. (string, default: depends on input column type. `BIGINT` if input column type is long, `BOOLEAN` if boolean, `DOUBLE PRECISION` if double, `CLOB` if string, `TIMESTAMP` if timestamp)
28
28
  - **value_type**: This plugin converts input column type (embulk type) into a database type to build a INSERT statement. This value_type option controls the type of the value in a INSERT statement. (string, default: depends on input column type. Available values options are: `byte`, `short`, `int`, `long`, `double`, `float`, `boolean`, `string`, `nstring`, `date`, `time`, `timestamp`, `decimal`, `null`, `pass`)
29
29
  - **timestamp_format**: If input column type (embulk type) is timestamp and value_type is `string` or `nstring`, this plugin needs to format the timestamp value into a string. This timestamp_format option is used to control the format of the timestamp. (string, default: `%Y-%m-%d %H:%M:%S.%6N`)
30
- - **timezone**: If input column type (embulk type) is timestamp and value_type is `string` or `nstring`, this plugin needs to format the timestamp value into a string. And if the input column type is timestamp and value_type is `date`, this plugin needs to consider timezone. In those cases, this timezone option is used to control the timezone. (string, value of default_timezone option is used by default)
30
+ - **timezone**: If input column type (embulk type) is timestamp, this plugin needs to format the timestamp value into a SQL string. In this cases, this timezone option is used to control the timezone. (string, value of default_timezone option is used by default)
31
31
 
32
32
  ### Modes
33
33
 
@@ -153,3 +153,8 @@ For Linux (x64) (only Ubuntu Server 14.04 is tested)
153
153
  * OCI_PATH (the directory of Oracle Instant Client Basic and the parent of the "sdk" directory)
154
154
 
155
155
  (6) Execute src/main/cpp/linux/build.sh .
156
+
157
+ ***
158
+ <img src="https://www.yourkit.com/images/yklogo.png" alt="YourKit"/> is used to improve performance of embulk-output-oracle.
159
+ YourKit supports open source projects with its full-featured Java Profiler.
160
+ YourKit, LLC is the creator of <a href="https://www.yourkit.com/java/profiler/index.jsp">YourKit Java Profiler</a> and <a href="https://www.yourkit.com/.net/profiler/index.jsp">YourKit .NET Profiler</a>, innovative and intelligent tools for profiling Java and .NET applications.
@@ -2,17 +2,14 @@ package org.embulk.output.oracle;
2
2
 
3
3
  import java.io.IOException;
4
4
  import java.math.BigDecimal;
5
- import java.sql.Date;
6
5
  import java.sql.SQLException;
7
- import java.sql.Time;
8
- import java.sql.Timestamp;
9
6
  import java.sql.Types;
10
7
  import java.text.DateFormat;
11
8
  import java.text.SimpleDateFormat;
12
9
  import java.util.ArrayList;
13
10
  import java.util.Arrays;
14
11
  import java.util.List;
15
-
12
+ import java.util.Calendar;
16
13
  import org.embulk.output.jdbc.BatchInsert;
17
14
  import org.embulk.output.jdbc.JdbcColumn;
18
15
  import org.embulk.output.jdbc.JdbcSchema;
@@ -21,6 +18,7 @@ import org.embulk.output.oracle.oci.OCIManager;
21
18
  import org.embulk.output.oracle.oci.OCIWrapper;
22
19
  import org.embulk.output.oracle.oci.RowBuffer;
23
20
  import org.embulk.output.oracle.oci.TableDefinition;
21
+ import org.embulk.spi.time.Timestamp;
24
22
  import org.embulk.spi.Exec;
25
23
  import org.slf4j.Logger;
26
24
 
@@ -67,10 +65,10 @@ public class DirectBatchInsert implements BatchInsert
67
65
  * boolean -> unused
68
66
  * byte -> unused
69
67
  * short -> unused
70
- * int -> unused
71
- * long -> unused
72
- * BigDecimal -> unused
73
- * String -> CHAR,VARCHAR,LONGVARCHAR,CLOB, NCHAR,NVARCHAR,NCLOB, NUMBER
68
+ * int -> NUMBER
69
+ * long -> NUMBER
70
+ * BigDecimal -> NUMBER
71
+ * String -> CHAR,VARCHAR,LONGVARCHAR,CLOB,NCHAR,NVARCHAR,NCLOB,NUMBER
74
72
  * NString -> unused
75
73
  * bytes -> unused
76
74
  * SqlDate -> unused
@@ -81,7 +79,7 @@ public class DirectBatchInsert implements BatchInsert
81
79
 
82
80
  formats = new DateFormat[insertSchema.getCount()];
83
81
  List<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
84
- Timestamp dummy = new Timestamp(System.currentTimeMillis());
82
+ java.sql.Timestamp dummy = new java.sql.Timestamp(System.currentTimeMillis());
85
83
  for (int i = 0; i < insertSchema.getCount(); i++) {
86
84
  JdbcColumn insertColumn = insertSchema.getColumn(i);
87
85
  switch (insertColumn.getSqlType()) {
@@ -247,7 +245,7 @@ public class DirectBatchInsert implements BatchInsert
247
245
  @Override
248
246
  public void setBigDecimal(BigDecimal v) throws IOException, SQLException
249
247
  {
250
- throw new SQLException("Unsupported");
248
+ buffer.addValue(v);
251
249
  }
252
250
 
253
251
  @Override
@@ -269,21 +267,24 @@ public class DirectBatchInsert implements BatchInsert
269
267
  }
270
268
 
271
269
  @Override
272
- public void setSqlDate(Date v, int sqlType) throws IOException, SQLException
270
+ public void setSqlDate(Timestamp v, Calendar calendar) throws IOException, SQLException
273
271
  {
274
272
  throw new SQLException("Unsupported");
275
273
  }
276
274
 
277
275
  @Override
278
- public void setSqlTime(Time v, int sqlType) throws IOException, SQLException
276
+ public void setSqlTime(Timestamp v, Calendar calendar) throws IOException, SQLException
279
277
  {
280
278
  throw new SQLException("Unsupported");
281
279
  }
282
280
 
283
281
  @Override
284
- public void setSqlTimestamp(Timestamp v, int sqlType) throws IOException, SQLException
282
+ public void setSqlTimestamp(Timestamp v, Calendar calendar) throws IOException, SQLException
285
283
  {
286
- buffer.addValue(formats[buffer.getCurrentColumn()].format(v));
284
+ java.sql.Timestamp t = new java.sql.Timestamp(v.toEpochMilli());
285
+ t.setNanos(v.getNano());
286
+ DateFormat format = formats[buffer.getCurrentColumn()];
287
+ format.setTimeZone(calendar.getTimeZone());
288
+ buffer.addValue(format.format(t));
287
289
  }
288
-
289
290
  }
@@ -18,8 +18,8 @@ public class OracleOutputConnection
18
18
  {
19
19
  private static final Map<String, String> CHARSET_NAMES = new HashMap<String, String>();
20
20
  static {
21
- CHARSET_NAMES.put("JA16SJIS", "Shift_JIS");
22
- CHARSET_NAMES.put("JA16SJISTILDE", "Shift_JIS");
21
+ CHARSET_NAMES.put("JA16SJIS", "MS932");
22
+ CHARSET_NAMES.put("JA16SJISTILDE", "MS932");
23
23
  CHARSET_NAMES.put("JA16EUC", "EUC-JP");
24
24
  CHARSET_NAMES.put("JA16EUCTILDE", "EUC-JP");
25
25
  CHARSET_NAMES.put("AL32UTF8", "UTF-8");
@@ -1,8 +1,10 @@
1
1
  package org.embulk.output.oracle.oci;
2
2
 
3
+ import java.math.BigDecimal;
3
4
  import java.nio.ByteBuffer;
4
5
  import java.nio.charset.Charset;
5
6
 
7
+
6
8
  public class RowBuffer
7
9
  {
8
10
  private final TableDefinition table;
@@ -13,7 +15,6 @@ public class RowBuffer
13
15
  private int currentPosition = 0;
14
16
  private final Charset charset;
15
17
 
16
-
17
18
  public RowBuffer(TableDefinition table, int rowCount, Charset charset)
18
19
  {
19
20
  this.table = table;
@@ -59,6 +60,11 @@ public class RowBuffer
59
60
  next();
60
61
  }
61
62
 
63
+ public void addValue(BigDecimal value)
64
+ {
65
+ addValue(value.toPlainString());
66
+ }
67
+
62
68
  private void next()
63
69
  {
64
70
  currentPosition += table.columns[currentColumn].columnSize;
@@ -89,7 +89,7 @@ public class OracleOutputPluginTestImpl
89
89
 
90
90
  run("/yml/test-insert.yml");
91
91
 
92
- assertGeneratedTable(table);
92
+ assertGeneratedTable1(table);
93
93
  }
94
94
 
95
95
  public void testInsertDirect() throws Exception
@@ -151,7 +151,7 @@ public class OracleOutputPluginTestImpl
151
151
 
152
152
  run("/yml/test-replace.yml");
153
153
 
154
- assertGeneratedTable(table);
154
+ assertGeneratedTable2(table);
155
155
  }
156
156
 
157
157
  public void testReplaceCreate() throws Exception
@@ -162,7 +162,7 @@ public class OracleOutputPluginTestImpl
162
162
 
163
163
  run("/yml/test-replace.yml");
164
164
 
165
- assertGeneratedTable(table);
165
+ assertGeneratedTable2(table);
166
166
  }
167
167
 
168
168
 
@@ -175,7 +175,7 @@ public class OracleOutputPluginTestImpl
175
175
 
176
176
  run("/yml/test-replace-long-name.yml");
177
177
 
178
- assertGeneratedTable(table);
178
+ assertGeneratedTable2(table);
179
179
  }
180
180
 
181
181
  public void testReplaceLongNameMultibyte() throws Exception
@@ -184,7 +184,7 @@ public class OracleOutputPluginTestImpl
184
184
 
185
185
  run("/yml/test-replace-long-name-multibyte.yml");
186
186
 
187
- assertGeneratedTable(table);
187
+ assertGeneratedTable2(table);
188
188
  }
189
189
 
190
190
  public void testStringTimestamp() throws Exception
@@ -196,7 +196,7 @@ public class OracleOutputPluginTestImpl
196
196
 
197
197
  run("/yml/test-string-timestamp.yml");
198
198
 
199
- assertTable(table, TimeZone.getDefault());
199
+ assertTable(table);
200
200
  }
201
201
 
202
202
  private void dropTable(String table) throws SQLException
@@ -220,12 +220,9 @@ public class OracleOutputPluginTestImpl
220
220
 
221
221
  private void assertTable(String table) throws Exception
222
222
  {
223
- assertTable(table, TimeZone.getTimeZone("GMT"));
224
- }
225
-
226
-
227
- private void assertTable(String table, TimeZone timeZone) throws Exception
228
- {
223
+ // datetime of UTC will be inserted by embulk.
224
+ // datetime of default timezone will be selected by JDBC.
225
+ TimeZone timeZone = TimeZone.getDefault();
229
226
  List<List<Object>> rows = select(table);
230
227
 
231
228
  /*
@@ -265,13 +262,11 @@ public class OracleOutputPluginTestImpl
265
262
  }
266
263
  }
267
264
 
268
- private void assertGeneratedTable(String table) throws Exception
269
- {
270
- assertGeneratedTable(table, TimeZone.getTimeZone("GMT"));
271
- }
272
-
273
- private void assertGeneratedTable(String table, TimeZone timeZone) throws Exception
265
+ private void assertGeneratedTable1(String table) throws Exception
274
266
  {
267
+ // datetime of UTC will be inserted by embulk.
268
+ // datetime of default timezone will be selected by JDBC.
269
+ TimeZone timeZone = TimeZone.getDefault();
275
270
  List<List<Object>> rows = select(table);
276
271
 
277
272
  /*
@@ -311,6 +306,50 @@ public class OracleOutputPluginTestImpl
311
306
  }
312
307
  }
313
308
 
309
+ private void assertGeneratedTable2(String table) throws Exception
310
+ {
311
+ // datetime of UTC will be inserted by embulk.
312
+ // datetime of default timezone will be selected by JDBC.
313
+ TimeZone timeZone = TimeZone.getDefault();
314
+ List<List<Object>> rows = select(table);
315
+
316
+ /*
317
+ A001,ABCDE,0,123.45,2015/03/05,2015/03/05 12:34:56
318
+ A002,あいうえお,-9999,-99999999.99,2015/03/06,2015/03/06 23:59:59
319
+ A003,,,,,
320
+ */
321
+
322
+ assertEquals(3, rows.size());
323
+ Iterator<List<Object>> i1 = rows.iterator();
324
+ {
325
+ Iterator<Object> i2 = i1.next().iterator();
326
+ assertEquals("A001", i2.next());
327
+ assertEquals("ABCDE", i2.next());
328
+ assertEquals(new BigDecimal("0"), i2.next());
329
+ assertEquals(new BigDecimal("123.45"), i2.next());
330
+ assertEquals(toTimestamp("2015/03/05 00:00:00", timeZone), i2.next());
331
+ assertEquals(toOracleTimestamp("2015/03/05 12:34:56", timeZone), i2.next());
332
+ }
333
+ {
334
+ Iterator<Object> i2 = i1.next().iterator();
335
+ assertEquals("A002", i2.next());
336
+ assertEquals("あいうえお", i2.next());
337
+ assertEquals(new BigDecimal("-9999"), i2.next());
338
+ assertEquals(new BigDecimal("-99999999.99"), i2.next());
339
+ assertEquals(toTimestamp("2015/03/06 00:00:00", timeZone), i2.next());
340
+ assertEquals(toOracleTimestamp("2015/03/06 23:59:59", timeZone), i2.next());
341
+ }
342
+ {
343
+ Iterator<Object> i2 = i1.next().iterator();
344
+ assertEquals("A003", i2.next());
345
+ assertEquals(null, i2.next());
346
+ assertEquals(null, i2.next());
347
+ assertEquals(null, i2.next());
348
+ assertEquals(null, i2.next());
349
+ assertEquals(null, i2.next());
350
+ }
351
+ }
352
+
314
353
 
315
354
  private Timestamp toTimestamp(String s, TimeZone timeZone)
316
355
  {
@@ -21,6 +21,6 @@ out:
21
21
  user: TEST_USER
22
22
  password: test_pw
23
23
  table: TEST1
24
- mode: insert
24
+ mode: insert_direct
25
25
  insert_method: direct
26
26
  #driver_path: driver/ojdbc7.jar
@@ -21,6 +21,8 @@ out:
21
21
  user: TEST_USER
22
22
  password: test_pw
23
23
  table: TEST1
24
- mode: insert
24
+ mode: insert_direct
25
25
  insert_method: oci
26
+ column_options:
27
+ INTEGER_ITEM: {value_type: pass}
26
28
  #driver_path: driver/ojdbc7.jar
@@ -21,6 +21,8 @@ out:
21
21
  user: TEST_USER
22
22
  password: test_pw
23
23
  table: TEST1
24
- mode: insert
24
+ mode: insert_direct
25
25
  insert_method: oci
26
+ column_options:
27
+ INTEGER_ITEM: {value_type: pass}
26
28
  #driver_path: driver/ojdbc7.jar
@@ -21,5 +21,5 @@ out:
21
21
  user: TEST_USER
22
22
  password: test_pw
23
23
  table: TEST1
24
- mode: insert
24
+ mode: insert_direct
25
25
  #driver_path: driver/ojdbc7.jar
@@ -22,4 +22,10 @@ out:
22
22
  password: test_pw
23
23
  table: TEST12345678901234567890
24
24
  mode: replace
25
+ column_options:
26
+ VARCHAR2_ITEM: {type: 'VARCHAR2(40)'}
27
+ INTEGER_ITEM: {type: 'NUMBER(4,0)'}
28
+ NUMBER_ITEM: {type: 'NUMBER(10,2)'}
29
+ DATE_ITEM: {type: 'DATE'}
30
+ TIMESTAMP_ITEM: {type: 'TIMESTAMP'}
25
31
  #driver_path: driver/ojdbc7.jar
@@ -22,4 +22,10 @@ out:
22
22
  password: test_pw
23
23
  table: TEST12345678901234567890123456
24
24
  mode: replace
25
+ column_options:
26
+ VARCHAR2_ITEM: {type: 'VARCHAR2(40)'}
27
+ INTEGER_ITEM: {type: 'NUMBER(4,0)'}
28
+ NUMBER_ITEM: {type: 'NUMBER(10,2)'}
29
+ DATE_ITEM: {type: 'DATE'}
30
+ TIMESTAMP_ITEM: {type: 'TIMESTAMP'}
25
31
  #driver_path: driver/ojdbc7.jar
@@ -22,4 +22,10 @@ out:
22
22
  password: test_pw
23
23
  table: TEST1
24
24
  mode: replace
25
+ column_options:
26
+ VARCHAR2_ITEM: {type: 'VARCHAR2(40)'}
27
+ INTEGER_ITEM: {type: 'NUMBER(4,0)'}
28
+ NUMBER_ITEM: {type: 'NUMBER(10,2)'}
29
+ DATE_ITEM: {type: 'DATE'}
30
+ TIMESTAMP_ITEM: {type: 'TIMESTAMP'}
25
31
  #driver_path: driver/ojdbc7.jar
@@ -21,5 +21,8 @@ out:
21
21
  user: TEST_USER
22
22
  password: test_pw
23
23
  table: TEST1
24
- mode: insert
24
+ mode: insert_direct
25
+ column_options:
26
+ DATE_ITEM: {value_type: pass}
27
+ TIMESTAMP_ITEM: {value_type: pass}
25
28
  #driver_path: driver/ojdbc7.jar
@@ -19,6 +19,6 @@ out:
19
19
  user: TEST_USER
20
20
  password: test_pw
21
21
  table: TEST1
22
- mode: insert
22
+ mode: insert_direct
23
23
  #driver_path: driver/ojdbc7.jar
24
24
  url: jdbc:oracle:thin:@localhost:1521:TESTDB
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-oracle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-19 00:00:00.000000000 Z
11
+ date: 2015-06-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Inserts or updates records to a table.
14
14
  email:
@@ -67,8 +67,8 @@ files:
67
67
  - src/test/resources/yml/test-replace.yml
68
68
  - src/test/resources/yml/test-string-timestamp.yml
69
69
  - src/test/resources/yml/test-url.yml
70
- - classpath/embulk-output-jdbc-0.3.0.jar
71
- - classpath/embulk-output-oracle-0.3.0.jar
70
+ - classpath/embulk-output-jdbc-0.4.0.jar
71
+ - classpath/embulk-output-oracle-0.4.0.jar
72
72
  homepage: https://github.com/embulk/embulk-output-jdbc
73
73
  licenses:
74
74
  - Apache 2.0
Binary file