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 @Override
101 public byte [] toByteArray() {
102 FilterProtos.RowFilter.Builder builder =
103 FilterProtos.RowFilter.newBuilder();
104 builder.setCompareFilter(super.convert());
105 return builder.build().toByteArray();
106 }
107
108
109
110
111
112
113
114 public static RowFilter parseFrom(final byte [] pbBytes)
115 throws DeserializationException {
116 FilterProtos.RowFilter proto;
117 try {
118 proto = FilterProtos.RowFilter.parseFrom(pbBytes);
119 } catch (InvalidProtocolBufferException e) {
120 throw new DeserializationException(e);
121 }
122 final CompareOp valueCompareOp =
123 CompareOp.valueOf(proto.getCompareFilter().getCompareOp().name());
124 ByteArrayComparable valueComparator = null;
125 try {
126 if (proto.getCompareFilter().hasComparator()) {
127 valueComparator = ProtobufUtil.toComparator(proto.getCompareFilter().getComparator());
128 }
129 } catch (IOException ioe) {
130 throw new DeserializationException(ioe);
131 }
132 return new RowFilter(valueCompareOp,valueComparator);
133 }
134
135
136
137
138
139
140 @Override
141 boolean areSerializedFieldsEqual(Filter o) {
142 if (o == this) return true;
143 if (!(o instanceof RowFilter)) return false;
144
145 return super.areSerializedFieldsEqual(o);
146 }
147
148 @Override
149 public boolean equals(Object obj) {
150 return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);
151 }
152
153 @Override
154 public int hashCode() {
155 return super.hashCode();
156 }
157 }