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
48 @InterfaceAudience.Public
49 @InterfaceStability.Stable
50 public class QualifierFilter extends CompareFilter {
51
52
53
54
55
56
57 public QualifierFilter(final CompareOp op,
58 final ByteArrayComparable qualifierComparator) {
59 super(op, qualifierComparator);
60 }
61
62 @Override
63 public ReturnCode filterKeyValue(Cell v) {
64 if (doCompare(this.compareOp, this.comparator, v.getQualifierArray(),
65 v.getQualifierOffset(), v.getQualifierLength())) {
66 return ReturnCode.SKIP;
67 }
68 return ReturnCode.INCLUDE;
69 }
70
71 public static Filter createFilterFromArguments(ArrayList<byte []> filterArguments) {
72 ArrayList<?> arguments = CompareFilter.extractArguments(filterArguments);
73 CompareOp compareOp = (CompareOp)arguments.get(0);
74 ByteArrayComparable comparator = (ByteArrayComparable)arguments.get(1);
75 return new QualifierFilter(compareOp, comparator);
76 }
77
78
79
80
81 public byte [] toByteArray() {
82 FilterProtos.QualifierFilter.Builder builder =
83 FilterProtos.QualifierFilter.newBuilder();
84 builder.setCompareFilter(super.convert());
85 return builder.build().toByteArray();
86 }
87
88
89
90
91
92
93
94 public static QualifierFilter parseFrom(final byte [] pbBytes)
95 throws DeserializationException {
96 FilterProtos.QualifierFilter proto;
97 try {
98 proto = FilterProtos.QualifierFilter.parseFrom(pbBytes);
99 } catch (InvalidProtocolBufferException e) {
100 throw new DeserializationException(e);
101 }
102 final CompareOp valueCompareOp =
103 CompareOp.valueOf(proto.getCompareFilter().getCompareOp().name());
104 ByteArrayComparable valueComparator = null;
105 try {
106 if (proto.getCompareFilter().hasComparator()) {
107 valueComparator = ProtobufUtil.toComparator(proto.getCompareFilter().getComparator());
108 }
109 } catch (IOException ioe) {
110 throw new DeserializationException(ioe);
111 }
112 return new QualifierFilter(valueCompareOp,valueComparator);
113 }
114
115
116
117
118
119
120 boolean areSerializedFieldsEqual(Filter o) {
121 if (o == this) return true;
122 if (!(o instanceof QualifierFilter)) return false;
123
124 return super.areSerializedFieldsEqual(o);
125 }
126 }