embulk-filter-row 0.2.1 → 0.2.2
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +6 -0
- data/README.md +1 -1
- data/build.gradle +3 -3
- data/example/and.yml +5 -6
- data/example/example.yml +37 -0
- data/example/or.yml +2 -1
- data/lib/embulk/filter/row.rb +1 -1
- data/src/main/java/org/embulk/filter/row/AbstractColumnVisitor.java +62 -0
- data/src/main/java/org/embulk/filter/row/ColumnVisitorAndImpl.java +211 -0
- data/src/main/java/org/embulk/filter/row/ColumnVisitorOrImpl.java +211 -0
- data/src/main/java/org/embulk/filter/row/RowFilterPlugin.java +106 -0
- data/src/main/java/org/embulk/filter/row/{BooleanCondition.java → condition/BooleanCondition.java} +1 -1
- data/src/main/java/org/embulk/filter/row/condition/Condition.java +5 -0
- data/src/main/java/org/embulk/filter/row/{ConditionConfig.java → condition/ConditionConfig.java} +1 -1
- data/src/main/java/org/embulk/filter/row/{ConditionFactory.java → condition/ConditionFactory.java} +1 -1
- data/src/main/java/org/embulk/filter/row/{DoubleCondition.java → condition/DoubleCondition.java} +1 -1
- data/src/main/java/org/embulk/filter/row/{LongCondition.java → condition/LongCondition.java} +1 -1
- data/src/main/java/org/embulk/filter/row/{StringCondition.java → condition/StringCondition.java} +1 -1
- data/src/main/java/org/embulk/filter/row/{TimestampCondition.java → condition/TimestampCondition.java} +2 -1
- data/src/test/java/org/embulk/filter/row/{TestBooleanCondition.java → condition/TestBooleanCondition.java} +1 -1
- data/src/test/java/org/embulk/filter/row/{TestConditionFactory.java → condition/TestConditionFactory.java} +1 -1
- data/src/test/java/org/embulk/filter/row/{TestDoubleCondition.java → condition/TestDoubleCondition.java} +1 -1
- data/src/test/java/org/embulk/filter/row/{TestLongCondition.java → condition/TestLongCondition.java} +1 -1
- data/src/test/java/org/embulk/filter/row/{TestStringCondition.java → condition/TestStringCondition.java} +1 -1
- data/src/test/java/org/embulk/filter/row/{TestTimestampCondition.java → condition/TestTimestampCondition.java} +1 -1
- metadata +22 -19
- data/src/main/java/org/embulk/filter/RowFilterPlugin.java +0 -464
- data/src/main/java/org/embulk/filter/row/Condition.java +0 -5
- data/src/test/java/org/embulk/filter/TestRowFilterPlugin.java +0 -5
@@ -0,0 +1,106 @@
|
|
1
|
+
package org.embulk.filter.row;
|
2
|
+
|
3
|
+
import org.embulk.config.Config;
|
4
|
+
import org.embulk.config.ConfigDefault;
|
5
|
+
import org.embulk.config.ConfigException;
|
6
|
+
import org.embulk.config.ConfigSource;
|
7
|
+
import org.embulk.config.Task;
|
8
|
+
import org.embulk.config.TaskSource;
|
9
|
+
|
10
|
+
import org.embulk.filter.row.condition.ConditionConfig;
|
11
|
+
|
12
|
+
import org.embulk.spi.ColumnVisitor;
|
13
|
+
import org.embulk.spi.Exec;
|
14
|
+
import org.embulk.spi.FilterPlugin;
|
15
|
+
import org.embulk.spi.Page;
|
16
|
+
import org.embulk.spi.PageBuilder;
|
17
|
+
import org.embulk.spi.PageOutput;
|
18
|
+
import org.embulk.spi.PageReader;
|
19
|
+
import org.embulk.spi.Schema;
|
20
|
+
import org.embulk.spi.time.TimestampParser;
|
21
|
+
|
22
|
+
import org.slf4j.Logger;
|
23
|
+
|
24
|
+
import java.util.List;
|
25
|
+
|
26
|
+
public class RowFilterPlugin implements FilterPlugin
|
27
|
+
{
|
28
|
+
private static final Logger logger = Exec.getLogger(RowFilterPlugin.class);
|
29
|
+
|
30
|
+
public RowFilterPlugin() {}
|
31
|
+
|
32
|
+
public interface PluginTask extends Task, TimestampParser.Task
|
33
|
+
{
|
34
|
+
@Config("condition")
|
35
|
+
@ConfigDefault("\"AND\"")
|
36
|
+
public String getCondition();
|
37
|
+
|
38
|
+
@Config("conditions")
|
39
|
+
public List<ConditionConfig> getConditions();
|
40
|
+
}
|
41
|
+
|
42
|
+
@Override
|
43
|
+
public void transaction(ConfigSource config, Schema inputSchema,
|
44
|
+
FilterPlugin.Control control)
|
45
|
+
{
|
46
|
+
PluginTask task = config.loadConfig(PluginTask.class);
|
47
|
+
|
48
|
+
configure(task, inputSchema);
|
49
|
+
Schema outputSchema = inputSchema;
|
50
|
+
|
51
|
+
control.run(task.dump(), outputSchema);
|
52
|
+
}
|
53
|
+
|
54
|
+
void configure(PluginTask task, Schema inputSchema) throws ConfigException
|
55
|
+
{
|
56
|
+
for (ConditionConfig conditionConfig : task.getConditions()) {
|
57
|
+
String columnName = conditionConfig.getColumn();
|
58
|
+
inputSchema.lookupColumn(columnName); // throw SchemaConfigException if not found
|
59
|
+
}
|
60
|
+
|
61
|
+
String condition = task.getCondition().toLowerCase();
|
62
|
+
if (!condition.equals("or") && !condition.equals("and")) {
|
63
|
+
throw new ConfigException("condition must be either of \"or\" or \"and\".");
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
@Override
|
68
|
+
public PageOutput open(final TaskSource taskSource, final Schema inputSchema,
|
69
|
+
final Schema outputSchema, final PageOutput output)
|
70
|
+
{
|
71
|
+
final PluginTask task = taskSource.loadTask(PluginTask.class);
|
72
|
+
final boolean orCondition = task.getCondition().toLowerCase().equals("or");
|
73
|
+
|
74
|
+
return new PageOutput() {
|
75
|
+
private PageReader pageReader = new PageReader(inputSchema);
|
76
|
+
private PageBuilder pageBuilder = new PageBuilder(Exec.getBufferAllocator(), outputSchema, output);
|
77
|
+
private AbstractColumnVisitor visitor = orCondition ?
|
78
|
+
new ColumnVisitorOrImpl(task, inputSchema, outputSchema, pageReader, pageBuilder) :
|
79
|
+
new ColumnVisitorAndImpl(task, inputSchema, outputSchema, pageReader, pageBuilder);
|
80
|
+
|
81
|
+
@Override
|
82
|
+
public void finish()
|
83
|
+
{
|
84
|
+
pageBuilder.finish();
|
85
|
+
}
|
86
|
+
|
87
|
+
@Override
|
88
|
+
public void close()
|
89
|
+
{
|
90
|
+
pageBuilder.close();
|
91
|
+
}
|
92
|
+
|
93
|
+
@Override
|
94
|
+
public void add(Page page)
|
95
|
+
{
|
96
|
+
pageReader.setPage(page);
|
97
|
+
|
98
|
+
while (pageReader.nextRecord()) {
|
99
|
+
if (visitor.visitColumns(inputSchema)) {
|
100
|
+
pageBuilder.addRecord();
|
101
|
+
}
|
102
|
+
}
|
103
|
+
}
|
104
|
+
};
|
105
|
+
}
|
106
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-filter-row
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naotoshi Seo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05
|
11
|
+
date: 2016-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -54,6 +54,7 @@ files:
|
|
54
54
|
- config/checkstyle/checkstyle.xml
|
55
55
|
- example/and.yml
|
56
56
|
- example/example.csv
|
57
|
+
- example/example.yml
|
57
58
|
- example/or.yml
|
58
59
|
- gradle/wrapper/gradle-wrapper.jar
|
59
60
|
- gradle/wrapper/gradle-wrapper.properties
|
@@ -61,23 +62,25 @@ files:
|
|
61
62
|
- gradlew.bat
|
62
63
|
- lib/embulk/filter/row.rb
|
63
64
|
- settings.gradle
|
64
|
-
- src/main/java/org/embulk/filter/
|
65
|
-
- src/main/java/org/embulk/filter/row/
|
66
|
-
- src/main/java/org/embulk/filter/row/
|
67
|
-
- src/main/java/org/embulk/filter/row/
|
68
|
-
- src/main/java/org/embulk/filter/row/
|
69
|
-
- src/main/java/org/embulk/filter/row/
|
70
|
-
- src/main/java/org/embulk/filter/row/
|
71
|
-
- src/main/java/org/embulk/filter/row/
|
72
|
-
- src/main/java/org/embulk/filter/row/
|
73
|
-
- src/
|
74
|
-
- src/
|
75
|
-
- src/
|
76
|
-
- src/test/java/org/embulk/filter/row/
|
77
|
-
- src/test/java/org/embulk/filter/row/
|
78
|
-
- src/test/java/org/embulk/filter/row/
|
79
|
-
- src/test/java/org/embulk/filter/row/
|
80
|
-
-
|
65
|
+
- src/main/java/org/embulk/filter/row/AbstractColumnVisitor.java
|
66
|
+
- src/main/java/org/embulk/filter/row/ColumnVisitorAndImpl.java
|
67
|
+
- src/main/java/org/embulk/filter/row/ColumnVisitorOrImpl.java
|
68
|
+
- src/main/java/org/embulk/filter/row/RowFilterPlugin.java
|
69
|
+
- src/main/java/org/embulk/filter/row/condition/BooleanCondition.java
|
70
|
+
- src/main/java/org/embulk/filter/row/condition/Condition.java
|
71
|
+
- src/main/java/org/embulk/filter/row/condition/ConditionConfig.java
|
72
|
+
- src/main/java/org/embulk/filter/row/condition/ConditionFactory.java
|
73
|
+
- src/main/java/org/embulk/filter/row/condition/DoubleCondition.java
|
74
|
+
- src/main/java/org/embulk/filter/row/condition/LongCondition.java
|
75
|
+
- src/main/java/org/embulk/filter/row/condition/StringCondition.java
|
76
|
+
- src/main/java/org/embulk/filter/row/condition/TimestampCondition.java
|
77
|
+
- src/test/java/org/embulk/filter/row/condition/TestBooleanCondition.java
|
78
|
+
- src/test/java/org/embulk/filter/row/condition/TestConditionFactory.java
|
79
|
+
- src/test/java/org/embulk/filter/row/condition/TestDoubleCondition.java
|
80
|
+
- src/test/java/org/embulk/filter/row/condition/TestLongCondition.java
|
81
|
+
- src/test/java/org/embulk/filter/row/condition/TestStringCondition.java
|
82
|
+
- src/test/java/org/embulk/filter/row/condition/TestTimestampCondition.java
|
83
|
+
- classpath/embulk-filter-row-0.2.2.jar
|
81
84
|
homepage: https://github.com/sonots/embulk-filter-row
|
82
85
|
licenses:
|
83
86
|
- MIT
|
@@ -1,464 +0,0 @@
|
|
1
|
-
package org.embulk.filter;
|
2
|
-
|
3
|
-
import org.embulk.config.Config;
|
4
|
-
import org.embulk.config.ConfigDefault;
|
5
|
-
import org.embulk.config.ConfigException;
|
6
|
-
import org.embulk.config.ConfigSource;
|
7
|
-
import org.embulk.config.Task;
|
8
|
-
import org.embulk.config.TaskSource;
|
9
|
-
|
10
|
-
import org.embulk.filter.row.BooleanCondition;
|
11
|
-
import org.embulk.filter.row.Condition;
|
12
|
-
import org.embulk.filter.row.ConditionConfig;
|
13
|
-
import org.embulk.filter.row.ConditionFactory;
|
14
|
-
import org.embulk.filter.row.DoubleCondition;
|
15
|
-
import org.embulk.filter.row.LongCondition;
|
16
|
-
import org.embulk.filter.row.StringCondition;
|
17
|
-
import org.embulk.filter.row.TimestampCondition;
|
18
|
-
|
19
|
-
import org.embulk.spi.Column;
|
20
|
-
import org.embulk.spi.ColumnVisitor;
|
21
|
-
import org.embulk.spi.Exec;
|
22
|
-
import org.embulk.spi.FilterPlugin;
|
23
|
-
import org.embulk.spi.Page;
|
24
|
-
import org.embulk.spi.PageBuilder;
|
25
|
-
import org.embulk.spi.PageOutput;
|
26
|
-
import org.embulk.spi.PageReader;
|
27
|
-
import org.embulk.spi.Schema;
|
28
|
-
import org.embulk.spi.time.Timestamp;
|
29
|
-
import org.embulk.spi.time.TimestampParser;
|
30
|
-
|
31
|
-
import org.slf4j.Logger;
|
32
|
-
|
33
|
-
import java.util.ArrayList;
|
34
|
-
import java.util.HashMap;
|
35
|
-
import java.util.List;
|
36
|
-
|
37
|
-
public class RowFilterPlugin implements FilterPlugin
|
38
|
-
{
|
39
|
-
private static final Logger logger = Exec.getLogger(RowFilterPlugin.class);
|
40
|
-
|
41
|
-
public RowFilterPlugin()
|
42
|
-
{
|
43
|
-
}
|
44
|
-
|
45
|
-
public interface PluginTask extends Task, TimestampParser.Task
|
46
|
-
{
|
47
|
-
@Config("condition")
|
48
|
-
@ConfigDefault("\"AND\"")
|
49
|
-
public String getCondition();
|
50
|
-
|
51
|
-
@Config("conditions")
|
52
|
-
public List<ConditionConfig> getConditions();
|
53
|
-
}
|
54
|
-
|
55
|
-
@Override
|
56
|
-
public void transaction(ConfigSource config, Schema inputSchema,
|
57
|
-
FilterPlugin.Control control)
|
58
|
-
{
|
59
|
-
PluginTask task = config.loadConfig(PluginTask.class);
|
60
|
-
|
61
|
-
for (ConditionConfig conditionConfig : task.getConditions()) {
|
62
|
-
String columnName = conditionConfig.getColumn();
|
63
|
-
inputSchema.lookupColumn(columnName); // throw SchemaConfigException if not found
|
64
|
-
}
|
65
|
-
|
66
|
-
String condition = task.getCondition().toLowerCase();
|
67
|
-
if (!condition.equals("or") && !condition.equals("and")) {
|
68
|
-
throw new ConfigException("condition must be either of \"or\" or \"and\".");
|
69
|
-
}
|
70
|
-
|
71
|
-
Schema outputSchema = inputSchema;
|
72
|
-
control.run(task.dump(), outputSchema);
|
73
|
-
}
|
74
|
-
|
75
|
-
@Override
|
76
|
-
public PageOutput open(final TaskSource taskSource, final Schema inputSchema,
|
77
|
-
final Schema outputSchema, final PageOutput output)
|
78
|
-
{
|
79
|
-
PluginTask task = taskSource.loadTask(PluginTask.class);
|
80
|
-
|
81
|
-
final boolean orCondition = task.getCondition().toLowerCase().equals("or");
|
82
|
-
|
83
|
-
final HashMap<String, List<Condition>> conditionMap = new HashMap<String, List<Condition>>();
|
84
|
-
for (Column column : outputSchema.getColumns()) {
|
85
|
-
String columnName = column.getName();
|
86
|
-
conditionMap.put(columnName, new ArrayList<Condition>());
|
87
|
-
}
|
88
|
-
|
89
|
-
for (ConditionConfig conditionConfig : task.getConditions()) {
|
90
|
-
String columnName = conditionConfig.getColumn();
|
91
|
-
for (Column column : outputSchema.getColumns()) {
|
92
|
-
if (columnName.equals(column.getName())) {
|
93
|
-
ConditionFactory factory = new ConditionFactory(task.getJRuby(), column, conditionConfig);
|
94
|
-
Condition condition = factory.createCondition();
|
95
|
-
conditionMap.get(columnName).add(condition);
|
96
|
-
break;
|
97
|
-
}
|
98
|
-
}
|
99
|
-
}
|
100
|
-
|
101
|
-
return new PageOutput() {
|
102
|
-
private PageReader pageReader = new PageReader(inputSchema);
|
103
|
-
private PageBuilder pageBuilder = new PageBuilder(Exec.getBufferAllocator(), outputSchema, output);
|
104
|
-
private boolean shouldAddRecord;
|
105
|
-
private ColumnVisitor visitor = orCondition ? new ColumnVisitorOrImpl(pageBuilder) : new ColumnVisitorAndImpl(pageBuilder);
|
106
|
-
|
107
|
-
@Override
|
108
|
-
public void finish()
|
109
|
-
{
|
110
|
-
pageBuilder.finish();
|
111
|
-
}
|
112
|
-
|
113
|
-
@Override
|
114
|
-
public void close()
|
115
|
-
{
|
116
|
-
pageBuilder.close();
|
117
|
-
}
|
118
|
-
|
119
|
-
@Override
|
120
|
-
public void add(Page page)
|
121
|
-
{
|
122
|
-
pageReader.setPage(page);
|
123
|
-
|
124
|
-
while (pageReader.nextRecord()) {
|
125
|
-
shouldAddRecord = orCondition ? false : true;
|
126
|
-
inputSchema.visitColumns(visitor);
|
127
|
-
if (shouldAddRecord) {
|
128
|
-
pageBuilder.addRecord();
|
129
|
-
}
|
130
|
-
}
|
131
|
-
}
|
132
|
-
|
133
|
-
class ColumnVisitorOrImpl implements ColumnVisitor
|
134
|
-
{
|
135
|
-
private final PageBuilder pageBuilder;
|
136
|
-
|
137
|
-
ColumnVisitorOrImpl(PageBuilder pageBuilder)
|
138
|
-
{
|
139
|
-
this.pageBuilder = pageBuilder;
|
140
|
-
}
|
141
|
-
|
142
|
-
@Override
|
143
|
-
public void booleanColumn(Column column)
|
144
|
-
{
|
145
|
-
if (pageReader.isNull(column)) {
|
146
|
-
pageBuilder.setNull(column);
|
147
|
-
}
|
148
|
-
else {
|
149
|
-
pageBuilder.setBoolean(column, pageReader.getBoolean(column));
|
150
|
-
}
|
151
|
-
if (shouldAddRecord) {
|
152
|
-
return;
|
153
|
-
}
|
154
|
-
List<Condition> conditionList = conditionMap.get(column.getName());
|
155
|
-
for (Condition tempCondition : conditionList) {
|
156
|
-
BooleanCondition condition = (BooleanCondition) tempCondition;
|
157
|
-
if (pageReader.isNull(column)) {
|
158
|
-
if (condition.compare(null)) {
|
159
|
-
shouldAddRecord = true;
|
160
|
-
break;
|
161
|
-
}
|
162
|
-
}
|
163
|
-
else {
|
164
|
-
boolean subject = pageReader.getBoolean(column);
|
165
|
-
if (condition.compare(subject)) {
|
166
|
-
shouldAddRecord = true;
|
167
|
-
break;
|
168
|
-
}
|
169
|
-
}
|
170
|
-
}
|
171
|
-
}
|
172
|
-
|
173
|
-
@Override
|
174
|
-
public void longColumn(Column column)
|
175
|
-
{
|
176
|
-
if (pageReader.isNull(column)) {
|
177
|
-
pageBuilder.setNull(column);
|
178
|
-
}
|
179
|
-
else {
|
180
|
-
pageBuilder.setLong(column, pageReader.getLong(column));
|
181
|
-
}
|
182
|
-
if (shouldAddRecord) {
|
183
|
-
return;
|
184
|
-
}
|
185
|
-
List<Condition> conditionList = conditionMap.get(column.getName());
|
186
|
-
for (Condition tempCondition : conditionList) {
|
187
|
-
LongCondition condition = (LongCondition) tempCondition;
|
188
|
-
if (pageReader.isNull(column)) {
|
189
|
-
if (condition.compare(null)) {
|
190
|
-
shouldAddRecord = true;
|
191
|
-
break;
|
192
|
-
}
|
193
|
-
}
|
194
|
-
else {
|
195
|
-
long subject = pageReader.getLong(column);
|
196
|
-
if (condition.compare(subject)) {
|
197
|
-
shouldAddRecord = true;
|
198
|
-
break;
|
199
|
-
}
|
200
|
-
}
|
201
|
-
}
|
202
|
-
}
|
203
|
-
|
204
|
-
@Override
|
205
|
-
public void doubleColumn(Column column)
|
206
|
-
{
|
207
|
-
if (pageReader.isNull(column)) {
|
208
|
-
pageBuilder.setNull(column);
|
209
|
-
}
|
210
|
-
else {
|
211
|
-
pageBuilder.setDouble(column, pageReader.getDouble(column));
|
212
|
-
}
|
213
|
-
if (shouldAddRecord) {
|
214
|
-
return;
|
215
|
-
}
|
216
|
-
List<Condition> conditionList = conditionMap.get(column.getName());
|
217
|
-
for (Condition tempCondition : conditionList) {
|
218
|
-
DoubleCondition condition = (DoubleCondition) tempCondition;
|
219
|
-
if (pageReader.isNull(column)) {
|
220
|
-
if (condition.compare(null)) {
|
221
|
-
shouldAddRecord = true;
|
222
|
-
break;
|
223
|
-
}
|
224
|
-
}
|
225
|
-
else {
|
226
|
-
double subject = pageReader.getDouble(column);
|
227
|
-
if (condition.compare(subject)) {
|
228
|
-
shouldAddRecord = true;
|
229
|
-
break;
|
230
|
-
}
|
231
|
-
}
|
232
|
-
}
|
233
|
-
}
|
234
|
-
|
235
|
-
@Override
|
236
|
-
public void stringColumn(Column column)
|
237
|
-
{
|
238
|
-
if (pageReader.isNull(column)) {
|
239
|
-
pageBuilder.setNull(column);
|
240
|
-
}
|
241
|
-
else {
|
242
|
-
pageBuilder.setString(column, pageReader.getString(column));
|
243
|
-
}
|
244
|
-
if (shouldAddRecord) {
|
245
|
-
return;
|
246
|
-
}
|
247
|
-
List<Condition> conditionList = conditionMap.get(column.getName());
|
248
|
-
for (Condition tempCondition : conditionList) {
|
249
|
-
StringCondition condition = (StringCondition) tempCondition;
|
250
|
-
if (pageReader.isNull(column)) {
|
251
|
-
if (condition.compare(null)) {
|
252
|
-
shouldAddRecord = true;
|
253
|
-
break;
|
254
|
-
}
|
255
|
-
}
|
256
|
-
else {
|
257
|
-
String subject = pageReader.getString(column);
|
258
|
-
if (condition.compare(subject)) {
|
259
|
-
shouldAddRecord = true;
|
260
|
-
break;
|
261
|
-
}
|
262
|
-
}
|
263
|
-
}
|
264
|
-
}
|
265
|
-
|
266
|
-
@Override
|
267
|
-
public void timestampColumn(Column column)
|
268
|
-
{
|
269
|
-
if (pageReader.isNull(column)) {
|
270
|
-
pageBuilder.setNull(column);
|
271
|
-
}
|
272
|
-
else {
|
273
|
-
pageBuilder.setTimestamp(column, pageReader.getTimestamp(column));
|
274
|
-
}
|
275
|
-
if (shouldAddRecord) {
|
276
|
-
return;
|
277
|
-
}
|
278
|
-
List<Condition> conditionList = conditionMap.get(column.getName());
|
279
|
-
for (Condition tempCondition : conditionList) {
|
280
|
-
TimestampCondition condition = (TimestampCondition) tempCondition;
|
281
|
-
if (pageReader.isNull(column)) {
|
282
|
-
if (condition.compare(null)) {
|
283
|
-
shouldAddRecord = true;
|
284
|
-
break;
|
285
|
-
}
|
286
|
-
}
|
287
|
-
else {
|
288
|
-
Timestamp subject = pageReader.getTimestamp(column);
|
289
|
-
if (condition.compare(subject)) {
|
290
|
-
shouldAddRecord = true;
|
291
|
-
break;
|
292
|
-
}
|
293
|
-
}
|
294
|
-
}
|
295
|
-
}
|
296
|
-
}
|
297
|
-
|
298
|
-
class ColumnVisitorAndImpl implements ColumnVisitor
|
299
|
-
{
|
300
|
-
private final PageBuilder pageBuilder;
|
301
|
-
|
302
|
-
ColumnVisitorAndImpl(PageBuilder pageBuilder)
|
303
|
-
{
|
304
|
-
this.pageBuilder = pageBuilder;
|
305
|
-
}
|
306
|
-
|
307
|
-
@Override
|
308
|
-
public void booleanColumn(Column column)
|
309
|
-
{
|
310
|
-
if (!shouldAddRecord) {
|
311
|
-
return;
|
312
|
-
}
|
313
|
-
List<Condition> conditionList = conditionMap.get(column.getName());
|
314
|
-
for (Condition tempCondition : conditionList) {
|
315
|
-
BooleanCondition condition = (BooleanCondition) tempCondition;
|
316
|
-
if (pageReader.isNull(column)) {
|
317
|
-
if (!condition.compare(null)) {
|
318
|
-
shouldAddRecord = false;
|
319
|
-
break;
|
320
|
-
}
|
321
|
-
}
|
322
|
-
else {
|
323
|
-
boolean subject = pageReader.getBoolean(column);
|
324
|
-
if (!condition.compare(subject)) {
|
325
|
-
shouldAddRecord = false;
|
326
|
-
break;
|
327
|
-
}
|
328
|
-
}
|
329
|
-
}
|
330
|
-
if (pageReader.isNull(column)) {
|
331
|
-
pageBuilder.setNull(column);
|
332
|
-
}
|
333
|
-
else {
|
334
|
-
pageBuilder.setBoolean(column, pageReader.getBoolean(column));
|
335
|
-
}
|
336
|
-
}
|
337
|
-
|
338
|
-
@Override
|
339
|
-
public void longColumn(Column column)
|
340
|
-
{
|
341
|
-
if (!shouldAddRecord) {
|
342
|
-
return;
|
343
|
-
}
|
344
|
-
List<Condition> conditionList = conditionMap.get(column.getName());
|
345
|
-
for (Condition tempCondition : conditionList) {
|
346
|
-
LongCondition condition = (LongCondition) tempCondition;
|
347
|
-
if (pageReader.isNull(column)) {
|
348
|
-
if (!condition.compare(null)) {
|
349
|
-
shouldAddRecord = false;
|
350
|
-
break;
|
351
|
-
}
|
352
|
-
}
|
353
|
-
else {
|
354
|
-
long subject = pageReader.getLong(column);
|
355
|
-
if (!condition.compare(subject)) {
|
356
|
-
shouldAddRecord = false;
|
357
|
-
break;
|
358
|
-
}
|
359
|
-
}
|
360
|
-
}
|
361
|
-
if (pageReader.isNull(column)) {
|
362
|
-
pageBuilder.setNull(column);
|
363
|
-
}
|
364
|
-
else {
|
365
|
-
pageBuilder.setLong(column, pageReader.getLong(column));
|
366
|
-
}
|
367
|
-
}
|
368
|
-
|
369
|
-
@Override
|
370
|
-
public void doubleColumn(Column column)
|
371
|
-
{
|
372
|
-
if (!shouldAddRecord) {
|
373
|
-
return;
|
374
|
-
}
|
375
|
-
List<Condition> conditionList = conditionMap.get(column.getName());
|
376
|
-
for (Condition tempCondition : conditionList) {
|
377
|
-
DoubleCondition condition = (DoubleCondition) tempCondition;
|
378
|
-
if (pageReader.isNull(column)) {
|
379
|
-
if (!condition.compare(null)) {
|
380
|
-
shouldAddRecord = false;
|
381
|
-
break;
|
382
|
-
}
|
383
|
-
}
|
384
|
-
else {
|
385
|
-
double subject = pageReader.getDouble(column);
|
386
|
-
if (!condition.compare(subject)) {
|
387
|
-
shouldAddRecord = false;
|
388
|
-
break;
|
389
|
-
}
|
390
|
-
}
|
391
|
-
}
|
392
|
-
if (pageReader.isNull(column)) {
|
393
|
-
pageBuilder.setNull(column);
|
394
|
-
}
|
395
|
-
else {
|
396
|
-
pageBuilder.setDouble(column, pageReader.getDouble(column));
|
397
|
-
}
|
398
|
-
}
|
399
|
-
|
400
|
-
@Override
|
401
|
-
public void stringColumn(Column column)
|
402
|
-
{
|
403
|
-
if (!shouldAddRecord) {
|
404
|
-
return;
|
405
|
-
}
|
406
|
-
List<Condition> conditionList = conditionMap.get(column.getName());
|
407
|
-
for (Condition tempCondition : conditionList) {
|
408
|
-
StringCondition condition = (StringCondition) tempCondition;
|
409
|
-
if (pageReader.isNull(column)) {
|
410
|
-
if (!condition.compare(null)) {
|
411
|
-
shouldAddRecord = false;
|
412
|
-
break;
|
413
|
-
}
|
414
|
-
}
|
415
|
-
else {
|
416
|
-
String subject = pageReader.getString(column);
|
417
|
-
if (!condition.compare(subject)) {
|
418
|
-
shouldAddRecord = false;
|
419
|
-
break;
|
420
|
-
}
|
421
|
-
}
|
422
|
-
}
|
423
|
-
if (pageReader.isNull(column)) {
|
424
|
-
pageBuilder.setNull(column);
|
425
|
-
}
|
426
|
-
else {
|
427
|
-
pageBuilder.setString(column, pageReader.getString(column));
|
428
|
-
}
|
429
|
-
}
|
430
|
-
|
431
|
-
@Override
|
432
|
-
public void timestampColumn(Column column)
|
433
|
-
{
|
434
|
-
if (!shouldAddRecord) {
|
435
|
-
return;
|
436
|
-
}
|
437
|
-
List<Condition> conditionList = conditionMap.get(column.getName());
|
438
|
-
for (Condition tempCondition : conditionList) {
|
439
|
-
TimestampCondition condition = (TimestampCondition) tempCondition;
|
440
|
-
if (pageReader.isNull(column)) {
|
441
|
-
if (!condition.compare(null)) {
|
442
|
-
shouldAddRecord = false;
|
443
|
-
break;
|
444
|
-
}
|
445
|
-
}
|
446
|
-
else {
|
447
|
-
Timestamp subject = pageReader.getTimestamp(column);
|
448
|
-
if (!condition.compare(subject)) {
|
449
|
-
shouldAddRecord = false;
|
450
|
-
break;
|
451
|
-
}
|
452
|
-
}
|
453
|
-
}
|
454
|
-
if (pageReader.isNull(column)) {
|
455
|
-
pageBuilder.setNull(column);
|
456
|
-
}
|
457
|
-
else {
|
458
|
-
pageBuilder.setTimestamp(column, pageReader.getTimestamp(column));
|
459
|
-
}
|
460
|
-
}
|
461
|
-
}
|
462
|
-
};
|
463
|
-
}
|
464
|
-
}
|