embulk-output-oracle 0.3.0 → 0.4.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 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