1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.hadoop.hbase.filter;
22
23 import org.apache.hadoop.hbase.KeyValue;
24 import org.apache.hadoop.hbase.io.HbaseObjectWritable;
25
26 import java.io.DataInput;
27 import java.io.DataOutput;
28 import java.io.IOException;
29 import java.util.Arrays;
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 public abstract class CompareFilter extends FilterBase {
47
48
49 public enum CompareOp {
50
51 LESS,
52
53 LESS_OR_EQUAL,
54
55 EQUAL,
56
57 NOT_EQUAL,
58
59 GREATER_OR_EQUAL,
60
61 GREATER,
62
63 NO_OP,
64 }
65
66 protected CompareOp compareOp;
67 protected WritableByteArrayComparable comparator;
68
69
70
71
72 public CompareFilter() {
73 }
74
75
76
77
78
79
80 public CompareFilter(final CompareOp compareOp,
81 final WritableByteArrayComparable comparator) {
82 this.compareOp = compareOp;
83 this.comparator = comparator;
84 }
85
86
87
88
89 public CompareOp getOperator() {
90 return compareOp;
91 }
92
93
94
95
96 public WritableByteArrayComparable getComparator() {
97 return comparator;
98 }
99
100 protected boolean doCompare(final CompareOp compareOp,
101 final WritableByteArrayComparable comparator, final byte [] data,
102 final int offset, final int length) {
103 if (compareOp == CompareOp.NO_OP) {
104 return true;
105 }
106 int compareResult =
107 comparator.compareTo(Arrays.copyOfRange(data, offset,
108 offset + length));
109 switch (compareOp) {
110 case LESS:
111 return compareResult <= 0;
112 case LESS_OR_EQUAL:
113 return compareResult < 0;
114 case EQUAL:
115 return compareResult != 0;
116 case NOT_EQUAL:
117 return compareResult == 0;
118 case GREATER_OR_EQUAL:
119 return compareResult > 0;
120 case GREATER:
121 return compareResult >= 0;
122 default:
123 throw new RuntimeException("Unknown Compare op " +
124 compareOp.name());
125 }
126 }
127
128 public void readFields(DataInput in) throws IOException {
129 compareOp = CompareOp.valueOf(in.readUTF());
130 comparator = (WritableByteArrayComparable)
131 HbaseObjectWritable.readObject(in, null);
132 }
133
134 public void write(DataOutput out) throws IOException {
135 out.writeUTF(compareOp.name());
136 HbaseObjectWritable.writeObject(out, comparator,
137 WritableByteArrayComparable.class, null);
138 }
139 }