1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.filter;
21
22 import java.io.IOException;
23 import java.util.ArrayList;
24
25 import org.apache.hadoop.hbase.classification.InterfaceAudience;
26 import org.apache.hadoop.hbase.classification.InterfaceStability;
27 import org.apache.hadoop.hbase.Cell;
28 import org.apache.hadoop.hbase.exceptions.DeserializationException;
29 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
30 import org.apache.hadoop.hbase.protobuf.generated.FilterProtos;
31
32 import com.google.protobuf.InvalidProtocolBufferException;
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 @InterfaceAudience.Public
48 @InterfaceStability.Stable
49 public class RowFilter extends CompareFilter {
50
51 private boolean filterOutRow = false;
52
53
54
55
56
57
58 public RowFilter(final CompareOp rowCompareOp,
59 final ByteArrayComparable rowComparator) {
60 super(rowCompareOp, rowComparator);
61 }
62
63 @Override
64 public void reset() {
65 this.filterOutRow = false;
66 }
67
68 @Override
69 public ReturnCode filterKeyValue(Cell v) {
70 if(this.filterOutRow) {
71 return ReturnCode.NEXT_ROW;
72 }
73 return ReturnCode.INCLUDE;
74 }
75
76 @Override
77 public boolean filterRowKey(byte[] data, int offset, int length) {
78 if(doCompare(this.compareOp, this.comparator, data, offset, length)) {
79 this.filterOutRow = true;
80 }
81 return this.filterOutRow;
82 }
83
84 @Override
85 public boolean filterRow() {
86 return this.filterOutRow;
87 }
88
89 public static Filter createFilterFromArguments(ArrayList<byte []> filterArguments) {
90 @SuppressWarnings("rawtypes")
91 ArrayList arguments = CompareFilter.extractArguments(filterArguments);
92 CompareOp compareOp = (CompareOp)arguments.get(0);
93 ByteArrayComparable comparator = (ByteArrayComparable)arguments.get(1);
94 return new RowFilter(compareOp, comparator);
95 }
96
97
98
99
100 public byte [] toByteArray() {
101 FilterProtos.RowFilter.Builder builder =
102 FilterProtos.RowFilter.newBuilder();
103 builder.setCompareFilter(super.convert());
104 return builder.build().toByteArray();
105 }
106
107
108
109
110
111
112
113 public static RowFilter parseFrom(final byte [] pbBytes)
114 throws DeserializationException {
115 FilterProtos.RowFilter proto;
116 try {
117 proto = FilterProtos.RowFilter.parseFrom(pbBytes);
118 } catch (InvalidProtocolBufferException e) {
119 throw new DeserializationException(e);
120 }
121 final CompareOp valueCompareOp =
122 CompareOp.valueOf(proto.getCompareFilter().getCompareOp().name());
123 ByteArrayComparable valueComparator = null;
124 try {
125 if (proto.getCompareFilter().hasComparator()) {
126 valueComparator = ProtobufUtil.toComparator(proto.getCompareFilter().getComparator());
127 }
128 } catch (IOException ioe) {
129 throw new DeserializationException(ioe);
130 }
131 return new RowFilter(valueCompareOp,valueComparator);
132 }
133
134
135
136
137
138
139 boolean areSerializedFieldsEqual(Filter o) {
140 if (o == this) return true;
141 if (!(o instanceof RowFilter)) return false;
142
143 return super.areSerializedFieldsEqual(o);
144 }
145 }