embulk-output-postgresql 0.4.0 → 0.4.1

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.
@@ -1,157 +1,157 @@
1
- package org.embulk.output.postgresql;
2
-
3
- import java.util.List;
4
- import java.sql.Connection;
5
- import java.sql.SQLException;
6
- import java.sql.Statement;
7
- import org.postgresql.copy.CopyManager;
8
- import org.postgresql.core.BaseConnection;
9
- import org.embulk.spi.Exec;
10
- import org.embulk.output.jdbc.JdbcOutputConnection;
11
- import org.embulk.output.jdbc.JdbcColumn;
12
- import org.embulk.output.jdbc.JdbcSchema;
13
-
14
- public class PostgreSQLOutputConnection
15
- extends JdbcOutputConnection
16
- {
17
- public PostgreSQLOutputConnection(Connection connection, String schemaName, boolean autoCommit)
18
- throws SQLException
19
- {
20
- super(connection, schemaName);
21
- connection.setAutoCommit(autoCommit);
22
- }
23
-
24
- public String buildCopySql(String toTable, JdbcSchema toTableSchema)
25
- {
26
- StringBuilder sb = new StringBuilder();
27
-
28
- sb.append("COPY ");
29
- quoteIdentifierString(sb, toTable);
30
- sb.append(" (");
31
- for (int i=0; i < toTableSchema.getCount(); i++) {
32
- if (i != 0) { sb.append(", "); }
33
- quoteIdentifierString(sb, toTableSchema.getColumnName(i));
34
- }
35
- sb.append(") ");
36
- sb.append("FROM STDIN");
37
-
38
- return sb.toString();
39
- }
40
-
41
- public CopyManager newCopyManager() throws SQLException
42
- {
43
- return new CopyManager((BaseConnection) connection);
44
- }
45
-
46
- @Override
47
- protected String buildCollectMergeSql(List<String> fromTables, JdbcSchema schema, String toTable, List<String> mergeKeys) throws SQLException
48
- {
49
- StringBuilder sb = new StringBuilder();
50
-
51
- sb.append("WITH updated AS (");
52
- sb.append("UPDATE ");
53
- quoteIdentifierString(sb, toTable);
54
- sb.append(" SET ");
55
- for (int i=0; i < schema.getCount(); i++) {
56
- if (i != 0) { sb.append(", "); }
57
- quoteIdentifierString(sb, schema.getColumnName(i));
58
- sb.append(" = S.");
59
- quoteIdentifierString(sb, schema.getColumnName(i));
60
- }
61
- sb.append(" FROM (");
62
- for (int i=0; i < fromTables.size(); i++) {
63
- if (i != 0) { sb.append(" UNION ALL "); }
64
- sb.append("SELECT ");
65
- for(int j=0; j < schema.getCount(); j++) {
66
- if (j != 0) { sb.append(", "); }
67
- quoteIdentifierString(sb, schema.getColumnName(j));
68
- }
69
- sb.append(" FROM ");
70
- quoteIdentifierString(sb, fromTables.get(i));
71
- }
72
- sb.append(") S");
73
- sb.append(" WHERE ");
74
- for (int i=0; i < mergeKeys.size(); i++) {
75
- if (i != 0) { sb.append(" AND "); }
76
- quoteIdentifierString(sb, toTable);
77
- sb.append(".");
78
- quoteIdentifierString(sb, mergeKeys.get(i));
79
- sb.append(" = ");
80
- sb.append("S.");
81
- quoteIdentifierString(sb, mergeKeys.get(i));
82
- }
83
- sb.append(" RETURNING ");
84
- for (int i=0; i < mergeKeys.size(); i++) {
85
- if (i != 0) { sb.append(", "); }
86
- sb.append("S.");
87
- quoteIdentifierString(sb, mergeKeys.get(i));
88
- }
89
- sb.append(") ");
90
-
91
- sb.append("INSERT INTO ");
92
- quoteIdentifierString(sb, toTable);
93
- sb.append(" (");
94
- for (int i=0; i < schema.getCount(); i++) {
95
- if (i != 0) { sb.append(", "); }
96
- quoteIdentifierString(sb, schema.getColumnName(i));
97
- }
98
- sb.append(") ");
99
- sb.append("SELECT DISTINCT ON (");
100
- for (int i=0; i < mergeKeys.size(); i++) {
101
- if (i != 0) { sb.append(", "); }
102
- quoteIdentifierString(sb, mergeKeys.get(i));
103
- }
104
- sb.append(") * FROM (");
105
- for (int i=0; i < fromTables.size(); i++) {
106
- if (i != 0) { sb.append(" UNION ALL "); }
107
- sb.append("SELECT ");
108
- for(int j=0; j < schema.getCount(); j++) {
109
- if (j != 0) { sb.append(", "); }
110
- quoteIdentifierString(sb, schema.getColumnName(j));
111
- }
112
- sb.append(" FROM ");
113
- quoteIdentifierString(sb, fromTables.get(i));
114
- }
115
- sb.append(") S ");
116
- sb.append("WHERE NOT EXISTS (");
117
- sb.append("SELECT 1 FROM updated WHERE ");
118
- for (int i=0; i < mergeKeys.size(); i++) {
119
- if (i != 0) { sb.append(" AND "); }
120
- sb.append("S.");
121
- quoteIdentifierString(sb, mergeKeys.get(i));
122
- sb.append(" = ");
123
- sb.append("updated.");
124
- quoteIdentifierString(sb, mergeKeys.get(i));
125
- }
126
- sb.append(") ");
127
-
128
- return sb.toString();
129
- }
130
-
131
- protected void collectReplaceView(List<String> fromTables, JdbcSchema schema, String toTable) throws SQLException
132
- {
133
- Statement stmt = connection.createStatement();
134
- try {
135
- String sql = buildCollectInsertSql(fromTables, schema, toTable);
136
- executeUpdate(stmt, sql);
137
- commitIfNecessary(connection);
138
- } catch (SQLException ex) {
139
- throw safeRollback(connection, ex);
140
- } finally {
141
- stmt.close();
142
- }
143
- }
144
-
145
- @Override
146
- protected String buildColumnTypeName(JdbcColumn c)
147
- {
148
- switch(c.getSimpleTypeName()) {
149
- case "CLOB":
150
- return "TEXT";
151
- case "BLOB":
152
- return "BYTEA";
153
- default:
154
- return super.buildColumnTypeName(c);
155
- }
156
- }
157
- }
1
+ package org.embulk.output.postgresql;
2
+
3
+ import java.util.List;
4
+ import java.sql.Connection;
5
+ import java.sql.SQLException;
6
+ import java.sql.Statement;
7
+ import org.postgresql.copy.CopyManager;
8
+ import org.postgresql.core.BaseConnection;
9
+ import org.embulk.spi.Exec;
10
+ import org.embulk.output.jdbc.JdbcOutputConnection;
11
+ import org.embulk.output.jdbc.JdbcColumn;
12
+ import org.embulk.output.jdbc.JdbcSchema;
13
+
14
+ public class PostgreSQLOutputConnection
15
+ extends JdbcOutputConnection
16
+ {
17
+ public PostgreSQLOutputConnection(Connection connection, String schemaName, boolean autoCommit)
18
+ throws SQLException
19
+ {
20
+ super(connection, schemaName);
21
+ connection.setAutoCommit(autoCommit);
22
+ }
23
+
24
+ public String buildCopySql(String toTable, JdbcSchema toTableSchema)
25
+ {
26
+ StringBuilder sb = new StringBuilder();
27
+
28
+ sb.append("COPY ");
29
+ quoteIdentifierString(sb, toTable);
30
+ sb.append(" (");
31
+ for (int i=0; i < toTableSchema.getCount(); i++) {
32
+ if (i != 0) { sb.append(", "); }
33
+ quoteIdentifierString(sb, toTableSchema.getColumnName(i));
34
+ }
35
+ sb.append(") ");
36
+ sb.append("FROM STDIN");
37
+
38
+ return sb.toString();
39
+ }
40
+
41
+ public CopyManager newCopyManager() throws SQLException
42
+ {
43
+ return new CopyManager((BaseConnection) connection);
44
+ }
45
+
46
+ @Override
47
+ protected String buildCollectMergeSql(List<String> fromTables, JdbcSchema schema, String toTable, List<String> mergeKeys) throws SQLException
48
+ {
49
+ StringBuilder sb = new StringBuilder();
50
+
51
+ sb.append("WITH updated AS (");
52
+ sb.append("UPDATE ");
53
+ quoteIdentifierString(sb, toTable);
54
+ sb.append(" SET ");
55
+ for (int i=0; i < schema.getCount(); i++) {
56
+ if (i != 0) { sb.append(", "); }
57
+ quoteIdentifierString(sb, schema.getColumnName(i));
58
+ sb.append(" = S.");
59
+ quoteIdentifierString(sb, schema.getColumnName(i));
60
+ }
61
+ sb.append(" FROM (");
62
+ for (int i=0; i < fromTables.size(); i++) {
63
+ if (i != 0) { sb.append(" UNION ALL "); }
64
+ sb.append("SELECT ");
65
+ for(int j=0; j < schema.getCount(); j++) {
66
+ if (j != 0) { sb.append(", "); }
67
+ quoteIdentifierString(sb, schema.getColumnName(j));
68
+ }
69
+ sb.append(" FROM ");
70
+ quoteIdentifierString(sb, fromTables.get(i));
71
+ }
72
+ sb.append(") S");
73
+ sb.append(" WHERE ");
74
+ for (int i=0; i < mergeKeys.size(); i++) {
75
+ if (i != 0) { sb.append(" AND "); }
76
+ quoteIdentifierString(sb, toTable);
77
+ sb.append(".");
78
+ quoteIdentifierString(sb, mergeKeys.get(i));
79
+ sb.append(" = ");
80
+ sb.append("S.");
81
+ quoteIdentifierString(sb, mergeKeys.get(i));
82
+ }
83
+ sb.append(" RETURNING ");
84
+ for (int i=0; i < mergeKeys.size(); i++) {
85
+ if (i != 0) { sb.append(", "); }
86
+ sb.append("S.");
87
+ quoteIdentifierString(sb, mergeKeys.get(i));
88
+ }
89
+ sb.append(") ");
90
+
91
+ sb.append("INSERT INTO ");
92
+ quoteIdentifierString(sb, toTable);
93
+ sb.append(" (");
94
+ for (int i=0; i < schema.getCount(); i++) {
95
+ if (i != 0) { sb.append(", "); }
96
+ quoteIdentifierString(sb, schema.getColumnName(i));
97
+ }
98
+ sb.append(") ");
99
+ sb.append("SELECT DISTINCT ON (");
100
+ for (int i=0; i < mergeKeys.size(); i++) {
101
+ if (i != 0) { sb.append(", "); }
102
+ quoteIdentifierString(sb, mergeKeys.get(i));
103
+ }
104
+ sb.append(") * FROM (");
105
+ for (int i=0; i < fromTables.size(); i++) {
106
+ if (i != 0) { sb.append(" UNION ALL "); }
107
+ sb.append("SELECT ");
108
+ for(int j=0; j < schema.getCount(); j++) {
109
+ if (j != 0) { sb.append(", "); }
110
+ quoteIdentifierString(sb, schema.getColumnName(j));
111
+ }
112
+ sb.append(" FROM ");
113
+ quoteIdentifierString(sb, fromTables.get(i));
114
+ }
115
+ sb.append(") S ");
116
+ sb.append("WHERE NOT EXISTS (");
117
+ sb.append("SELECT 1 FROM updated WHERE ");
118
+ for (int i=0; i < mergeKeys.size(); i++) {
119
+ if (i != 0) { sb.append(" AND "); }
120
+ sb.append("S.");
121
+ quoteIdentifierString(sb, mergeKeys.get(i));
122
+ sb.append(" = ");
123
+ sb.append("updated.");
124
+ quoteIdentifierString(sb, mergeKeys.get(i));
125
+ }
126
+ sb.append(") ");
127
+
128
+ return sb.toString();
129
+ }
130
+
131
+ protected void collectReplaceView(List<String> fromTables, JdbcSchema schema, String toTable) throws SQLException
132
+ {
133
+ Statement stmt = connection.createStatement();
134
+ try {
135
+ String sql = buildCollectInsertSql(fromTables, schema, toTable);
136
+ executeUpdate(stmt, sql);
137
+ commitIfNecessary(connection);
138
+ } catch (SQLException ex) {
139
+ throw safeRollback(connection, ex);
140
+ } finally {
141
+ stmt.close();
142
+ }
143
+ }
144
+
145
+ @Override
146
+ protected String buildColumnTypeName(JdbcColumn c)
147
+ {
148
+ switch(c.getSimpleTypeName()) {
149
+ case "CLOB":
150
+ return "TEXT";
151
+ case "BLOB":
152
+ return "BYTEA";
153
+ default:
154
+ return super.buildColumnTypeName(c);
155
+ }
156
+ }
157
+ }
@@ -1,40 +1,40 @@
1
- package org.embulk.output.postgresql;
2
-
3
- import java.util.Properties;
4
- import java.sql.Driver;
5
- import java.sql.Connection;
6
- import java.sql.SQLException;
7
- import org.embulk.output.jdbc.JdbcOutputConnector;
8
- import org.embulk.output.jdbc.JdbcOutputConnection;
9
-
10
- public class PostgreSQLOutputConnector
11
- implements JdbcOutputConnector
12
- {
13
- private static final Driver driver = new org.postgresql.Driver();
14
-
15
- private final String url;
16
- private final Properties properties;
17
- private final String schemaName;
18
-
19
- public PostgreSQLOutputConnector(String url, Properties properties, String schemaName)
20
- {
21
- this.url = url;
22
- this.properties = properties;
23
- this.schemaName = schemaName;
24
- }
25
-
26
- @Override
27
- public PostgreSQLOutputConnection connect(boolean autoCommit) throws SQLException
28
- {
29
- Connection c = driver.connect(url, properties);
30
- try {
31
- PostgreSQLOutputConnection con = new PostgreSQLOutputConnection(c, schemaName, autoCommit);
32
- c = null;
33
- return con;
34
- } finally {
35
- if (c != null) {
36
- c.close();
37
- }
38
- }
39
- }
40
- }
1
+ package org.embulk.output.postgresql;
2
+
3
+ import java.util.Properties;
4
+ import java.sql.Driver;
5
+ import java.sql.Connection;
6
+ import java.sql.SQLException;
7
+ import org.embulk.output.jdbc.JdbcOutputConnector;
8
+ import org.embulk.output.jdbc.JdbcOutputConnection;
9
+
10
+ public class PostgreSQLOutputConnector
11
+ implements JdbcOutputConnector
12
+ {
13
+ private static final Driver driver = new org.postgresql.Driver();
14
+
15
+ private final String url;
16
+ private final Properties properties;
17
+ private final String schemaName;
18
+
19
+ public PostgreSQLOutputConnector(String url, Properties properties, String schemaName)
20
+ {
21
+ this.url = url;
22
+ this.properties = properties;
23
+ this.schemaName = schemaName;
24
+ }
25
+
26
+ @Override
27
+ public PostgreSQLOutputConnection connect(boolean autoCommit) throws SQLException
28
+ {
29
+ Connection c = driver.connect(url, properties);
30
+ try {
31
+ PostgreSQLOutputConnection con = new PostgreSQLOutputConnection(c, schemaName, autoCommit);
32
+ c = null;
33
+ return con;
34
+ } finally {
35
+ if (c != null) {
36
+ c.close();
37
+ }
38
+ }
39
+ }
40
+ }
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.4.0
4
+ version: 0.4.1
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-06-11 00:00:00.000000000 Z
11
+ date: 2015-07-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Inserts or updates records to a table.
14
14
  email:
@@ -25,8 +25,8 @@ files:
25
25
  - src/main/java/org/embulk/output/postgresql/PostgreSQLCopyBatchInsert.java
26
26
  - src/main/java/org/embulk/output/postgresql/PostgreSQLOutputConnection.java
27
27
  - src/main/java/org/embulk/output/postgresql/PostgreSQLOutputConnector.java
28
- - classpath/embulk-output-jdbc-0.4.0.jar
29
- - classpath/embulk-output-postgresql-0.4.0.jar
28
+ - classpath/embulk-output-jdbc-0.4.1.jar
29
+ - classpath/embulk-output-postgresql-0.4.1.jar
30
30
  - classpath/jna-4.1.0.jar
31
31
  - classpath/jna-platform-4.1.0.jar
32
32
  - classpath/postgresql-9.4-1200-jdbc41.jar