Skip to content

Commit 3c8c531

Browse files
authored
Range relevant filter (#79)
* range relevant filter * review
1 parent 0293b45 commit 3c8c531

File tree

3 files changed

+647
-0
lines changed

3 files changed

+647
-0
lines changed

src/main/java/com/alipay/oceanbase/hbase/filter/HBaseFilterUtils.java

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@ private static void toParseableByteArray(ByteArrayOutputStream byteStream, Filte
6868
toParseableByteArray(byteStream, (KeyOnlyFilter) filter);
6969
} else if (filter instanceof TimestampsFilter) {
7070
toParseableByteArray(byteStream, (TimestampsFilter) filter);
71+
} else if (filter instanceof MultiRowRangeFilter) {
72+
toParseableByteArray(byteStream, (MultiRowRangeFilter) filter);
73+
} else if (filter instanceof InclusiveStopFilter) {
74+
toParseableByteArray(byteStream, (InclusiveStopFilter) filter);
75+
} else if (filter instanceof ColumnRangeFilter) {
76+
toParseableByteArray(byteStream, (ColumnRangeFilter) filter);
77+
} else if (filter instanceof MultipleColumnPrefixFilter) {
78+
toParseableByteArray(byteStream, (MultipleColumnPrefixFilter) filter);
7179
} else if (filter instanceof SkipFilter) {
7280
toParseableByteArray(byteStream, (SkipFilter) filter);
7381
} else if (filter instanceof WhileMatchFilter) {
@@ -237,6 +245,77 @@ private static void toParseableByteArray(ByteArrayOutputStream byteStream, Times
237245
byteStream.write(')');
238246
}
239247

248+
// MultiRowRangeFilter('a',true,'b',false,'c',true,'d',false);
249+
private static void toParseableByteArray(ByteArrayOutputStream byteStream, MultiRowRangeFilter filter) throws IOException {
250+
byteStream.write(filter.getClass().getSimpleName().getBytes());
251+
byteStream.write('(');
252+
253+
List<MultiRowRangeFilter.RowRange> ranges = filter.getRowRanges();
254+
for (int i = 0; i < ranges.size(); i ++) {
255+
MultiRowRangeFilter.RowRange range = ranges.get(i);
256+
byteStream.write("'".getBytes());
257+
byteStream.write(range.getStartRow());
258+
byteStream.write("',".getBytes());
259+
byteStream.write(Boolean.toString(range.isStartRowInclusive()).getBytes());
260+
byteStream.write(',');
261+
262+
byteStream.write("'".getBytes());
263+
byteStream.write(range.getStopRow());
264+
byteStream.write("',".getBytes());
265+
byteStream.write(Boolean.toString(range.isStopRowInclusive()).getBytes());
266+
if (i < ranges.size() - 1) {
267+
byteStream.write(',');
268+
}
269+
}
270+
byteStream.write(')');
271+
}
272+
273+
// InclusiveStopFilter('aaa');
274+
private static void toParseableByteArray(ByteArrayOutputStream byteStream, InclusiveStopFilter filter) throws IOException {
275+
byteStream.write(filter.getClass().getSimpleName().getBytes());
276+
byteStream.write('(');
277+
byteStream.write('\'');
278+
byteStream.write(filter.getStopRowKey());
279+
byteStream.write('\'');
280+
byteStream.write(')');
281+
}
282+
283+
// ColumnRangeFilter('a',true,'b',false);
284+
private static void toParseableByteArray(ByteArrayOutputStream byteStream, ColumnRangeFilter filter) throws IOException {
285+
byteStream.write(filter.getClass().getSimpleName().getBytes());
286+
byteStream.write('(');
287+
288+
byteStream.write("'".getBytes());
289+
byteStream.write(filter.getMinColumn());
290+
byteStream.write("',".getBytes());
291+
byteStream.write(Boolean.toString(filter.getMinColumnInclusive()).getBytes());
292+
byteStream.write(',');
293+
294+
byteStream.write("'".getBytes());
295+
byteStream.write(filter.getMaxColumn());
296+
byteStream.write("',".getBytes());
297+
byteStream.write(Boolean.toString(filter.getMaxColumnInclusive()).getBytes());
298+
byteStream.write(')');
299+
}
300+
301+
// MultipleColumnPrefixFilter('a','b','d');
302+
private static void toParseableByteArray(ByteArrayOutputStream byteStream, MultipleColumnPrefixFilter filter) throws IOException {
303+
byteStream.write(filter.getClass().getSimpleName().getBytes());
304+
byteStream.write('(');
305+
306+
byte[][] ranges = filter.getPrefix();
307+
for (int i = 0; i < ranges.length; i ++) {
308+
byte[] range = ranges[i];
309+
byteStream.write("'".getBytes());
310+
byteStream.write(range);
311+
byteStream.write("'".getBytes());
312+
if (i < ranges.length - 1) {
313+
byteStream.write(',');
314+
}
315+
}
316+
byteStream.write(')');
317+
}
318+
240319
// ColumnCountGetFilter(100)
241320
private static void toParseableByteArray(ByteArrayOutputStream byteStream,
242321
ColumnCountGetFilter filter) throws IOException {

0 commit comments

Comments
 (0)