embulk-filter-add_time 0.1.0

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 (35) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +7 -0
  4. data/CHANGELOG.md +3 -0
  5. data/COPYING +14 -0
  6. data/README.md +212 -0
  7. data/build.gradle +82 -0
  8. data/gradle/check.gradle +34 -0
  9. data/gradle/wrapper/gradle-wrapper.jar +0 -0
  10. data/gradle/wrapper/gradle-wrapper.properties +6 -0
  11. data/gradlew +164 -0
  12. data/gradlew.bat +90 -0
  13. data/lib/embulk/filter/add_time.rb +3 -0
  14. data/src/main/java/org/embulk/filter/add_time/AddTimeFilterPlugin.java +208 -0
  15. data/src/main/java/org/embulk/filter/add_time/converter/ColumnConverter.java +14 -0
  16. data/src/main/java/org/embulk/filter/add_time/converter/ColumnDuplicator.java +72 -0
  17. data/src/main/java/org/embulk/filter/add_time/converter/LongValueCastConverter.java +33 -0
  18. data/src/main/java/org/embulk/filter/add_time/converter/SchemaConverter.java +257 -0
  19. data/src/main/java/org/embulk/filter/add_time/converter/SimpleColumnConverter.java +62 -0
  20. data/src/main/java/org/embulk/filter/add_time/converter/StringValueCastConverter.java +33 -0
  21. data/src/main/java/org/embulk/filter/add_time/converter/TimestampValueCastConverter.java +23 -0
  22. data/src/main/java/org/embulk/filter/add_time/converter/ValueCastConverter.java +108 -0
  23. data/src/main/java/org/embulk/filter/add_time/converter/ValueConverter.java +22 -0
  24. data/src/main/java/org/embulk/filter/add_time/converter/ValueNoConverter.java +46 -0
  25. data/src/main/java/org/embulk/filter/add_time/reader/AbstractColumnReader.java +55 -0
  26. data/src/main/java/org/embulk/filter/add_time/reader/BooleanColumnReader.java +35 -0
  27. data/src/main/java/org/embulk/filter/add_time/reader/ColumnReader.java +14 -0
  28. data/src/main/java/org/embulk/filter/add_time/reader/DoubleColumnReader.java +35 -0
  29. data/src/main/java/org/embulk/filter/add_time/reader/LongColumnReader.java +35 -0
  30. data/src/main/java/org/embulk/filter/add_time/reader/StringColumnReader.java +35 -0
  31. data/src/main/java/org/embulk/filter/add_time/reader/TimeValueGenerator.java +177 -0
  32. data/src/main/java/org/embulk/filter/add_time/reader/TimestampColumnReader.java +36 -0
  33. data/src/test/java/org/embulk/filter/add_time/TestAddTimeFilterPlugin.java +416 -0
  34. data/src/test/java/org/embulk/filter/add_time/converter/TestSchemaConverter.java +338 -0
  35. metadata +107 -0
@@ -0,0 +1,338 @@
1
+ package org.embulk.filter.add_time.converter;
2
+
3
+ import com.google.common.collect.ImmutableMap;
4
+ import org.embulk.EmbulkTestRuntime;
5
+ import org.embulk.config.ConfigException;
6
+ import org.embulk.config.ConfigSource;
7
+ import org.embulk.spi.Column;
8
+ import org.embulk.spi.Schema;
9
+ import org.embulk.spi.type.Types;
10
+ import org.junit.Before;
11
+ import org.junit.Rule;
12
+ import org.junit.Test;
13
+ import org.slf4j.Logger;
14
+
15
+ import java.util.ArrayList;
16
+
17
+ import static org.embulk.filter.add_time.TestAddTimeFilterPlugin.pluginTask;
18
+ import static org.embulk.filter.add_time.TestAddTimeFilterPlugin.schema;
19
+ import static org.junit.Assert.assertEquals;
20
+ import static org.junit.Assert.assertTrue;
21
+ import static org.junit.Assert.fail;
22
+
23
+ public class TestSchemaConverter
24
+ {
25
+ @Rule
26
+ public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
27
+
28
+ private Logger log;
29
+ private ConfigSource config;
30
+
31
+ @Before
32
+ public void createResources()
33
+ {
34
+ log = runtime.getExec().getLogger(TestSchemaConverter.class);
35
+ config = runtime.getExec().newConfigSource();
36
+ }
37
+
38
+ @Test
39
+ public void validate()
40
+ {
41
+ // if to_column doesn't exist, throws ConfigException
42
+ {
43
+ ConfigSource conf = this.config.deepCopy()
44
+ .set("from_value", ImmutableMap.of("mode", "upload_time"));
45
+ failSchemaConverterCreation(log, conf, schema("c0", Types.TIMESTAMP));
46
+ }
47
+
48
+ // if both from_column and from_value exist, throws ConfigException
49
+ {
50
+ ConfigSource conf = this.config.deepCopy()
51
+ .set("to_column", ImmutableMap.of("name", "time"))
52
+ .set("from_column", ImmutableMap.of("name", "c0"))
53
+ .set("from_value", ImmutableMap.of("mode", "upload_time"));
54
+ failSchemaConverterCreation(log, conf, schema("c0", Types.TIMESTAMP));
55
+ }
56
+
57
+ // if from_column or from_value doesn't exist, throws ConfigException
58
+ {
59
+ ConfigSource conf = this.config.deepCopy()
60
+ .set("to_column", ImmutableMap.of("name", "time"));
61
+ failSchemaConverterCreation(log, conf, schema("c0", Types.TIMESTAMP));
62
+ }
63
+
64
+ // if from_value type is not string or long, throws ConfigException
65
+ {
66
+ ConfigSource conf = this.config.deepCopy()
67
+ .set("to_column", ImmutableMap.of("name", "time"))
68
+ .set("from_value", ImmutableMap.of("mode", "fixed_time", "value", new ArrayList<Long>()));
69
+ failSchemaConverterCreation(log, conf, schema("c0", Types.TIMESTAMP));
70
+ }
71
+ {
72
+ ConfigSource conf = this.config.deepCopy()
73
+ .set("to_column", ImmutableMap.of("name", "time"))
74
+ .set("from_value", ImmutableMap.of("mode", "incremental_time", "from", new ArrayList<Long>(), "to", new ArrayList<Long>()));
75
+ failSchemaConverterCreation(log, conf, schema("c0", Types.TIMESTAMP));
76
+ }
77
+
78
+ // the type of the column specified as to_column must be 'long' or 'timestamp'
79
+ { // boolean
80
+ ConfigSource conf = this.config.deepCopy()
81
+ .set("to_column", ImmutableMap.of("name", "time", "type", "boolean"))
82
+ .set("from_column", ImmutableMap.of("name", "c0"));
83
+ failSchemaConverterCreation(log, conf, schema("c0", Types.TIMESTAMP));
84
+ }
85
+ { // double
86
+ ConfigSource conf = this.config.deepCopy()
87
+ .set("to_column", ImmutableMap.of("name", "time", "type", "double"))
88
+ .set("from_column", ImmutableMap.of("name", "c0"));
89
+ failSchemaConverterCreation(log, conf, schema("c0", Types.TIMESTAMP));
90
+ }
91
+ { // string
92
+ ConfigSource conf = this.config.deepCopy()
93
+ .set("to_column", ImmutableMap.of("name", "time", "type", "string"))
94
+ .set("from_column", ImmutableMap.of("name", "c0"));
95
+ failSchemaConverterCreation(log, conf, schema("c0", Types.TIMESTAMP));
96
+ }
97
+
98
+ // the type of the column specified as from_column must be 'long', 'timestamp' or 'string'
99
+ {
100
+ ConfigSource conf = this.config.deepCopy()
101
+ .set("to_column", ImmutableMap.of("name", "time"))
102
+ .set("from_column", ImmutableMap.of("name", "c0"));
103
+ failSchemaConverterCreation(log, conf, schema("c0", Types.BOOLEAN)); // boolean
104
+ failSchemaConverterCreation(log, conf, schema("c0", Types.DOUBLE)); // double
105
+ }
106
+ }
107
+
108
+ private static void failSchemaConverterCreation(Logger log, ConfigSource conf, Schema inputSchema)
109
+ {
110
+ try {
111
+ new SchemaConverter(log, pluginTask(conf), inputSchema);
112
+ fail();
113
+ }
114
+ catch (Throwable t) {
115
+ assertTrue(t instanceof ConfigException);
116
+ }
117
+ }
118
+
119
+ @Test
120
+ public void testToColumn()
121
+ {
122
+ ConfigSource config = this.config.deepCopy().set("from_value", ImmutableMap.of("mode", "upload_time"));
123
+
124
+ // timestamp type
125
+ { // default type is timestamp
126
+ ConfigSource conf = config.deepCopy().set("to_column", ImmutableMap.of("name", "time"));
127
+ Schema inputSchema = schema("c0", Types.TIMESTAMP);
128
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
129
+
130
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
131
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
132
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
133
+ }
134
+ {
135
+ ConfigSource conf = config.deepCopy().set("to_column", ImmutableMap.of("name", "time", "type", "timestamp"));
136
+ Schema inputSchema = schema("c0", Types.TIMESTAMP);
137
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
138
+
139
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
140
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
141
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
142
+ }
143
+
144
+ // long type
145
+ { // default unix_timestamp_unit is sec
146
+ ConfigSource conf = config.deepCopy().set("to_column", ImmutableMap.of("name", "time", "type", "long"));
147
+ Schema inputSchema = schema("c0", Types.TIMESTAMP);
148
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
149
+
150
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
151
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
152
+ assertEquals(new Column(1, "time", Types.LONG), outputSchema.getColumn(1));
153
+ }
154
+ { // default unix_timestamp_unit is sec
155
+ ConfigSource conf = config.deepCopy().set("to_column", ImmutableMap.of("name", "time", "type", "long", "unix_timestamp_unit", "milli"));
156
+ Schema inputSchema = schema("c0", Types.TIMESTAMP);
157
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
158
+
159
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
160
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
161
+ assertEquals(new Column(1, "time", Types.LONG), outputSchema.getColumn(1));
162
+ }
163
+
164
+ // renaming
165
+ { // timestamp type
166
+ ConfigSource conf = config.deepCopy().set("to_column", ImmutableMap.of("name", "c0"));
167
+ Schema inputSchema = schema("c0", Types.TIMESTAMP);
168
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
169
+
170
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
171
+ assertEquals(new Column(0, "c0_", Types.TIMESTAMP), outputSchema.getColumn(0));
172
+ assertEquals(new Column(1, "c0", Types.TIMESTAMP), outputSchema.getColumn(1));
173
+ }
174
+ { // timestamp type
175
+ ConfigSource conf = config.deepCopy().set("to_column", ImmutableMap.of("name", "c0"));
176
+ Schema inputSchema = schema("c0", Types.LONG);
177
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
178
+
179
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
180
+ assertEquals(new Column(0, "c0_", Types.LONG), outputSchema.getColumn(0));
181
+ assertEquals(new Column(1, "c0", Types.TIMESTAMP), outputSchema.getColumn(1));
182
+ }
183
+ }
184
+
185
+ @Test
186
+ public void testFromColumn()
187
+ {
188
+ ConfigSource config = this.config.deepCopy().set("to_column", ImmutableMap.of("name", "time"));
189
+
190
+ // timestamp type
191
+ {
192
+ ConfigSource conf = config.deepCopy().set("from_column", ImmutableMap.of("name", "c0"));
193
+ Schema inputSchema = schema("c0", Types.TIMESTAMP);
194
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
195
+
196
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
197
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
198
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
199
+ }
200
+
201
+ // long type
202
+ {
203
+ ConfigSource conf = config.deepCopy().set("from_column", ImmutableMap.of("name", "c0"));
204
+ Schema inputSchema = schema("c0", Types.LONG);
205
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
206
+
207
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
208
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
209
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
210
+ }
211
+ {
212
+ ConfigSource conf = config.deepCopy().set("from_column", ImmutableMap.of("name", "c0", "unix_timestamp_unit", "sec"));
213
+ Schema inputSchema = schema("c0", Types.LONG);
214
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
215
+
216
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
217
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
218
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
219
+ }
220
+
221
+ // string type
222
+ {
223
+ ConfigSource conf = config.deepCopy().set("from_column", ImmutableMap.of("name", "c0"));
224
+ Schema inputSchema = schema("c0", Types.STRING);
225
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
226
+
227
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
228
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
229
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
230
+ }
231
+ {
232
+ ConfigSource conf = config.deepCopy().set("from_column", ImmutableMap.of("name", "c0", "timestamp_format", "%Y-%m-%d %H:%M:%S.%N %Z"));
233
+ Schema inputSchema = schema("c0", Types.STRING);
234
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
235
+
236
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
237
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
238
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
239
+ }
240
+ }
241
+
242
+ @Test
243
+ public void testFromValue()
244
+ {
245
+ ConfigSource config = this.config.deepCopy().set("to_column", ImmutableMap.of("name", "time"));
246
+
247
+ // mode: fixed_time
248
+ { // default mode
249
+ ConfigSource conf = config.deepCopy().set("from_value", ImmutableMap.of("value", "2016-01-01 10:10:10 UTC"));
250
+ Schema inputSchema = schema("c0", Types.STRING);
251
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
252
+
253
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
254
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
255
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
256
+ }
257
+ {
258
+ ConfigSource conf = config.deepCopy().set("from_value", ImmutableMap.of("mode", "fixed_time", "value", "2016-01-01 10:10:10 UTC"));
259
+ Schema inputSchema = schema("c0", Types.STRING);
260
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
261
+
262
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
263
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
264
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
265
+ }
266
+ { // specify 'timestamp_format'
267
+ ConfigSource conf = config.deepCopy()
268
+ .set("from_value", ImmutableMap.of("mode", "fixed_time", "value", "2016-01-01 10:10:10.000 UTC",
269
+ "timestamp_format", "%Y-%m-%d %H:%M:%S.%N %Z"));
270
+ Schema inputSchema = schema("c0", Types.STRING);
271
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
272
+
273
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
274
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
275
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
276
+ }
277
+ { // specify 'unix_timestamp_unit'
278
+ ConfigSource conf = config.deepCopy()
279
+ .set("from_value", ImmutableMap.of("mode", "fixed_time", "value", 1451643010,
280
+ "unix_timestamp_unit", "sec"));
281
+ Schema inputSchema = schema("c0", Types.STRING);
282
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
283
+
284
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
285
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
286
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
287
+ }
288
+
289
+ // mode: incremental_time
290
+ {
291
+ ConfigSource conf = config.deepCopy()
292
+ .set("from_value", ImmutableMap.of("mode", "incremental_time",
293
+ "from", "2016-01-01 10:10:10 UTC", "to", "2016-01-01 10:10:10 UTC"));
294
+ Schema inputSchema = schema("c0", Types.STRING);
295
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
296
+
297
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
298
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
299
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
300
+ }
301
+ { // specify 'timestamp_format'
302
+ ConfigSource conf = config.deepCopy()
303
+ .set("from_value", ImmutableMap.of("mode", "incremental_time",
304
+ "from", "2016-01-01 10:10:10.000 UTC", "to", "2016-01-01 10:10:10.000 UTC", "timestamp_format", "%Y-%m-%d %H:%M:%S.%N %Z"));
305
+ Schema inputSchema = schema("c0", Types.STRING);
306
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
307
+
308
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
309
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
310
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
311
+ }
312
+ { // specify 'unix_timestamp_unit'
313
+ ConfigSource conf = config.deepCopy()
314
+ .set("from_value", ImmutableMap.of("mode", "incremental_time",
315
+ "from", 1451643010, "to", 1451643010, "unix_timestamp_unit", "sec"));
316
+ Schema inputSchema = schema("c0", Types.STRING);
317
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
318
+
319
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
320
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
321
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
322
+ }
323
+
324
+ // mode: upload_time
325
+ {
326
+ ConfigSource conf = config.deepCopy()
327
+ .set("from_value", ImmutableMap.of(
328
+ "mode", "upload_time"));
329
+ Schema inputSchema = schema("c0", Types.STRING);
330
+ Schema outputSchema = new SchemaConverter(log, pluginTask(conf), inputSchema).toOutputSchema();
331
+
332
+ assertEquals(inputSchema.size() + 1, outputSchema.size());
333
+ assertEquals(inputSchema.getColumn(0), outputSchema.getColumn(0));
334
+ assertEquals(new Column(1, "time", Types.TIMESTAMP), outputSchema.getColumn(1));
335
+ }
336
+ }
337
+
338
+ }
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: embulk-filter-add_time
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Muga Nishizawa
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ~>
17
+ - !ruby/object:Gem::Version
18
+ version: '1.0'
19
+ name: bundler
20
+ prerelease: false
21
+ type: :development
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '10.0'
33
+ name: rake
34
+ prerelease: false
35
+ type: :development
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Add time column to the schema
42
+ email:
43
+ - muga.nishizawa@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - .gitignore
49
+ - .travis.yml
50
+ - CHANGELOG.md
51
+ - COPYING
52
+ - README.md
53
+ - build.gradle
54
+ - embulk-filter-add_time.gemspec
55
+ - gradle/check.gradle
56
+ - gradle/wrapper/gradle-wrapper.jar
57
+ - gradle/wrapper/gradle-wrapper.properties
58
+ - gradlew
59
+ - gradlew.bat
60
+ - lib/embulk/filter/add_time.rb
61
+ - src/main/java/org/embulk/filter/add_time/AddTimeFilterPlugin.java
62
+ - src/main/java/org/embulk/filter/add_time/converter/ColumnConverter.java
63
+ - src/main/java/org/embulk/filter/add_time/converter/ColumnDuplicator.java
64
+ - src/main/java/org/embulk/filter/add_time/converter/LongValueCastConverter.java
65
+ - src/main/java/org/embulk/filter/add_time/converter/SchemaConverter.java
66
+ - src/main/java/org/embulk/filter/add_time/converter/SimpleColumnConverter.java
67
+ - src/main/java/org/embulk/filter/add_time/converter/StringValueCastConverter.java
68
+ - src/main/java/org/embulk/filter/add_time/converter/TimestampValueCastConverter.java
69
+ - src/main/java/org/embulk/filter/add_time/converter/ValueCastConverter.java
70
+ - src/main/java/org/embulk/filter/add_time/converter/ValueConverter.java
71
+ - src/main/java/org/embulk/filter/add_time/converter/ValueNoConverter.java
72
+ - src/main/java/org/embulk/filter/add_time/reader/AbstractColumnReader.java
73
+ - src/main/java/org/embulk/filter/add_time/reader/BooleanColumnReader.java
74
+ - src/main/java/org/embulk/filter/add_time/reader/ColumnReader.java
75
+ - src/main/java/org/embulk/filter/add_time/reader/DoubleColumnReader.java
76
+ - src/main/java/org/embulk/filter/add_time/reader/LongColumnReader.java
77
+ - src/main/java/org/embulk/filter/add_time/reader/StringColumnReader.java
78
+ - src/main/java/org/embulk/filter/add_time/reader/TimeValueGenerator.java
79
+ - src/main/java/org/embulk/filter/add_time/reader/TimestampColumnReader.java
80
+ - src/test/java/org/embulk/filter/add_time/TestAddTimeFilterPlugin.java
81
+ - src/test/java/org/embulk/filter/add_time/converter/TestSchemaConverter.java
82
+ - classpath/embulk-filter-add_time-0.1.0.jar
83
+ homepage: https://github.com/treasure-data/embulk-filter-add_time
84
+ licenses:
85
+ - Apache 2.0
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.1.9
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: Add time filter plugin for Embulk
107
+ test_files: []