embulk-output-jdbc 0.7.6 → 0.7.7

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: 6729cd334930e262ef325fd5cd954e5c71893b40
4
- data.tar.gz: 5f06aa77e9c76e0517a40334ae0f9b42b4c43c35
3
+ metadata.gz: d34620b8b097cd388a2c29b0f2d7e395ea9aa858
4
+ data.tar.gz: fc7b31df19c617e9a9e930417c372d3d9f0be981
5
5
  SHA512:
6
- metadata.gz: 7ca1405dffcde39385c6953b5e48580f7c16dcf3e45665af56e34d167d0338aa09818df3390e5318680caddd4b1a2f7d122975ac5ca0e702fcd011f9fe0745a1
7
- data.tar.gz: 720c5b9defa2a83235a6c4a792ccafd67ca944b0d475bebea86b1e4727a07eadf9784b07a9a0ba9cd82f0195e1a63f4b1f2408e7ba20175d30085b4aa3462948
6
+ metadata.gz: aba1b8193aaf2d5e3bc02a5148442c7b74ddd579eaf8c1ea701d30447a7105b45df5f26251de6607e7a27bc394f77f200e3df4d5ca16e53adc4af81c836bc8b8
7
+ data.tar.gz: 6ddf11bed1077c07a5e5f2610b509881cdea9f1bc1276d9a8923cecc7cad9317365259483c5be7d249961c73c6d3ba665258a052e57f2aa4251018214692abe5
data/README.md CHANGED
@@ -30,6 +30,7 @@ Generic JDBC output plugin for Embulk loads records to a database using a JDBC d
30
30
  - **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 the sql type of the column. Available values options are: `byte`, `short`, `int`, `long`, `double`, `float`, `boolean`, `string`, `nstring`, `date`, `time`, `timestamp`, `decimal`, `json`, `null`, `pass`)
31
31
  - **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`)
32
32
  - **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)
33
+ - **before_load**: if set, this SQL will be executed before loading all records. In truncate_insert mode, the SQL will be executed after truncating. replace mode doesn't support this option.
33
34
  - **after_load**: if set, this SQL will be executed after loading all records.
34
35
 
35
36
  ## Modes
@@ -108,6 +108,10 @@ public abstract class AbstractJdbcOutputPlugin
108
108
  @ConfigDefault("null")
109
109
  public Optional<List<String>> getMergeRule();
110
110
 
111
+ @Config("before_load")
112
+ @ConfigDefault("null")
113
+ public Optional<String> getBeforeLoad();
114
+
111
115
  @Config("after_load")
112
116
  @ConfigDefault("null")
113
117
  public Optional<String> getAfterLoad();
@@ -453,6 +457,10 @@ public abstract class AbstractJdbcOutputPlugin
453
457
  Mode mode = task.getMode();
454
458
  logger.info("Using {} mode", mode);
455
459
 
460
+ if (mode.commitBySwapTable() && task.getBeforeLoad().isPresent()) {
461
+ throw new ConfigException(String.format("%s mode does not support 'before_load' option.", mode));
462
+ }
463
+
456
464
  if (con.tableExists(task.getTable())) {
457
465
  task.setActualTable(task.getTable());
458
466
  } else {
@@ -514,6 +522,9 @@ public abstract class AbstractJdbcOutputPlugin
514
522
  }
515
523
  } else {
516
524
  task.setIntermediateTables(Optional.<List<String>>absent());
525
+ if (task.getBeforeLoad().isPresent()) {
526
+ con.executeSql(task.getBeforeLoad().get());
527
+ }
517
528
  }
518
529
 
519
530
  // build JdbcSchema from a table
@@ -675,7 +686,7 @@ public abstract class AbstractJdbcOutputPlugin
675
686
  switch (task.getMode()) {
676
687
  case INSERT_DIRECT:
677
688
  case MERGE_DIRECT:
678
- // already done
689
+ // already loaded
679
690
  if (task.getAfterLoad().isPresent()) {
680
691
  con.executeSql(task.getAfterLoad().get());
681
692
  }
@@ -686,7 +697,7 @@ public abstract class AbstractJdbcOutputPlugin
686
697
  if (task.getNewTableSchema().isPresent()) {
687
698
  con.createTableIfNotExists(task.getActualTable(), task.getNewTableSchema().get());
688
699
  }
689
- con.collectInsert(task.getIntermediateTables().get(), schema, task.getActualTable(), false, task.getAfterLoad());
700
+ con.collectInsert(task.getIntermediateTables().get(), schema, task.getActualTable(), false, task.getBeforeLoad(), task.getAfterLoad());
690
701
  break;
691
702
 
692
703
  case TRUNCATE_INSERT:
@@ -694,7 +705,7 @@ public abstract class AbstractJdbcOutputPlugin
694
705
  if (task.getNewTableSchema().isPresent()) {
695
706
  con.createTableIfNotExists(task.getActualTable(), task.getNewTableSchema().get());
696
707
  }
697
- con.collectInsert(task.getIntermediateTables().get(), schema, task.getActualTable(), true, task.getAfterLoad());
708
+ con.collectInsert(task.getIntermediateTables().get(), schema, task.getActualTable(), true, task.getBeforeLoad(), task.getAfterLoad());
698
709
  break;
699
710
 
700
711
  case MERGE:
@@ -703,7 +714,7 @@ public abstract class AbstractJdbcOutputPlugin
703
714
  con.createTableIfNotExists(task.getActualTable(), task.getNewTableSchema().get());
704
715
  }
705
716
  con.collectMerge(task.getIntermediateTables().get(), schema, task.getActualTable(),
706
- new MergeConfig(task.getMergeKeys().get(), task.getMergeRule()), task.getAfterLoad());
717
+ new MergeConfig(task.getMergeKeys().get(), task.getMergeRule()), task.getBeforeLoad(), task.getAfterLoad());
707
718
  break;
708
719
 
709
720
  case REPLACE:
@@ -294,7 +294,7 @@ public class JdbcOutputConnection
294
294
  }
295
295
 
296
296
  protected void collectInsert(List<String> fromTables, JdbcSchema schema, String toTable,
297
- boolean truncateDestinationFirst, Optional<String> additionalSql) throws SQLException
297
+ boolean truncateDestinationFirst, Optional<String> preSql, Optional<String> postSql) throws SQLException
298
298
  {
299
299
  if (fromTables.isEmpty()) {
300
300
  return;
@@ -306,11 +306,18 @@ public class JdbcOutputConnection
306
306
  String sql = buildTruncateSql(toTable);
307
307
  executeUpdate(stmt, sql);
308
308
  }
309
+
310
+ if (preSql.isPresent()) {
311
+ executeUpdate(stmt, preSql.get());
312
+ }
313
+
309
314
  String sql = buildCollectInsertSql(fromTables, schema, toTable);
310
315
  executeUpdate(stmt, sql);
311
- if (additionalSql.isPresent()) {
312
- executeUpdate(stmt, additionalSql.get());
316
+
317
+ if (postSql.isPresent()) {
318
+ executeUpdate(stmt, postSql.get());
313
319
  }
320
+
314
321
  commitIfNecessary(connection);
315
322
  } catch (SQLException ex) {
316
323
  throw safeRollback(connection, ex);
@@ -356,7 +363,7 @@ public class JdbcOutputConnection
356
363
  }
357
364
 
358
365
  protected void collectMerge(List<String> fromTables, JdbcSchema schema, String toTable, MergeConfig mergeConfig,
359
- Optional<String> additionalSql) throws SQLException
366
+ Optional<String> preSql, Optional<String> postSql) throws SQLException
360
367
  {
361
368
  if (fromTables.isEmpty()) {
362
369
  return;
@@ -364,11 +371,17 @@ public class JdbcOutputConnection
364
371
 
365
372
  Statement stmt = connection.createStatement();
366
373
  try {
374
+ if (preSql.isPresent()) {
375
+ executeUpdate(stmt, preSql.get());
376
+ }
377
+
367
378
  String sql = buildCollectMergeSql(fromTables, schema, toTable, mergeConfig);
368
379
  executeUpdate(stmt, sql);
369
- if (additionalSql.isPresent()) {
370
- executeUpdate(stmt, additionalSql.get());
380
+
381
+ if (postSql.isPresent()) {
382
+ executeUpdate(stmt, postSql.get());
371
383
  }
384
+
372
385
  commitIfNecessary(connection);
373
386
  } catch (SQLException ex) {
374
387
  throw safeRollback(connection, ex);
@@ -382,15 +395,18 @@ public class JdbcOutputConnection
382
395
  throw new UnsupportedOperationException("not implemented");
383
396
  }
384
397
 
385
- public void replaceTable(String fromTable, JdbcSchema schema, String toTable, Optional<String> additionalSql) throws SQLException
398
+ public void replaceTable(String fromTable, JdbcSchema schema, String toTable, Optional<String> postSql) throws SQLException
386
399
  {
387
400
  Statement stmt = connection.createStatement();
388
401
  try {
389
402
  dropTableIfExists(stmt, toTable);
403
+
390
404
  executeUpdate(stmt, buildRenameTableSql(fromTable, toTable));
391
- if (additionalSql.isPresent()) {
392
- executeUpdate(stmt, additionalSql.get());
405
+
406
+ if (postSql.isPresent()) {
407
+ executeUpdate(stmt, postSql.get());
393
408
  }
409
+
394
410
  commitIfNecessary(connection);
395
411
  } catch (SQLException ex) {
396
412
  throw safeRollback(connection, ex);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-jdbc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.6
4
+ version: 0.7.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-23 00:00:00.000000000 Z
11
+ date: 2017-04-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Inserts or updates records to a table.
14
14
  email:
@@ -19,7 +19,7 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - README.md
21
21
  - build.gradle
22
- - classpath/embulk-output-jdbc-0.7.6.jar
22
+ - classpath/embulk-output-jdbc-0.7.7.jar
23
23
  - lib/embulk/output/jdbc.rb
24
24
  - src/main/java/org/embulk/output/JdbcOutputPlugin.java
25
25
  - src/main/java/org/embulk/output/jdbc/AbstractJdbcOutputPlugin.java