embulk-filter-calcite 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea4ee3ab6303bec568a675a5be2854734b555aca
4
- data.tar.gz: a9508c8f413308b9df668e95c74bcfd998e4b6b9
3
+ metadata.gz: c6676613c81d60cb8384827212e101894fa32b91
4
+ data.tar.gz: 6cca5546a143dd654b42433a70a9ec15099b8714
5
5
  SHA512:
6
- metadata.gz: 132a5257822499c80b5e5b34480a1075e50e5dbc840a37d33238c8d14e22324e794843d7397f87dfd0d083a48f0b99ab9e3b4fdf80cd7effc363fa49457b1113
7
- data.tar.gz: e54a39e9c088c4d861ba22427e9101b32e6bcc8be2685b4627850f2b30c3cdfb2b3625a390622a61b8129af034d65022f4d696f5c7cfc2b00edd0a5fccd8a3a8
6
+ metadata.gz: c4dafb13d6f15b29790c118669fc93254e7ba769c519a60f1de4c656a6f2381c3d2653361164ec021b63d506372445cc2a42366e9d06adf8c36413c7e88484af
7
+ data.tar.gz: d259c8c92690dade9e49caa83543f34e0e59defd33502c7dc39f80e830b51dcd6ac13fde7b3d2fa9d78e03113277d6a9f0e8e57bd0b1f69eef0a99d353f28c27
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.1.3 - 2017-05-18
2
+
3
+ * [maintenance] Use PreparedStatement to improve the performance. [#23]
4
+
5
+ * [maintenance] Deduplicate redundant logging to fix #24. [#25]
6
+
7
+ * [maintenance] Add settings.gradle. [#26]
8
+
1
9
  ## 0.1.2 - 2017-05-15
2
10
 
3
11
  * [new feature] Add warning to change default of case sensitive. [#18]
data/build.gradle CHANGED
@@ -17,7 +17,7 @@ configurations {
17
17
  provided
18
18
  }
19
19
 
20
- version = "0.1.2"
20
+ version = "0.1.3"
21
21
 
22
22
  sourceCompatibility = 1.7
23
23
  targetCompatibility = 1.7
data/settings.gradle ADDED
@@ -0,0 +1 @@
1
+ rootProject.name = 'embulk-filter-calcite'
@@ -6,6 +6,7 @@ import com.google.common.collect.ImmutableList;
6
6
  import com.google.common.collect.ImmutableMap;
7
7
  import com.google.inject.Inject;
8
8
  import java.sql.Connection;
9
+ import java.sql.PreparedStatement;
9
10
  import java.sql.ResultSet;
10
11
  import java.sql.ResultSetMetaData;
11
12
  import java.sql.SQLException;
@@ -55,7 +56,7 @@ public class CalciteFilterPlugin implements FilterPlugin {
55
56
  public void transaction(ConfigSource config, Schema inputSchema, FilterPlugin.Control control) {
56
57
  PluginTask task = config.loadConfig(PluginTask.class);
57
58
  Properties props = System.getProperties(); // TODO should be configured as config option
58
- setupProperties(task, props);
59
+ setupPropertiesFromTransaction(task, props);
59
60
 
60
61
  // Set input schema in PageSchema
61
62
  PageSchema.schema = inputSchema;
@@ -81,14 +82,19 @@ public class CalciteFilterPlugin implements FilterPlugin {
81
82
  }
82
83
  }
83
84
 
84
- private void setupProperties(PluginTask task, Properties props) {
85
- // @see https://calcite.apache.org/docs/adapter.html#jdbc-connect-string-parameters
85
+ private void setupPropertiesFromTransaction(PluginTask task, Properties props) {
86
86
  final ToStringMap options = task.getOptions();
87
87
  if (!options.containsKey("caseSensitive")) {
88
88
  log.warn("JDBC parameter 'caseSensitive' is implicitly set to false as default in");
89
89
  log.warn("embulk-filter-calcite 0.1 but, it's scheduled to change default with true");
90
90
  log.warn("in 0.2. Please use 'options' option to set 'caseSensitive' to false.");
91
91
  }
92
+ setupProperties(task, props);
93
+ }
94
+
95
+ private void setupProperties(PluginTask task, Properties props) {
96
+ // @see https://calcite.apache.org/docs/adapter.html#jdbc-connect-string-parameters
97
+ final ToStringMap options = task.getOptions();
92
98
  props.setProperty("caseSensitive", "false"); // Relax case-sensitive
93
99
  props.setProperty("timeZone", task.getDefaultTimeZone().getID());
94
100
 
@@ -110,6 +116,14 @@ public class CalciteFilterPlugin implements FilterPlugin {
110
116
  }
111
117
  }
112
118
 
119
+ private PreparedStatement createPreparedStatement(Connection conn, String query) {
120
+ try {
121
+ return conn.prepareStatement(query);
122
+ } catch (SQLException e) {
123
+ throw Throwables.propagate(e);
124
+ }
125
+ }
126
+
113
127
  private String buildJdbcUrl() {
114
128
  // build a json model to apply Page storage adaptor
115
129
  // @see https://github.com/apache/calcite/blob/master/example/csv/src/test/resources/model.json
@@ -214,12 +228,13 @@ public class CalciteFilterPlugin implements FilterPlugin {
214
228
  List<ColumnGetter> getters = newColumnGetters(factory, task.getQuerySchema());
215
229
  Properties props = System.getProperties(); // TODO should be configured as config option
216
230
  setupProperties(task, props);
231
+ final Connection conn = newConnection(buildJdbcUrl(), props);
232
+ final PreparedStatement preparedStatement = createPreparedStatement(conn, task.getQuery());
217
233
  return new FilterPageOutput(outputSchema,
218
- task.getQuery(),
219
234
  pageBuilder,
220
235
  pageConverter,
221
236
  getters,
222
- props);
237
+ preparedStatement); // Transfer ownership of preparedStatement to FilterPageOutput
223
238
  }
224
239
 
225
240
  public interface PluginTask
@@ -251,21 +266,21 @@ public class CalciteFilterPlugin implements FilterPlugin {
251
266
  implements PageOutput {
252
267
 
253
268
  private final Schema outputSchema;
254
- private final String query;
255
269
  private final PageBuilder pageBuilder;
256
270
  private final PageConverter pageConverter;
257
271
  private final List<ColumnGetter> getters;
258
- private final Properties props;
272
+ private final PreparedStatement preparedStatement;
259
273
 
260
- private FilterPageOutput(Schema outputSchema, String query, PageBuilder pageBuilder,
274
+ private FilterPageOutput(Schema outputSchema,
275
+ PageBuilder pageBuilder,
261
276
  PageConverter pageConverter,
262
- List<ColumnGetter> getters, Properties props) {
277
+ List<ColumnGetter> getters,
278
+ PreparedStatement preparedStatement) {
263
279
  this.outputSchema = outputSchema;
264
- this.query = query;
265
280
  this.pageBuilder = pageBuilder;
266
281
  this.pageConverter = pageConverter;
267
282
  this.getters = getters;
268
- this.props = props;
283
+ this.preparedStatement = preparedStatement;
269
284
  }
270
285
 
271
286
  @Override
@@ -276,10 +291,8 @@ public class CalciteFilterPlugin implements FilterPlugin {
276
291
  // Set page as TLS variable in PageTable
277
292
  PageTable.page.set(page);
278
293
 
279
- try (Connection conn = newConnection(buildJdbcUrl(), props);
280
- Statement stat = conn.createStatement();
281
- ResultSet result = executeQuery(stat, query)) {
282
294
 
295
+ try (ResultSet result = preparedStatement.executeQuery()) {
283
296
  while (result.next()) {
284
297
  for (int i = 0; i < getters.size(); i++) {
285
298
  int index = i + 1; // JDBC column index begins from 1
@@ -303,6 +316,11 @@ public class CalciteFilterPlugin implements FilterPlugin {
303
316
  @Override
304
317
  public void close() {
305
318
  pageBuilder.close();
319
+ try {
320
+ preparedStatement.close();
321
+ } catch (SQLException e) {
322
+ throw Throwables.propagate(e);
323
+ }
306
324
  }
307
325
  }
308
326
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-filter-calcite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Muga Nishizawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-16 00:00:00.000000000 Z
11
+ date: 2017-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -59,6 +59,7 @@ files:
59
59
  - gradlew
60
60
  - gradlew.bat
61
61
  - lib/embulk/filter/calcite.rb
62
+ - settings.gradle
62
63
  - src/main/java/org/embulk/filter/calcite/CalciteFilterPlugin.java
63
64
  - src/main/java/org/embulk/filter/calcite/PageConverter.java
64
65
  - src/main/java/org/embulk/filter/calcite/adapter/page/PageEnumerator.java
@@ -105,7 +106,7 @@ files:
105
106
  - classpath/commons-lang3-3.2.jar
106
107
  - classpath/commons-logging-1.2.jar
107
108
  - classpath/commons-pool-1.5.4.jar
108
- - classpath/embulk-filter-calcite-0.1.2.jar
109
+ - classpath/embulk-filter-calcite-0.1.3.jar
109
110
  - classpath/embulk-input-jdbc-0.8.2.jar
110
111
  - classpath/guava-19.0.jar
111
112
  - classpath/httpclient-4.5.2.jar