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,62 @@
1
+ package org.embulk.filter.add_time.converter;
2
+
3
+ import org.embulk.filter.add_time.reader.ColumnReader;
4
+ import org.embulk.spi.Column;
5
+ import org.embulk.spi.PageBuilder;
6
+ import org.embulk.spi.PageReader;
7
+ import org.embulk.spi.Schema;
8
+
9
+ public class SimpleColumnConverter
10
+ implements ColumnConverter
11
+ {
12
+ public static class Builder
13
+ {
14
+ private Column column;
15
+ private ColumnReader reader;
16
+
17
+ public Builder()
18
+ {
19
+ }
20
+
21
+ public Builder setColumn(Column column)
22
+ {
23
+ this.column = column;
24
+ return this;
25
+ }
26
+
27
+ public Builder setColumnReader(ColumnReader reader)
28
+ {
29
+ this.reader = reader;
30
+ return this;
31
+ }
32
+
33
+ public ColumnConverter build()
34
+ {
35
+ return new SimpleColumnConverter(column, reader);
36
+ }
37
+ }
38
+
39
+ private final Column column;
40
+ private final ColumnReader columnReader;
41
+
42
+ private SimpleColumnConverter(Column column, ColumnReader columnReader)
43
+ {
44
+ this.column = column;
45
+ this.columnReader = columnReader;
46
+ }
47
+
48
+ public void update(PageReader pageReader)
49
+ {
50
+ columnReader.readValue(column, pageReader);
51
+ }
52
+
53
+ public void convert(PageBuilder pageBuilder)
54
+ {
55
+ columnReader.convertValue(column, pageBuilder);
56
+ }
57
+
58
+ public void addColumn(Schema.Builder schemaBuilder)
59
+ {
60
+ schemaBuilder.add(column.getName(), column.getType());
61
+ }
62
+ }
@@ -0,0 +1,33 @@
1
+ package org.embulk.filter.add_time.converter;
2
+
3
+ import org.embulk.filter.add_time.AddTimeFilterPlugin.FromColumnConfig;
4
+ import org.embulk.filter.add_time.AddTimeFilterPlugin.ToColumnConfig;
5
+ import org.embulk.spi.Column;
6
+ import org.embulk.spi.PageBuilder;
7
+ import org.embulk.spi.time.Timestamp;
8
+ import org.embulk.spi.time.TimestampParser;
9
+
10
+ public class StringValueCastConverter
11
+ extends ValueCastConverter
12
+ {
13
+ private final TimestampParser fromTimestampParser;
14
+
15
+ public StringValueCastConverter(FromColumnConfig fromColumnConfig, ToColumnConfig toColumnConfig)
16
+ {
17
+ super(toColumnConfig);
18
+ this.fromTimestampParser = new TimestampParser(fromColumnConfig, fromColumnConfig);
19
+ }
20
+
21
+ @Override
22
+ public void convertValue(final Column column, String value, final PageBuilder pageBuilder)
23
+ {
24
+ columnVisitor.setValue(stringToTimestamp(value));
25
+ columnVisitor.setPageBuilder(pageBuilder);
26
+ column.visit(columnVisitor);
27
+ }
28
+
29
+ private Timestamp stringToTimestamp(String value)
30
+ {
31
+ return fromTimestampParser.parse(value);
32
+ }
33
+ }
@@ -0,0 +1,23 @@
1
+ package org.embulk.filter.add_time.converter;
2
+
3
+ import org.embulk.filter.add_time.AddTimeFilterPlugin.ToColumnConfig;
4
+ import org.embulk.spi.Column;
5
+ import org.embulk.spi.PageBuilder;
6
+ import org.embulk.spi.time.Timestamp;
7
+
8
+ public class TimestampValueCastConverter
9
+ extends ValueCastConverter
10
+ {
11
+ public TimestampValueCastConverter(ToColumnConfig toColumnConfig)
12
+ {
13
+ super(toColumnConfig);
14
+ }
15
+
16
+ @Override
17
+ public void convertValue(Column column, final Timestamp value, final PageBuilder pageBuilder)
18
+ {
19
+ columnVisitor.setValue(value); // it can use the value directly.
20
+ columnVisitor.setPageBuilder(pageBuilder);
21
+ column.visit(columnVisitor);
22
+ }
23
+ }
@@ -0,0 +1,108 @@
1
+ package org.embulk.filter.add_time.converter;
2
+
3
+ import org.embulk.filter.add_time.AddTimeFilterPlugin.ToColumnConfig;
4
+ import org.embulk.filter.add_time.AddTimeFilterPlugin.UnixTimestampUnit;
5
+ import org.embulk.spi.Column;
6
+ import org.embulk.spi.ColumnVisitor;
7
+ import org.embulk.spi.PageBuilder;
8
+ import org.embulk.spi.time.Timestamp;
9
+
10
+ public abstract class ValueCastConverter
11
+ implements ValueConverter
12
+ {
13
+ protected final TimestampValueCastVisitor columnVisitor;
14
+
15
+ public ValueCastConverter(ToColumnConfig toColumnConfig)
16
+ {
17
+ this.columnVisitor = new TimestampValueCastVisitor(UnixTimestampUnit.of(toColumnConfig.getUnixTimestampUnit()));
18
+ }
19
+
20
+ @Override
21
+ public void convertNull(Column column, PageBuilder pageBuilder)
22
+ {
23
+ pageBuilder.setNull(column);
24
+ }
25
+
26
+ @Override
27
+ public void convertValue(Column column, boolean value, PageBuilder pageBuilder)
28
+ {
29
+ throw new AssertionError("Never call.");
30
+ }
31
+
32
+ @Override
33
+ public void convertValue(Column column, long value, PageBuilder pageBuilder)
34
+ {
35
+ throw new AssertionError("Should implement in subclass.");
36
+ }
37
+
38
+ @Override
39
+ public void convertValue(Column column, double value, PageBuilder pageBuilder)
40
+ {
41
+ throw new AssertionError("Never call.");
42
+ }
43
+
44
+ @Override
45
+ public void convertValue(final Column column, String value, final PageBuilder pageBuilder)
46
+ {
47
+ throw new AssertionError("Should implement in subclass.");
48
+ }
49
+
50
+ @Override
51
+ public void convertValue(Column column, final Timestamp value, final PageBuilder pageBuilder)
52
+ {
53
+ throw new AssertionError("Never call.");
54
+ }
55
+
56
+ static class TimestampValueCastVisitor
57
+ implements ColumnVisitor
58
+ {
59
+ private final UnixTimestampUnit toUnixTimestampUnit;
60
+ private PageBuilder currentPageBuilder;
61
+ private Timestamp currentValue;
62
+
63
+ TimestampValueCastVisitor(UnixTimestampUnit toUnixTimestampUnit)
64
+ {
65
+ this.toUnixTimestampUnit = toUnixTimestampUnit;
66
+ }
67
+
68
+ void setValue(Timestamp value)
69
+ {
70
+ this.currentValue = value;
71
+ }
72
+
73
+ void setPageBuilder(PageBuilder pageBuilder)
74
+ {
75
+ this.currentPageBuilder = pageBuilder;
76
+ }
77
+
78
+ @Override
79
+ public void booleanColumn(Column column)
80
+ {
81
+ throw new AssertionError("Never call.");
82
+ }
83
+
84
+ @Override
85
+ public void longColumn(Column column)
86
+ {
87
+ currentPageBuilder.setLong(column, toUnixTimestampUnit.toLong(currentValue));
88
+ }
89
+
90
+ @Override
91
+ public void doubleColumn(Column column)
92
+ {
93
+ throw new AssertionError("Never call.");
94
+ }
95
+
96
+ @Override
97
+ public void stringColumn(Column column)
98
+ {
99
+ throw new AssertionError("Never call.");
100
+ }
101
+
102
+ @Override
103
+ public void timestampColumn(Column column)
104
+ {
105
+ currentPageBuilder.setTimestamp(column, currentValue);
106
+ }
107
+ }
108
+ }
@@ -0,0 +1,22 @@
1
+ package org.embulk.filter.add_time.converter;
2
+
3
+ import org.embulk.spi.Column;
4
+ import org.embulk.spi.PageBuilder;
5
+ import org.embulk.spi.time.Timestamp;
6
+
7
+ public interface ValueConverter
8
+ {
9
+ ValueConverter NO_CONV = new ValueNoConverter();
10
+
11
+ void convertNull(Column column, PageBuilder pageBuilder);
12
+
13
+ void convertValue(Column column, boolean value, PageBuilder pageBuilder);
14
+
15
+ void convertValue(Column column, long value, PageBuilder pageBuilder);
16
+
17
+ void convertValue(Column column, double value, PageBuilder pageBuilder);
18
+
19
+ void convertValue(Column column, String value, PageBuilder pageBuilder);
20
+
21
+ void convertValue(Column column, Timestamp value, PageBuilder pageBuilder);
22
+ }
@@ -0,0 +1,46 @@
1
+ package org.embulk.filter.add_time.converter;
2
+
3
+ import org.embulk.spi.Column;
4
+ import org.embulk.spi.PageBuilder;
5
+ import org.embulk.spi.time.Timestamp;
6
+
7
+ public class ValueNoConverter
8
+ implements ValueConverter
9
+ {
10
+ @Override
11
+ public void convertNull(Column column, PageBuilder pageBuilder)
12
+ {
13
+ pageBuilder.setNull(column);
14
+ }
15
+
16
+ @Override
17
+ public void convertValue(Column column, boolean value, PageBuilder pageBuilder)
18
+ {
19
+ pageBuilder.setBoolean(column, value);
20
+ }
21
+
22
+ @Override
23
+ public void convertValue(Column column, long value, PageBuilder pageBuilder)
24
+ {
25
+ pageBuilder.setLong(column, value);
26
+ }
27
+
28
+ @Override
29
+ public void convertValue(Column column, double value, PageBuilder pageBuilder)
30
+ {
31
+ pageBuilder.setDouble(column, value);
32
+ }
33
+
34
+ @Override
35
+ public void convertValue(Column column, String value, PageBuilder pageBuilder)
36
+ {
37
+ pageBuilder.setString(column, value);
38
+ }
39
+
40
+ @Override
41
+ public void convertValue(Column column, Timestamp value, PageBuilder pageBuilder)
42
+ {
43
+ pageBuilder.setTimestamp(column, value);
44
+
45
+ }
46
+ }
@@ -0,0 +1,55 @@
1
+ package org.embulk.filter.add_time.reader;
2
+
3
+ import org.embulk.filter.add_time.converter.ValueConverter;
4
+ import org.embulk.spi.Column;
5
+ import org.embulk.spi.PageBuilder;
6
+ import org.embulk.spi.PageReader;
7
+
8
+ public abstract class AbstractColumnReader<T extends AbstractColumnReader>
9
+ implements ColumnReader<T>
10
+ {
11
+ protected final ValueConverter valueConverter;
12
+ protected boolean isNull = false;
13
+
14
+ protected AbstractColumnReader(ValueConverter valueConverter)
15
+ {
16
+ this.valueConverter = valueConverter;
17
+ }
18
+
19
+ @Override
20
+ public void readValue(Column column, PageReader pageReader)
21
+ {
22
+ if (!(isNull = pageReader.isNull(column))) {
23
+ readNonNullValue(column, pageReader);
24
+ }
25
+ }
26
+
27
+ protected abstract void readNonNullValue(Column column, PageReader pageReader);
28
+
29
+ @Override
30
+ public void convertValue(Column column, PageBuilder pageBuilder)
31
+ {
32
+ try {
33
+ if (isNull) {
34
+ valueConverter.convertNull(column, pageBuilder);
35
+ }
36
+ else {
37
+ convertNonNullValue(column, pageBuilder);
38
+ }
39
+ }
40
+ finally {
41
+ isNull = false;
42
+ }
43
+ }
44
+
45
+ protected abstract void convertNonNullValue(Column column, PageBuilder pageBuilder);
46
+
47
+ @Override
48
+ public void copyTo(T columnReader)
49
+ {
50
+ columnReader.isNull = this.isNull;
51
+ copyValueTo(columnReader);
52
+ }
53
+
54
+ protected abstract void copyValueTo(T columnReader);
55
+ }
@@ -0,0 +1,35 @@
1
+ package org.embulk.filter.add_time.reader;
2
+
3
+ import org.embulk.filter.add_time.converter.ValueConverter;
4
+ import org.embulk.spi.Column;
5
+ import org.embulk.spi.PageBuilder;
6
+ import org.embulk.spi.PageReader;
7
+
8
+ public class BooleanColumnReader
9
+ extends AbstractColumnReader<BooleanColumnReader>
10
+ {
11
+ protected boolean value;
12
+
13
+ public BooleanColumnReader(ValueConverter valueConverter)
14
+ {
15
+ super(valueConverter);
16
+ }
17
+
18
+ @Override
19
+ public void readNonNullValue(Column column, PageReader pageReader)
20
+ {
21
+ value = pageReader.getBoolean(column);
22
+ }
23
+
24
+ @Override
25
+ public void convertNonNullValue(Column column, PageBuilder pageBuilder)
26
+ {
27
+ valueConverter.convertValue(column, value, pageBuilder);
28
+ }
29
+
30
+ @Override
31
+ public void copyValueTo(BooleanColumnReader columnReader)
32
+ {
33
+ columnReader.value = this.value;
34
+ }
35
+ }
@@ -0,0 +1,14 @@
1
+ package org.embulk.filter.add_time.reader;
2
+
3
+ import org.embulk.spi.Column;
4
+ import org.embulk.spi.PageBuilder;
5
+ import org.embulk.spi.PageReader;
6
+
7
+ public interface ColumnReader<T extends ColumnReader>
8
+ {
9
+ void readValue(Column column, PageReader pageReader);
10
+
11
+ void convertValue(Column column, PageBuilder pageBuilder);
12
+
13
+ void copyTo(T columnReader);
14
+ }
@@ -0,0 +1,35 @@
1
+ package org.embulk.filter.add_time.reader;
2
+
3
+ import org.embulk.filter.add_time.converter.ValueConverter;
4
+ import org.embulk.spi.Column;
5
+ import org.embulk.spi.PageBuilder;
6
+ import org.embulk.spi.PageReader;
7
+
8
+ public class DoubleColumnReader
9
+ extends AbstractColumnReader<DoubleColumnReader>
10
+ {
11
+ protected double value;
12
+
13
+ public DoubleColumnReader(ValueConverter valueConverter)
14
+ {
15
+ super(valueConverter);
16
+ }
17
+
18
+ @Override
19
+ public void readNonNullValue(Column column, PageReader pageReader)
20
+ {
21
+ value = pageReader.getDouble(column);
22
+ }
23
+
24
+ @Override
25
+ public void convertNonNullValue(Column column, PageBuilder pageBuilder)
26
+ {
27
+ valueConverter.convertValue(column, value, pageBuilder);
28
+ }
29
+
30
+ @Override
31
+ public void copyValueTo(DoubleColumnReader columnReader)
32
+ {
33
+ columnReader.value = this.value;
34
+ }
35
+ }
@@ -0,0 +1,35 @@
1
+ package org.embulk.filter.add_time.reader;
2
+
3
+ import org.embulk.filter.add_time.converter.ValueConverter;
4
+ import org.embulk.spi.Column;
5
+ import org.embulk.spi.PageBuilder;
6
+ import org.embulk.spi.PageReader;
7
+
8
+ public class LongColumnReader
9
+ extends AbstractColumnReader<LongColumnReader>
10
+ {
11
+ protected long value;
12
+
13
+ public LongColumnReader(ValueConverter valueConverter)
14
+ {
15
+ super(valueConverter);
16
+ }
17
+
18
+ @Override
19
+ public void readNonNullValue(Column column, PageReader pageReader)
20
+ {
21
+ value = pageReader.getLong(column);
22
+ }
23
+
24
+ @Override
25
+ public void convertNonNullValue(Column column, PageBuilder pageBuilder)
26
+ {
27
+ valueConverter.convertValue(column, value, pageBuilder);
28
+ }
29
+
30
+ @Override
31
+ public void copyValueTo(LongColumnReader columnReader)
32
+ {
33
+ columnReader.value = this.value;
34
+ }
35
+ }