embulk-output-postgresql 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
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