embulk-output-postgresql 0.8.2 → 0.8.3

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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -1
  3. data/build.gradle +1 -0
  4. data/classpath/embulk-output-jdbc-0.8.3.jar +0 -0
  5. data/classpath/embulk-output-postgresql-0.8.3.jar +0 -0
  6. data/src/main/java/org/embulk/output/PostgreSQLOutputPlugin.java +2 -2
  7. data/src/main/java/org/embulk/output/postgresql/AbstractPostgreSQLCopyBatchInsert.java +0 -9
  8. data/src/main/java/org/embulk/output/postgresql/PostgreSQLCopyBatchInsert.java +10 -3
  9. data/src/main/java/org/embulk/output/postgresql/PostgreSQLOutputConnection.java +1 -2
  10. data/src/main/java/org/embulk/output/postgresql/PostgreSQLOutputConnector.java +11 -5
  11. data/src/test/java/org/embulk/output/postgresql/BasicTest.java +103 -0
  12. data/src/test/java/org/embulk/output/postgresql/PostgreSQLTests.java +68 -0
  13. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/setup.sql +44 -0
  14. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_json.csv +5 -0
  15. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_json.yml +2 -0
  16. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_json_expected.csv +4 -0
  17. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_number.csv +5 -0
  18. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_number.yml +2 -0
  19. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_number_expected.csv +4 -0
  20. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_string.csv +4 -0
  21. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_string.yml +2 -0
  22. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_string_expected.csv +3 -0
  23. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_timestamp.csv +3 -0
  24. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_timestamp.yml +2 -0
  25. data/src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_timestamp_expected.csv +2 -0
  26. metadata +19 -4
  27. data/classpath/embulk-output-jdbc-0.8.2.jar +0 -0
  28. data/classpath/embulk-output-postgresql-0.8.2.jar +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c40968f0a5deb08818c904871fb92ed77a6be595
4
- data.tar.gz: 583509046b2ba2c58b1a0f000c863e005fdf26d4
3
+ metadata.gz: 6905d4be0d280edee08d97a7a9a5fe4e93f6f93e
4
+ data.tar.gz: e25fcb5a9ba650b1ccbc636c8f7c432baa4b0c85
5
5
  SHA512:
6
- metadata.gz: de8c4ea59948fe62389254cbad849802d6250080edd5024a51db8a53d4f4111c8ac7668997d9d7e9a1892f081fc73de38a5283590cccffcbb84cf805547c9e8b
7
- data.tar.gz: 77879f4ab4996d2d2a15fde031f80d3ac6d6ca09cb4c743c2a92db4869d0fd94bbb9ee1a8692a4f042782a510abdeb3401ec40b4afa28a611a755c9f11734d2c
6
+ metadata.gz: a788977861a3fd4c194b8969795f4934f8c1b9bfa91d9ba9ca8860674aa147c9c8c358846da5d1a51ca9db877f2b84000161174df97027eec036ee3e46d3c8f8
7
+ data.tar.gz: 9f96b3b66f92bcdaa4202dca90ef537034527e2eaf7c95eed5703cadba09c0070fd4db3a36bd05c8f7c1454b4696f99ee844ae93e8322b577834ebfac781c597
data/README.md CHANGED
@@ -21,8 +21,9 @@ PostgreSQL output plugin for Embulk loads records to PostgreSQL.
21
21
  - **table**: destination table name (string, required)
22
22
  - **create_table_constraint**: table constraint added to `CREATE TABLE` statement, like `CREATE TABLE <table_name> (<column1> <type1>, <column2> <type2>, ..., <create_table_constraint>) <create_table_option>`.
23
23
  - **create_table_option**: table option added to `CREATE TABLE` statement, like `CREATE TABLE <table_name> (<column1> <type1>, <column2> <type2>, ..., <create_table_constraint>) <create_table_option>`.
24
+ - **transaction_isolation**: transaction isolation level for each connection ("read_uncommitted", "read_committed", "repeatable_read" or "serializable"). if not specified, database default value will be used.
24
25
  - **options**: extra connection properties (hash, default: {})
25
- - **retry_limit**: max retry count for database operations (integer, default: 12)
26
+ - **retry_limit**: max retry count for database operations (integer, default: 12). When intermediate table to create already created by another process, this plugin will retry with another table name to avoid collision.
26
27
  - **retry_wait**: initial retry wait time in milliseconds (integer, default: 1000 (1 second))
27
28
  - **max_retry_wait**: upper limit of retry wait, which will be doubled at every retry (integer, default: 1800000 (30 minutes))
28
29
  - **mode**: "insert", "insert_direct", "truncate_insert", "replace", "merge" or "merge_direct". See below. (string, required)
data/build.gradle CHANGED
@@ -4,5 +4,6 @@ dependencies {
4
4
  compile 'org.postgresql:postgresql:9.4-1205-jdbc41'
5
5
  defaultJdbcDriver 'org.postgresql:postgresql:9.4-1205-jdbc41'
6
6
 
7
+ testCompile 'org.embulk:embulk-standards:0.8.22'
7
8
  testCompile project(':embulk-output-jdbc').sourceSets.test.output
8
9
  }
@@ -77,7 +77,7 @@ public class PostgreSQLOutputPlugin
77
77
  }
78
78
 
79
79
  @Override
80
- protected PostgreSQLOutputConnector getConnector(PluginTask task, boolean retryableMetadataOperation)
80
+ protected JdbcOutputConnector getConnector(PluginTask task, boolean retryableMetadataOperation)
81
81
  {
82
82
  PostgreSQLPluginTask t = (PostgreSQLPluginTask) task;
83
83
 
@@ -114,7 +114,7 @@ public class PostgreSQLOutputPlugin
114
114
  props.setProperty("password", t.getPassword());
115
115
  logConnectionProperties(url, props);
116
116
 
117
- return new PostgreSQLOutputConnector(url, props, t.getSchema());
117
+ return new PostgreSQLOutputConnector(url, props, t.getSchema(), t.getTransactionIsolation());
118
118
  }
119
119
 
120
120
  @Override
@@ -9,7 +9,6 @@ import java.io.OutputStreamWriter;
9
9
  import java.io.IOException;
10
10
  import java.nio.charset.Charset;
11
11
  import java.math.BigDecimal;
12
- import java.sql.SQLException;
13
12
  import org.embulk.spi.time.Timestamp;
14
13
  import org.embulk.output.jdbc.BatchInsert;
15
14
 
@@ -71,14 +70,6 @@ public abstract class AbstractPostgreSQLCopyBatchInsert
71
70
  }
72
71
  }
73
72
 
74
- public void finish() throws IOException, SQLException
75
- {
76
- closeCurrentFile(); // this is necessary to make getBatchWeight() work
77
- if (getBatchWeight() != 0) {
78
- flush();
79
- }
80
- }
81
-
82
73
  public void add() throws IOException
83
74
  {
84
75
  writer.write(newLineString);
@@ -5,6 +5,7 @@ import java.io.FileInputStream;
5
5
  import java.io.IOException;
6
6
  import java.sql.SQLException;
7
7
 
8
+ import org.embulk.output.jdbc.JdbcOutputConnector;
8
9
  import org.embulk.output.jdbc.JdbcSchema;
9
10
  import org.embulk.output.jdbc.TableIdentifier;
10
11
  import org.embulk.spi.Exec;
@@ -15,14 +16,14 @@ public class PostgreSQLCopyBatchInsert
15
16
  extends AbstractPostgreSQLCopyBatchInsert
16
17
  {
17
18
  private final Logger logger = Exec.getLogger(PostgreSQLCopyBatchInsert.class);
18
- private final PostgreSQLOutputConnector connector;
19
+ private final JdbcOutputConnector connector;
19
20
 
20
21
  private PostgreSQLOutputConnection connection = null;
21
22
  private CopyManager copyManager = null;
22
23
  private String copySql = null;
23
24
  private long totalRows;
24
25
 
25
- public PostgreSQLCopyBatchInsert(PostgreSQLOutputConnector connector) throws IOException, SQLException
26
+ public PostgreSQLCopyBatchInsert(JdbcOutputConnector connector) throws IOException, SQLException
26
27
  {
27
28
  super();
28
29
  this.connector = connector;
@@ -31,7 +32,7 @@ public class PostgreSQLCopyBatchInsert
31
32
  @Override
32
33
  public void prepare(TableIdentifier loadTable, JdbcSchema insertSchema) throws SQLException
33
34
  {
34
- this.connection = connector.connect(true);
35
+ this.connection = (PostgreSQLOutputConnection)connector.connect(true);
35
36
  this.copySql = connection.buildCopySql(loadTable, insertSchema);
36
37
  this.copyManager = connection.newCopyManager();
37
38
  logger.info("Copy SQL: "+copySql);
@@ -41,6 +42,7 @@ public class PostgreSQLCopyBatchInsert
41
42
  public void flush() throws IOException, SQLException
42
43
  {
43
44
  File file = closeCurrentFile(); // flush buffered data in writer
45
+ if (getBatchWeight() == 0) return;
44
46
 
45
47
  logger.info(String.format("Loading %,d rows (%,d bytes)", batchRows, file.length()));
46
48
  long startTime = System.currentTimeMillis();
@@ -61,6 +63,11 @@ public class PostgreSQLCopyBatchInsert
61
63
  file.delete();
62
64
  }
63
65
 
66
+ @Override
67
+ public void finish() throws IOException ,SQLException
68
+ {
69
+ }
70
+
64
71
  @Override
65
72
  public void close() throws IOException, SQLException
66
73
  {
@@ -18,11 +18,10 @@ public class PostgreSQLOutputConnection
18
18
  {
19
19
  private static final int MAX_NUMERIC_PRECISION = 1000;
20
20
 
21
- public PostgreSQLOutputConnection(Connection connection, String schemaName, boolean autoCommit)
21
+ public PostgreSQLOutputConnection(Connection connection, String schemaName)
22
22
  throws SQLException
23
23
  {
24
24
  super(connection, schemaName);
25
- connection.setAutoCommit(autoCommit);
26
25
  }
27
26
 
28
27
  public String buildCopySql(TableIdentifier toTable, JdbcSchema toTableSchema)
@@ -5,28 +5,34 @@ import java.sql.Connection;
5
5
  import java.sql.DriverManager;
6
6
  import java.sql.SQLException;
7
7
 
8
- import org.embulk.output.jdbc.JdbcOutputConnector;
8
+ import org.embulk.output.jdbc.JdbcOutputConnection;
9
+ import org.embulk.output.jdbc.AbstractJdbcOutputConnector;
10
+ import org.embulk.output.jdbc.TransactionIsolation;
11
+
12
+ import com.google.common.base.Optional;
9
13
 
10
14
  public class PostgreSQLOutputConnector
11
- implements JdbcOutputConnector
15
+ extends AbstractJdbcOutputConnector
12
16
  {
13
17
  private final String url;
14
18
  private final Properties properties;
15
19
  private final String schemaName;
16
20
 
17
- public PostgreSQLOutputConnector(String url, Properties properties, String schemaName)
21
+ public PostgreSQLOutputConnector(String url, Properties properties, String schemaName,
22
+ Optional<TransactionIsolation> transactionIsolation)
18
23
  {
24
+ super(transactionIsolation);
19
25
  this.url = url;
20
26
  this.properties = properties;
21
27
  this.schemaName = schemaName;
22
28
  }
23
29
 
24
30
  @Override
25
- public PostgreSQLOutputConnection connect(boolean autoCommit) throws SQLException
31
+ protected JdbcOutputConnection connect() throws SQLException
26
32
  {
27
33
  Connection c = DriverManager.getConnection(url, properties);
28
34
  try {
29
- PostgreSQLOutputConnection con = new PostgreSQLOutputConnection(c, schemaName, autoCommit);
35
+ PostgreSQLOutputConnection con = new PostgreSQLOutputConnection(c, schemaName);
30
36
  c = null;
31
37
  return con;
32
38
  } finally {
@@ -0,0 +1,103 @@
1
+ package org.embulk.output.postgresql;
2
+
3
+ import static org.embulk.output.postgresql.PostgreSQLTests.execute;
4
+ import static org.embulk.output.postgresql.PostgreSQLTests.selectRecords;
5
+ import static org.hamcrest.Matchers.is;
6
+ import static org.junit.Assert.assertThat;
7
+
8
+ import java.io.File;
9
+ import java.io.IOException;
10
+ import java.net.URISyntaxException;
11
+ import java.net.URL;
12
+ import java.nio.file.FileSystems;
13
+ import java.nio.file.Path;
14
+
15
+ import org.embulk.config.ConfigDiff;
16
+ import org.embulk.config.ConfigSource;
17
+ import org.embulk.output.PostgreSQLOutputPlugin;
18
+ import org.embulk.spi.OutputPlugin;
19
+ import org.embulk.test.EmbulkTests;
20
+ import org.embulk.test.TestingEmbulk;
21
+ import org.junit.Before;
22
+ import org.junit.Rule;
23
+ import org.junit.Test;
24
+
25
+ import com.google.common.io.Resources;
26
+
27
+ public class BasicTest
28
+ {
29
+ private static final String BASIC_RESOURCE_PATH = "org/embulk/output/postgresql/test/expect/basic/";
30
+
31
+ private static ConfigSource loadYamlResource(TestingEmbulk embulk, String fileName)
32
+ {
33
+ return embulk.loadYamlResource(BASIC_RESOURCE_PATH + fileName);
34
+ }
35
+
36
+ private static String readResource(String fileName)
37
+ {
38
+ return EmbulkTests.readResource(BASIC_RESOURCE_PATH + fileName);
39
+ }
40
+
41
+ @Rule
42
+ public TestingEmbulk embulk = TestingEmbulk.builder()
43
+ .registerPlugin(OutputPlugin.class, "postgresql", PostgreSQLOutputPlugin.class)
44
+ .build();
45
+
46
+ private ConfigSource baseConfig;
47
+
48
+ @Before
49
+ public void setup() throws IOException
50
+ {
51
+ baseConfig = PostgreSQLTests.baseConfig();
52
+ execute(readResource("setup.sql")); // setup rows
53
+
54
+ if (System.getProperty("path.separator").equals(";")) {
55
+ // for Windows (because encoding will be set to UTF8 when executed by Eclipse)
56
+ System.setProperty("file.encoding", "MS932");
57
+ }
58
+ }
59
+
60
+ @Test
61
+ public void testNumber() throws Exception
62
+ {
63
+ Path in1 = toPath("test_number.csv");
64
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_number.yml")), in1);
65
+ assertThat(selectRecords(embulk, "test_number"), is(readResource("test_number_expected.csv")));
66
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
67
+ }
68
+
69
+ @Test
70
+ public void testString() throws Exception
71
+ {
72
+ Path in1 = toPath("test_string.csv");
73
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_string.yml")), in1);
74
+ assertThat(selectRecords(embulk, "test_string"), is(readResource("test_string_expected.csv")));
75
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
76
+ }
77
+
78
+ @Test
79
+ public void testTimestamp() throws Exception
80
+ {
81
+ Path in1 = toPath("test_timestamp.csv");
82
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_timestamp.yml")), in1);
83
+ assertThat(selectRecords(embulk, "test_timestamp"), is(readResource("test_timestamp_expected.csv")));
84
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
85
+ }
86
+
87
+ @Test
88
+ public void testJson() throws Exception
89
+ {
90
+ Path in1 = toPath("test_json.csv");
91
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_json.yml")), in1);
92
+ assertThat(selectRecords(embulk, "test_json"), is(readResource("test_json_expected.csv")));
93
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
94
+ }
95
+
96
+
97
+ private Path toPath(String fileName) throws URISyntaxException
98
+ {
99
+ URL url = Resources.getResource(BASIC_RESOURCE_PATH + fileName);
100
+ return FileSystems.getDefault().getPath(new File(url.toURI()).getAbsolutePath());
101
+ }
102
+
103
+ }
@@ -0,0 +1,68 @@
1
+ package org.embulk.output.postgresql;
2
+
3
+ import org.embulk.test.EmbulkTests;
4
+ import org.embulk.test.TestingEmbulk;
5
+
6
+ import com.google.common.base.Throwables;
7
+ import com.google.common.io.ByteStreams;
8
+
9
+ import java.io.IOException;
10
+ import java.nio.file.Files;
11
+ import java.nio.file.Path;
12
+
13
+ import jnr.ffi.Platform;
14
+ import jnr.ffi.Platform.OS;
15
+
16
+ import org.embulk.config.ConfigSource;
17
+
18
+ import static java.util.Locale.ENGLISH;
19
+ import static org.embulk.test.EmbulkTests.readSortedFile;
20
+
21
+ public class PostgreSQLTests
22
+ {
23
+ public static ConfigSource baseConfig()
24
+ {
25
+ return EmbulkTests.config("EMBULK_OUTPUT_POSTGRESQL_TEST_CONFIG");
26
+ }
27
+
28
+ public static void execute(String sql)
29
+ {
30
+ System.out.println(sql);
31
+ ConfigSource config = baseConfig();
32
+ ProcessBuilder pb = new ProcessBuilder("psql", "-w", "--set", "ON_ERROR_STOP=1", "-c", sql);
33
+ pb.environment().put("PGUSER", config.get(String.class, "user"));
34
+ pb.environment().put("PGPASSWORD", config.get(String.class, "password"));
35
+ pb.environment().put("PGDATABASE", config.get(String.class, "database"));
36
+ pb.environment().put("PGPORT", config.get(String.class, "port", "5432"));
37
+ pb.redirectErrorStream(true);
38
+ int code;
39
+ try {
40
+ Process process = pb.start();
41
+ ByteStreams.copy(process.getInputStream(), System.out);
42
+ code = process.waitFor();
43
+ } catch (IOException | InterruptedException ex) {
44
+ throw Throwables.propagate(ex);
45
+ }
46
+ if (code != 0) {
47
+ throw new RuntimeException(String.format(ENGLISH,
48
+ "Command finished with non-zero exit code. Exit code is %d.", code));
49
+ }
50
+ }
51
+
52
+ private static String convert(String sql)
53
+ {
54
+ if (Platform.getNativePlatform().getOS().equals(OS.WINDOWS)) {
55
+ // '"' should be '\"' and '\' should be '\\' in Windows
56
+ return sql.replace("\\\\", "\\").replace("\\", "\\\\").replace("\"", "\\\"");
57
+ }
58
+ return sql;
59
+ }
60
+
61
+ public static String selectRecords(TestingEmbulk embulk, String tableName) throws IOException
62
+ {
63
+ Path temp = embulk.createTempFile("txt");
64
+ Files.delete(temp);
65
+ execute("\\copy " + tableName + " to '" + temp.toString().replace("\\", "\\\\") + "' delimiter ','");
66
+ return readSortedFile(temp);
67
+ }
68
+ }
@@ -0,0 +1,44 @@
1
+ drop table if exists test_number;
2
+
3
+ create table test_number (
4
+ id char(4),
5
+ bool_item bool,
6
+ smallint_item smallint,
7
+ int_item int,
8
+ bigint_item bigint,
9
+ real_item real,
10
+ double_item double precision,
11
+ money_item money,
12
+ numeric_item numeric(8,3),
13
+ primary key (id)
14
+ );
15
+
16
+ drop table if exists test_string;
17
+
18
+ create table test_string (
19
+ id int,
20
+ char_item char(4),
21
+ varchar_item varchar(4),
22
+ text_item text,
23
+ primary key (id)
24
+ );
25
+
26
+ drop table if exists test_timestamp;
27
+
28
+ create table test_timestamp (
29
+ id int,
30
+ date_item date,
31
+ time_item time,
32
+ timestamp_item timestamp,
33
+ primary key (id)
34
+ );
35
+
36
+ drop table if exists test_json;
37
+
38
+ create table test_json (
39
+ id int,
40
+ json_item json,
41
+ jsonb_item jsonb,
42
+ primary key (id)
43
+ );
44
+
@@ -0,0 +1,5 @@
1
+ id:long,json_item:json,jsonb_item:json
2
+ 1,null,null
3
+ 2,88,99
4
+ 3,{"x":"@"},{"y":{"z":[5]}}
5
+ 4,,
@@ -0,0 +1,2 @@
1
+ table: test_json
2
+ mode: insert
@@ -0,0 +1,4 @@
1
+ 1,null,null
2
+ 2,88,99
3
+ 3,{"x":"@"},{"y": {"z": [5]}}
4
+ 4,\N,\N
@@ -0,0 +1,5 @@
1
+ id:string,bool_item:long,smallint_item:long,int_item:long,bigint_item:long,real_item:double,double_item:double,money_item:string,numeric_item:string
2
+ A001,0,0,0,0,0,0,0,0
3
+ A002,1,12345,123456789,123456789012,123.45,123456.789,1234,1234.567
4
+ A003,0,-1,-1,-1,-1,-1,-1,-1
5
+ A004,,,,,,,,
@@ -0,0 +1,2 @@
1
+ table: test_number
2
+ mode: insert
@@ -0,0 +1,4 @@
1
+ A001,f,0,0,0,0,0,\\0,0.000
2
+ A002,t,12345,123456789,123456789012,123.45,123456.789,\\1\,234,1234.567
3
+ A003,f,-1,-1,-1,-1,-1,-\\1,-1.000
4
+ A004,\N,\N,\N,\N,\N,\N,\N,\N
@@ -0,0 +1,4 @@
1
+ id:long,char_item:string,varchar_item:string,text_item:string
2
+ 1,a,b,c
3
+ 2,abc,def,ABCDEFGHIJ
4
+ 3,,,
@@ -0,0 +1,2 @@
1
+ table: test_string
2
+ mode: insert
@@ -0,0 +1,3 @@
1
+ 1,a ,b,c
2
+ 2,abc ,def,ABCDEFGHIJ
3
+ 3,\N,\N,\N
@@ -0,0 +1,3 @@
1
+ id:long,date_item:timestamp,time_item:timestamp,timestamp_item:timestamp
2
+ 1,2019-1-2 00:00:00.000 +0900,2001-1-1 12:34:56.000 +0900,2019-12-31 23:59:59.000 +0900
3
+ 2,,,
@@ -0,0 +1,2 @@
1
+ table: test_timestamp
2
+ mode: insert
@@ -0,0 +1,2 @@
1
+ 1,2019-01-01,03:34:56,2019-12-31 14:59:59
2
+ 2,\N,\N,\N
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-postgresql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-30 00:00:00.000000000 Z
11
+ date: 2019-05-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Inserts or updates records to a table.
14
14
  email:
@@ -19,8 +19,8 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - README.md
21
21
  - build.gradle
22
- - classpath/embulk-output-jdbc-0.8.2.jar
23
- - classpath/embulk-output-postgresql-0.8.2.jar
22
+ - classpath/embulk-output-jdbc-0.8.3.jar
23
+ - classpath/embulk-output-postgresql-0.8.3.jar
24
24
  - default_jdbc_driver/postgresql-9.4-1205-jdbc41.jar
25
25
  - lib/embulk/output/postgresql.rb
26
26
  - src/main/java/org/embulk/output/PostgreSQLOutputPlugin.java
@@ -29,6 +29,21 @@ files:
29
29
  - src/main/java/org/embulk/output/postgresql/PostgreSQLOutputConnection.java
30
30
  - src/main/java/org/embulk/output/postgresql/PostgreSQLOutputConnector.java
31
31
  - src/main/java/org/embulk/output/postgresql/setter/PostgreSQLColumnSetterFactory.java
32
+ - src/test/java/org/embulk/output/postgresql/BasicTest.java
33
+ - src/test/java/org/embulk/output/postgresql/PostgreSQLTests.java
34
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/setup.sql
35
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_json.csv
36
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_json.yml
37
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_json_expected.csv
38
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_number.csv
39
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_number.yml
40
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_number_expected.csv
41
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_string.csv
42
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_string.yml
43
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_string_expected.csv
44
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_timestamp.csv
45
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_timestamp.yml
46
+ - src/test/resources/org/embulk/output/postgresql/test/expect/basic/test_timestamp_expected.csv
32
47
  homepage: https://github.com/embulk/embulk-output-jdbc
33
48
  licenses:
34
49
  - Apache 2.0
Binary file