embulk-filter-copy 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -1
  3. data/README.md +5 -1
  4. data/build.gradle +6 -5
  5. data/example/config.yml +1 -0
  6. data/example/data.tsv +5 -5
  7. data/gradle/wrapper/gradle-wrapper.jar +0 -0
  8. data/gradle/wrapper/gradle-wrapper.properties +1 -2
  9. data/gradlew +13 -10
  10. data/src/main/java/org/embulk/filter/copy/CopyFilterPlugin.java +26 -37
  11. data/src/main/java/org/embulk/filter/copy/forward/{ForwardBaseTask.java → ForwardParentTask.java} +1 -1
  12. data/src/main/java/org/embulk/filter/copy/forward/InForwardEventReader.java +67 -62
  13. data/src/main/java/org/embulk/filter/copy/forward/InForwardService.java +102 -35
  14. data/src/main/java/org/embulk/filter/copy/forward/OutForwardEventBuilder.java +66 -54
  15. data/src/main/java/org/embulk/filter/copy/forward/OutForwardService.java +2 -2
  16. data/src/main/java/org/embulk/filter/copy/plugin/InternalForwardInputPlugin.java +11 -13
  17. data/src/main/java/org/embulk/filter/copy/runner/AsyncEmbulkRunnerService.java +32 -0
  18. data/src/main/java/org/embulk/filter/copy/runner/EmbulkRunner.java +124 -0
  19. data/src/main/java/org/embulk/filter/copy/spi/DataBuilder.java +41 -0
  20. data/src/main/java/org/embulk/filter/copy/spi/DataReader.java +41 -0
  21. data/src/main/java/org/embulk/filter/copy/spi/ElapsedTime.java +81 -0
  22. data/src/main/java/org/embulk/filter/copy/spi/PageBuilder.java +16 -0
  23. data/src/main/java/org/embulk/filter/copy/spi/PageReader.java +13 -0
  24. data/src/main/java/org/embulk/filter/copy/{util → spi}/StandardColumnVisitor.java +6 -6
  25. data/src/test/java/org/embulk/filter/copy/TestCopyFilterPlugin.java +0 -11
  26. metadata +24 -16
  27. data/src/main/java/org/embulk/filter/copy/executor/EmbulkExecutor.java +0 -105
  28. data/src/main/java/org/embulk/filter/copy/executor/LocalThreadExecutor.java +0 -96
  29. data/src/main/java/org/embulk/filter/copy/forward/InForwardVisitor.java +0 -63
  30. data/src/main/java/org/embulk/filter/copy/forward/OutForwardVisitor.java +0 -63
  31. data/src/main/java/org/embulk/filter/copy/util/ElapsedTime.java +0 -165
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d2500f6ad78f1db21f25444a8454312d190d3229
4
- data.tar.gz: 6b3f59c7329235aeaff13ee152a235617b282ab1
3
+ metadata.gz: 8c71648337b5b1edcc9bee9e7839dcaca696cfe2
4
+ data.tar.gz: 59fd5e9cf1092a9880552074a0e9e404d4fba62c
5
5
  SHA512:
6
- metadata.gz: 6498b12ec28031b054e31cd14a35a37540942a23fcd6b0dd95149609afa0797a201badadc0ccddecb1baf49dfdfbfbd281dc5da9fa95d875bee69e25be0c90b8
7
- data.tar.gz: 0f1552016b5e7417a69a868a73820c26451c7f7e2b13fb0dc773d031be8c70e4fbb660de74fcf8bf32fed9bf28c8adb8f2567379da6a47615284ad94f8db1a22
6
+ metadata.gz: 0b35ef1db23ce24ffa0c76d82455f3053e57db6c629490880c0e7ec4c33fcb3b906412030cc4974f938522c474aec0a8e29f8b1d085326a455f2da032ec7fc34
7
+ data.tar.gz: f4dac991cee674b2a71e92539f3d90ca4719a6570e4e10c2fc30d1cf19aadef0a098c2841e9f457cdc23882cf8a1837c1191ac736480ff1153d5d6f86368c74b
@@ -1,3 +1,8 @@
1
+ 0.1.0 (2019-09-26)
2
+ ==================
3
+ * Follow embulk v0.9.x interfaces.
4
+ * Packing as MessagePack become faster because, when parsing or formatting `Timestamp` values, use only `epochSecond` and `nanoAdjustment` instead of `TimestampFormatter` and `TimestampParser`.
5
+
1
6
  0.0.2 (2017-07-01)
2
7
  ==================
3
8
  * Write a default values test.
@@ -5,4 +10,4 @@
5
10
 
6
11
  0.0.1 (2017-06-07)
7
12
  ==================
8
- * first release.
13
+ * first release.
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Copy records and run another embulk by using them as input data source.
4
4
 
5
+ The Document for Japanese is [here](http://qiita.com/Civitaspo/items/da8483c28817071d90dc).
6
+
5
7
  ## Overview
6
8
 
7
9
  * **Plugin type**: filter
@@ -53,7 +55,9 @@ $ embulk run example/config.yml -Ilib
53
55
 
54
56
  ### Run test:
55
57
 
56
- TBD
58
+ ```shell
59
+ $ ./gradlew test
60
+ ```
57
61
 
58
62
  ### Release gem:
59
63
  Fix [build.gradle](./build.gradle), then
@@ -14,22 +14,23 @@ configurations {
14
14
  provided
15
15
  }
16
16
 
17
- version = "0.0.2"
17
+ version = "0.1.0"
18
18
 
19
19
  sourceCompatibility = 1.8
20
20
  targetCompatibility = 1.8
21
21
 
22
22
  dependencies {
23
- compile "org.embulk:embulk-core:0.8.23"
24
- provided "org.embulk:embulk-core:0.8.23"
25
- compile "com.okumin:influent-java:0.2.+"
23
+ compile "org.embulk:embulk-core:0.9.18"
24
+ provided "org.embulk:embulk-core:0.9.18"
25
+ compile 'com.google.guava:guava:23.0'
26
26
  // The latest version of fluency is 1.3.0, but
27
27
  // This plugin use 1.1.0 for using the same msgpack version as embulk.
28
28
  // ref. https://github.com/komamitsu/fluency/compare/1.1.0...1.3.0
29
29
  compile "org.komamitsu:fluency:1.1.0"
30
+ compile 'com.okumin:influent-java:0.3.0'
30
31
 
31
32
  testCompile "junit:junit:4.+"
32
- testCompile "org.embulk:embulk-core:0.8.23:tests"
33
+ testCompile "org.embulk:embulk-core:0.9.18:tests"
33
34
  }
34
35
 
35
36
  task classpath(type: Copy, dependsOn: ["jar"]) {
@@ -10,6 +10,7 @@ in:
10
10
  - { name: id, type: long }
11
11
  - { name: description, type: string }
12
12
  - { name: name, type: string }
13
+ - { name: t, type: timestamp, format: "%Y-%m-%d %H:%M:%S %z"}
13
14
  - { name: payload, type: json}
14
15
  stop_on_invalid_record: true
15
16
 
@@ -1,5 +1,5 @@
1
- 0 c20ef94602 c212c89f91 {"a":0,"b":"99"}
2
- 1 330a9fc33a e25b33b616 {"a":1,"b":"a9"}
3
- 2 707b3b7588 90823c6a1f {"a":2,"b":"96"}
4
- 3 8d8288e66f {"a":3,"b":"86"}
5
- 4 c54d8b6481 e56a40571c {"a":4,"b":"d2"}
1
+ 0 c20ef94602 c212c89f91 2017-10-24 03:54:35 +0900 {"a":0,"b":"99"}
2
+ 1 330a9fc33a e25b33b616 2017-10-22 19:53:31 +0900 {"a":1,"b":"a9"}
3
+ 2 707b3b7588 90823c6a1f 2017-10-23 23:42:43 +0900 {"a":2,"b":"96"}
4
+ 3 8d8288e66f 2017-10-22 06:12:13 +0900 {"a":3,"b":"86"}
5
+ 4 c54d8b6481 e56a40571c 2017-10-23 04:59:16 +0900 {"a":4,"b":"d2"}
@@ -1,6 +1,5 @@
1
- #Sun Jan 08 00:35:58 PST 2017
2
1
  distributionBase=GRADLE_USER_HOME
3
2
  distributionPath=wrapper/dists
4
3
  zipStoreBase=GRADLE_USER_HOME
5
4
  zipStorePath=wrapper/dists
6
- distributionUrl=https\://services.gradle.org/distributions/gradle-3.2.1-bin.zip
5
+ distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-bin.zip
data/gradlew CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bash
1
+ #!/usr/bin/env sh
2
2
 
3
3
  ##############################################################################
4
4
  ##
@@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS=""
33
33
  # Use the maximum available, or set MAX_FD != -1 to use that value.
34
34
  MAX_FD="maximum"
35
35
 
36
- warn ( ) {
36
+ warn () {
37
37
  echo "$*"
38
38
  }
39
39
 
40
- die ( ) {
40
+ die () {
41
41
  echo
42
42
  echo "$*"
43
43
  echo
@@ -154,16 +154,19 @@ if $cygwin ; then
154
154
  esac
155
155
  fi
156
156
 
157
- # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
158
- function splitJvmOpts() {
159
- JVM_OPTS=("$@")
157
+ # Escape application args
158
+ save () {
159
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160
+ echo " "
160
161
  }
161
- eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
162
- JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
162
+ APP_ARGS=$(save "$@")
163
+
164
+ # Collect all arguments for the java command, following the shell quoting and substitution rules
165
+ eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
163
166
 
164
167
  # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
165
- if [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]]; then
168
+ if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
166
169
  cd "$(dirname "$0")"
167
170
  fi
168
171
 
169
- exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
172
+ exec "$JAVACMD" "$@"
@@ -5,21 +5,21 @@ import org.embulk.config.ConfigDefault;
5
5
  import org.embulk.config.ConfigSource;
6
6
  import org.embulk.config.Task;
7
7
  import org.embulk.config.TaskSource;
8
- import org.embulk.filter.copy.executor.EmbulkExecutor;
9
8
  import org.embulk.filter.copy.forward.InForwardService;
10
9
  import org.embulk.filter.copy.forward.OutForwardEventBuilder;
11
10
  import org.embulk.filter.copy.forward.OutForwardService;
12
- import org.embulk.filter.copy.forward.OutForwardVisitor;
13
11
  import org.embulk.filter.copy.plugin.InternalForwardInputPlugin;
14
- import org.embulk.filter.copy.util.StandardColumnVisitor;
12
+ import org.embulk.filter.copy.runner.AsyncEmbulkRunnerService;
13
+ import org.embulk.filter.copy.runner.EmbulkRunner;
14
+ import org.embulk.filter.copy.spi.PageBuilder;
15
+ import org.embulk.filter.copy.spi.PageReader;
16
+ import org.embulk.filter.copy.spi.StandardColumnVisitor;
17
+ import org.embulk.spi.ColumnVisitor;
15
18
  import org.embulk.spi.Exec;
16
19
  import org.embulk.spi.FilterPlugin;
17
20
  import org.embulk.spi.Page;
18
- import org.embulk.spi.PageBuilder;
19
21
  import org.embulk.spi.PageOutput;
20
- import org.embulk.spi.PageReader;
21
22
  import org.embulk.spi.Schema;
22
- import org.embulk.spi.time.TimestampFormatter;
23
23
  import org.slf4j.Logger;
24
24
 
25
25
  import java.util.List;
@@ -45,14 +45,13 @@ public class CopyFilterPlugin
45
45
  }
46
46
 
47
47
  public interface PluginTask
48
- extends Task, EmbulkExecutor.Task, TimestampFormatter.Task,
49
- OutForwardService.Task, InForwardService.Task
48
+ extends Task, OutForwardService.Task, InForwardService.Task
50
49
  {
51
50
  @Config("config")
52
51
  EmbulkConfig getConfig();
53
52
  }
54
53
 
55
- private ConfigSource configure(PluginTask task, Schema schema)
54
+ private EmbulkRunner configure(PluginTask task, Schema schema)
56
55
  {
57
56
  ConfigSource inputConfig = Exec.newConfigSource();
58
57
  inputConfig.set("type", InternalForwardInputPlugin.PLUGIN_NAME);
@@ -60,27 +59,21 @@ public class CopyFilterPlugin
60
59
  inputConfig.set("message_tag", task.getMessageTag());
61
60
  inputConfig.set("shutdown_tag", task.getShutdownTag());
62
61
  inputConfig.set("in_forward", task.getInForwardTask());
63
- inputConfig.set("default_timestamp_format", task.getDefaultTimestampFormat());
64
- inputConfig.set("default_timezone", task.getDefaultTimeZone());
65
62
 
66
- ConfigSource embulkRunConfig = Exec.newConfigSource();
67
- embulkRunConfig.set("exec", task.getConfig().getExecConfig());
68
- embulkRunConfig.set("in", inputConfig);
69
- embulkRunConfig.set("filters", task.getConfig().getFilterConfig());
70
- embulkRunConfig.set("out", task.getConfig().getOutputConfig());
71
-
72
- return embulkRunConfig;
63
+ return EmbulkRunner.builder()
64
+ .execConfig(task.getConfig().getExecConfig())
65
+ .inputConfig(inputConfig)
66
+ .filterConfig(task.getConfig().getFilterConfig())
67
+ .outputConfig(task.getConfig().getOutputConfig())
68
+ .build();
73
69
  }
74
70
 
75
- private void withEmbulkRun(EmbulkExecutor executor, ConfigSource config, Runnable r)
71
+ private void withEmbulkRun(AsyncEmbulkRunnerService service, Runnable r)
76
72
  {
77
- executor.setup();
78
- executor.executeAsync(config);
79
-
73
+ service.startAsync();
74
+ service.awaitRunning();
80
75
  r.run();
81
-
82
- executor.waitUntilExecutionFinished();
83
- executor.shutdown();
76
+ service.awaitTerminated();
84
77
  }
85
78
 
86
79
  @Override
@@ -88,12 +81,12 @@ public class CopyFilterPlugin
88
81
  FilterPlugin.Control control)
89
82
  {
90
83
  PluginTask task = config.loadConfig(PluginTask.class);
91
- ConfigSource embulkRunConfig = configure(task, inputSchema);
92
- EmbulkExecutor embulkExecutor = EmbulkExecutor.buildExecutor(task);
84
+ EmbulkRunner embulkRunner = configure(task, inputSchema);
85
+ AsyncEmbulkRunnerService embulkRunnerService = new AsyncEmbulkRunnerService(embulkRunner);
93
86
 
94
- withEmbulkRun(embulkExecutor, embulkRunConfig, () -> {
95
- Schema outputSchema1 = inputSchema;
96
- control.run(task.dump(), outputSchema1);
87
+ withEmbulkRun(embulkRunnerService, () -> {
88
+ Schema outputSchema = inputSchema;
89
+ control.run(task.dump(), outputSchema);
97
90
  OutForwardService.sendShutdownMessage(task);
98
91
  });
99
92
  }
@@ -103,10 +96,6 @@ public class CopyFilterPlugin
103
96
  final Schema outputSchema, final PageOutput output)
104
97
  {
105
98
  final PluginTask task = taskSource.loadTask(PluginTask.class);
106
- TimestampFormatter timestampFormatter = new TimestampFormatter(
107
- task.getJRuby(),
108
- task.getDefaultTimestampFormat(),
109
- task.getDefaultTimeZone());
110
99
 
111
100
  return new PageOutput()
112
101
  {
@@ -114,8 +103,8 @@ public class CopyFilterPlugin
114
103
  private final PageBuilder pageBuilder = new PageBuilder(Exec.getBufferAllocator(), outputSchema, output);
115
104
  private final StandardColumnVisitor standardColumnVisitor = new StandardColumnVisitor(pageReader, pageBuilder);
116
105
  private final OutForwardService outForwardService = new OutForwardService(task);
117
- private final OutForwardEventBuilder eventBuilder = new OutForwardEventBuilder(outputSchema, timestampFormatter);
118
- private final OutForwardVisitor outForwardVisitor = new OutForwardVisitor(pageReader, eventBuilder);
106
+ private final OutForwardEventBuilder eventBuilder = new OutForwardEventBuilder(outputSchema, outForwardService);
107
+ private final ColumnVisitor outForwardVisitor = new StandardColumnVisitor(pageReader, eventBuilder);
119
108
 
120
109
  @Override
121
110
  public void add(Page page)
@@ -123,7 +112,7 @@ public class CopyFilterPlugin
123
112
  pageReader.setPage(page);
124
113
  while (pageReader.nextRecord()) {
125
114
  outputSchema.visitColumns(outForwardVisitor);
126
- eventBuilder.emitMessage(outForwardService);
115
+ eventBuilder.addRecord();
127
116
 
128
117
  outputSchema.visitColumns(standardColumnVisitor);
129
118
  pageBuilder.addRecord();
@@ -4,7 +4,7 @@ import org.embulk.config.Config;
4
4
  import org.embulk.config.ConfigDefault;
5
5
  import org.embulk.config.Task;
6
6
 
7
- public interface ForwardBaseTask
7
+ public interface ForwardParentTask
8
8
  extends Task
9
9
  {
10
10
  @Config("shutdown_tag")
@@ -1,147 +1,152 @@
1
1
  package org.embulk.filter.copy.forward;
2
2
 
3
- import com.google.common.collect.ImmutableMap;
4
- import com.google.common.collect.Maps;
3
+ import com.google.common.collect.Lists;
5
4
  import influent.EventStream;
6
5
  import org.embulk.spi.Column;
7
6
  import org.embulk.spi.Schema;
8
- import org.embulk.spi.json.JsonParser;
9
7
  import org.embulk.spi.time.Timestamp;
10
- import org.embulk.spi.time.TimestampParser;
11
8
  import org.msgpack.value.Value;
9
+ import org.embulk.filter.copy.spi.DataReader;
12
10
 
13
- import java.util.Map;
11
+ import java.util.List;
12
+ import java.util.Optional;
14
13
 
15
14
  public class InForwardEventReader
15
+ implements DataReader
16
16
  {
17
- private final Schema schema;
18
- private final Map<String, Column> columnMap;
19
-
20
- private final JsonParser jsonParser = new JsonParser();
21
- private final TimestampParser timestampParser;
17
+ private final static String VALUES_KEY = "values";
22
18
 
19
+ private final Schema schema;
23
20
  private EventStream event = null;
24
21
  private int eventMessageCount = 0;
25
22
 
26
23
  private int readCount = 0;
27
- private Map<String, Value> message = Maps.newHashMap();
24
+ private List<Value> values;
28
25
 
29
- public InForwardEventReader(Schema schema, TimestampParser timestampParser)
26
+ public InForwardEventReader(Schema schema)
30
27
  {
31
28
  this.schema = schema;
32
- ImmutableMap.Builder<String, Column> builder = ImmutableMap.builder();
33
- schema.getColumns().forEach(column -> builder.put(column.getName(), column));
34
- this.columnMap = builder.build();
35
- this.timestampParser = timestampParser;
36
29
  }
37
30
 
38
- public Schema getSchema()
31
+ public void setEvent(EventStream event)
39
32
  {
40
- return schema;
33
+ this.event = event;
34
+ this.eventMessageCount = event.getEntries().size();
41
35
  }
42
36
 
43
- private Column getColumn(String columnName)
37
+ @Override
38
+ public Schema getSchema()
44
39
  {
45
- return columnMap.get(columnName);
40
+ return schema;
46
41
  }
47
42
 
48
- private Column getColumn(int columnIndex)
43
+ @Override
44
+ public boolean nextRecord()
49
45
  {
50
- return getSchema().getColumn(columnIndex);
51
- }
46
+ if (eventMessageCount <= readCount) {
47
+ return false;
48
+ }
52
49
 
53
- private Value getValue(Column column)
54
- {
55
- return message.get(column.getName());
50
+ Optional<List<Value>> values = event.getEntries().get(readCount++).getRecord().entrySet()
51
+ .stream()
52
+ .filter(valueValueEntry -> valueValueEntry.getKey().asStringValue().asString().contentEquals(VALUES_KEY))
53
+ .map(valueValueEntry -> valueValueEntry.getValue().asArrayValue().list())
54
+ .findFirst();
55
+
56
+ this.values = values.orElse(Lists.newArrayListWithCapacity(schema.getColumnCount()));
57
+ return true;
56
58
  }
57
59
 
58
- public void setEvent(EventStream event)
60
+ private Value getValue(int columnIndex)
59
61
  {
60
- this.event = event;
61
- this.eventMessageCount = event.getEntries().size();
62
+ return values.get(columnIndex);
62
63
  }
63
64
 
65
+ @Override
64
66
  public boolean isNull(Column column)
65
67
  {
66
- return getValue(column).isNilValue();
68
+ return isNull(column.getIndex());
67
69
  }
68
70
 
71
+ @Override
69
72
  public boolean isNull(int columnIndex)
70
73
  {
71
- return isNull(getColumn(columnIndex));
74
+ return getValue(columnIndex).isNilValue();
72
75
  }
73
76
 
77
+ @Override
74
78
  public boolean getBoolean(Column column)
75
79
  {
76
- return getValue(column).asBooleanValue().getBoolean();
80
+ return getBoolean(column.getIndex());
77
81
  }
78
82
 
83
+ @Override
79
84
  public boolean getBoolean(int columnIndex)
80
85
  {
81
- return getBoolean(getColumn(columnIndex));
86
+ return getValue(columnIndex).asBooleanValue().getBoolean();
82
87
  }
83
88
 
84
- public long getLong(Column column)
89
+ @Override
90
+ public String getString(Column column)
85
91
  {
86
- return getValue(column).asIntegerValue().asLong();
92
+ return getString(column.getIndex());
87
93
  }
88
94
 
89
- public long getLong(int columnIndex)
95
+ @Override
96
+ public String getString(int columnIndex)
90
97
  {
91
- return getLong(getColumn(columnIndex));
98
+ return getValue(columnIndex).asStringValue().asString();
92
99
  }
93
100
 
94
- public double getDouble(Column column)
101
+ @Override
102
+ public long getLong(Column column)
95
103
  {
96
- return getValue(column).asFloatValue().toDouble();
104
+ return getLong(column.getIndex());
97
105
  }
98
106
 
99
- public double genDouble(int columnIndex)
107
+ @Override
108
+ public long getLong(int columnIndex)
100
109
  {
101
- return getDouble(getColumn(columnIndex));
110
+ return getValue(columnIndex).asIntegerValue().asLong();
102
111
  }
103
112
 
104
- public String getString(Column column)
113
+ @Override
114
+ public double getDouble(Column column)
105
115
  {
106
- return getValue(column).toString();
116
+ return getDouble(column.getIndex());
107
117
  }
108
118
 
109
- public String getString(int columnIndex)
119
+ @Override
120
+ public double getDouble(int columnIndex)
110
121
  {
111
- return getString(getColumn(columnIndex));
122
+ return getValue(columnIndex).asFloatValue().toDouble();
112
123
  }
113
124
 
125
+ @Override
114
126
  public Timestamp getTimestamp(Column column)
115
127
  {
116
- return timestampParser.parse(getString(column));
128
+ return getTimestamp(column.getIndex());
117
129
  }
118
130
 
131
+ @Override
119
132
  public Timestamp getTimestamp(int columnIndex)
120
133
  {
121
- return getTimestamp(getColumn(columnIndex));
134
+ List<Value> seed = getValue(columnIndex).asArrayValue().list();
135
+ long epochSecond = seed.get(0).asIntegerValue().asLong();
136
+ long nanoAdjustment = seed.get(1).asIntegerValue().asLong();
137
+ return Timestamp.ofEpochSecond(epochSecond, nanoAdjustment);
122
138
  }
123
139
 
140
+ @Override
124
141
  public Value getJson(Column column)
125
142
  {
126
- return jsonParser.parse(getString(column));
143
+ return getJson(column.getIndex());
127
144
  }
128
145
 
146
+ @Override
129
147
  public Value getJson(int columnIndex)
130
148
  {
131
- return getJson(getColumn(columnIndex));
149
+ return getValue(columnIndex);
132
150
  }
133
151
 
134
- public boolean nextMessage()
135
- {
136
- if (eventMessageCount <= readCount) {
137
- return false;
138
- }
139
-
140
- ImmutableMap.Builder<String, Value> builder = ImmutableMap.builder();
141
- event.getEntries().get(readCount++).getRecord().entrySet().forEach(
142
- entry -> builder.put(entry.getKey().toString(), entry.getValue())
143
- );
144
- message = builder.build();
145
- return true;
146
- }
147
152
  }