@Test public void testRowFilter() throws IOException { String filterString = "RowFilter ( =, 'binary:regionse')"; RowFilter rowFilter = doTestFilter(filterString, RowFilter.class); assertEquals(CompareOperator.EQUAL, rowFilter.getCompareOperator()); assertTrue(rowFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) rowFilter.getComparator(); assertEquals("regionse", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testDependentColumnFilter() throws IOException { String filterString = "DependentColumnFilter('family', 'qualifier', true, =, 'binary:abc')"; DependentColumnFilter dependentColumnFilter = doTestFilter(filterString, DependentColumnFilter.class); assertEquals("family", new String(dependentColumnFilter.getFamily(), StandardCharsets.UTF_8)); assertEquals("qualifier", new String(dependentColumnFilter.getQualifier(), StandardCharsets.UTF_8)); assertTrue(dependentColumnFilter.getDropDependentColumn()); assertEquals(CompareOperator.EQUAL, dependentColumnFilter.getCompareOperator()); assertTrue(dependentColumnFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator)dependentColumnFilter.getComparator(); assertEquals("abc", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testCompoundFilter2() throws IOException { String filterString = "(PrefixFilter('realtime') AND QualifierFilter (>=, 'binary:e'))" + "OR FamilyFilter (=, 'binary:qualifier') "; FilterList filterList = doTestFilter(filterString, FilterList.class); ArrayList<Filter> filterListFilters = (ArrayList<Filter>) filterList.getFilters(); assertTrue(filterListFilters.get(0) instanceof FilterList); assertTrue(filterListFilters.get(1) instanceof FamilyFilter); assertEquals(FilterList.Operator.MUST_PASS_ONE, filterList.getOperator()); filterList = (FilterList) filterListFilters.get(0); FamilyFilter familyFilter = (FamilyFilter) filterListFilters.get(1); filterListFilters = (ArrayList<Filter>)filterList.getFilters(); assertTrue(filterListFilters.get(0) instanceof PrefixFilter); assertTrue(filterListFilters.get(1) instanceof QualifierFilter); assertEquals(FilterList.Operator.MUST_PASS_ALL, filterList.getOperator()); assertEquals(CompareOperator.EQUAL, familyFilter.getCompareOperator()); assertTrue(familyFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) familyFilter.getComparator(); assertEquals("qualifier", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); PrefixFilter prefixFilter = (PrefixFilter) filterListFilters.get(0); byte [] prefix = prefixFilter.getPrefix(); assertEquals("realtime", new String(prefix, StandardCharsets.UTF_8)); QualifierFilter qualifierFilter = (QualifierFilter) filterListFilters.get(1); assertEquals(CompareOperator.GREATER_OR_EQUAL, qualifierFilter.getCompareOperator()); assertTrue(qualifierFilter.getComparator() instanceof BinaryComparator); binaryComparator = (BinaryComparator) qualifierFilter.getComparator(); assertEquals("e", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testSkipFilter() throws IOException { String filterString = "SKIP ValueFilter( =, 'binary:0')"; SkipFilter skipFilter = doTestFilter(filterString, SkipFilter.class); assertTrue(skipFilter.getFilter() instanceof ValueFilter); ValueFilter valueFilter = (ValueFilter) skipFilter.getFilter(); assertEquals(CompareOperator.EQUAL, valueFilter.getCompareOperator()); assertTrue(valueFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) valueFilter.getComparator(); assertEquals("0", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testWhileFilter() throws IOException { String filterString = " WHILE RowFilter ( !=, 'binary:row1')"; WhileMatchFilter whileMatchFilter = doTestFilter(filterString, WhileMatchFilter.class); assertTrue(whileMatchFilter.getFilter() instanceof RowFilter); RowFilter rowFilter = (RowFilter) whileMatchFilter.getFilter(); assertEquals(CompareOperator.NOT_EQUAL, rowFilter.getCompareOperator()); assertTrue(rowFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) rowFilter.getComparator(); assertEquals("row1", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testSingleColumnValueFilter() throws IOException { String filterString = "SingleColumnValueFilter " + "('family', 'qualifier', >=, 'binary:a', true, false)"; SingleColumnValueFilter singleColumnValueFilter = doTestFilter(filterString, SingleColumnValueFilter.class); assertEquals("family", new String(singleColumnValueFilter.getFamily(), StandardCharsets.UTF_8)); assertEquals("qualifier", new String(singleColumnValueFilter.getQualifier(), StandardCharsets.UTF_8)); assertEquals(CompareOperator.GREATER_OR_EQUAL, singleColumnValueFilter.getCompareOperator()); assertTrue(singleColumnValueFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) singleColumnValueFilter.getComparator(); assertEquals("a", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); assertTrue(singleColumnValueFilter.getFilterIfMissing()); assertFalse(singleColumnValueFilter.getLatestVersionOnly()); filterString = "SingleColumnValueFilter ('family', 'qualifier', >, 'binaryprefix:a')"; singleColumnValueFilter = doTestFilter(filterString, SingleColumnValueFilter.class); assertEquals("family", new String(singleColumnValueFilter.getFamily(), StandardCharsets.UTF_8)); assertEquals("qualifier", new String(singleColumnValueFilter.getQualifier(), StandardCharsets.UTF_8)); assertEquals(CompareOperator.GREATER, singleColumnValueFilter.getCompareOperator()); assertTrue(singleColumnValueFilter.getComparator() instanceof BinaryPrefixComparator); BinaryPrefixComparator binaryPrefixComparator = (BinaryPrefixComparator) singleColumnValueFilter.getComparator(); assertEquals("a", new String(binaryPrefixComparator.getValue(), StandardCharsets.UTF_8)); assertFalse(singleColumnValueFilter.getFilterIfMissing()); assertTrue(singleColumnValueFilter.getLatestVersionOnly()); }
isBetter = topOrder.compareTo(currentOrder) < 0; //desc if (topOrder.getValue().length < 1 || isBetter) { topOrder = new BinaryComparator(currentOrder); topValue = valueEntry.getValue().getFirst();
@Override public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) { FirstLastNthValueDataContainer payload = new FirstLastNthValueDataContainer(); payload.setIsAscending(isAscending); payload.setFixedWidthOrderValues(orderByColumn.getDataType().isFixedWidth()); payload.setFixedWidthDataValues(dataColumn.getDataType().isFixedWidth()); if (useOffset) { payload.setOffset(offset); if (topValuesCount == 0) { return false; } } else { if (topValue == null) { return false; } LinkedList<byte[]> topValueList = new LinkedList<byte[]>(); topValueList.push(topValue); topValues.put(topOrder.getValue(), topValueList); } payload.setData(topValues); try { ptr.set(payload.getPayload()); } catch (IOException ex) { logger.error(ex.getMessage()); return false; } return true; }
isHigher = topOrder.compareTo(currentOrder) < 0;//desc if (topOrder.getValue().length < 1 || isHigher) { if (hasValueDescSortOrder) { topValue = SortOrder.invert(ptr.get(), ptr.getOffset(), ptr.getLength());
@Override public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) { FirstLastNthValueDataContainer payload = new FirstLastNthValueDataContainer(); payload.setIsAscending(isAscending); payload.setFixedWidthOrderValues(orderByColumn.getDataType().isFixedWidth()); payload.setFixedWidthDataValues(dataColumn.getDataType().isFixedWidth()); if (useOffset) { payload.setOffset(offset); if (topValuesCount == 0) { return false; } } else { if (topValue == null) { return false; } LinkedList<byte[]> topValueList = new LinkedList<byte[]>(); topValueList.push(topValue); topValues.put(topOrder.getValue(), topValueList); } payload.setData(topValues); try { ptr.set(payload.getPayload()); } catch (IOException ex) { logger.error(ex.getMessage()); return false; } return true; }
@Override public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) { FirstLastNthValueDataContainer payload = new FirstLastNthValueDataContainer(); payload.setIsAscending(isAscending); payload.setFixedWidthOrderValues(orderByColumn.getDataType().isFixedWidth()); payload.setFixedWidthDataValues(dataColumn.getDataType().isFixedWidth()); if (useOffset) { payload.setOffset(offset); if (topValuesCount == 0) { return false; } } else { if (topValue == null) { return false; } LinkedList<byte[]> topValueList = new LinkedList<byte[]>(); topValueList.push(topValue); topValues.put(topOrder.getValue(), topValueList); } payload.setData(topValues); try { ptr.set(payload.getPayload()); } catch (IOException ex) { logger.error(ex.getMessage()); return false; } return true; }
private Filter adaptBinaryComparator( CompareOp compareOp, BinaryComparator comparator) { ByteString value = ByteString.copyFrom(comparator.getValue()); switch (compareOp) { case LESS: return range().endClosed(value); case EQUAL: if (comparator.getValue().length == 0) { if(comparator.getValue().length == 0) {
@Test public void testRowFilter() throws IOException { String filterString = "RowFilter ( =, 'binary:regionse')"; RowFilter rowFilter = doTestFilter(filterString, RowFilter.class); assertEquals(CompareOperator.EQUAL, rowFilter.getCompareOperator()); assertTrue(rowFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) rowFilter.getComparator(); assertEquals("regionse", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testCompoundFilter2() throws IOException { String filterString = "(PrefixFilter('realtime') AND QualifierFilter (>=, 'binary:e'))" + "OR FamilyFilter (=, 'binary:qualifier') "; FilterList filterList = doTestFilter(filterString, FilterList.class); ArrayList<Filter> filterListFilters = (ArrayList<Filter>) filterList.getFilters(); assertTrue(filterListFilters.get(0) instanceof FilterList); assertTrue(filterListFilters.get(1) instanceof FamilyFilter); assertEquals(FilterList.Operator.MUST_PASS_ONE, filterList.getOperator()); filterList = (FilterList) filterListFilters.get(0); FamilyFilter familyFilter = (FamilyFilter) filterListFilters.get(1); filterListFilters = (ArrayList<Filter>)filterList.getFilters(); assertTrue(filterListFilters.get(0) instanceof PrefixFilter); assertTrue(filterListFilters.get(1) instanceof QualifierFilter); assertEquals(FilterList.Operator.MUST_PASS_ALL, filterList.getOperator()); assertEquals(CompareOperator.EQUAL, familyFilter.getCompareOperator()); assertTrue(familyFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) familyFilter.getComparator(); assertEquals("qualifier", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); PrefixFilter prefixFilter = (PrefixFilter) filterListFilters.get(0); byte [] prefix = prefixFilter.getPrefix(); assertEquals("realtime", new String(prefix, StandardCharsets.UTF_8)); QualifierFilter qualifierFilter = (QualifierFilter) filterListFilters.get(1); assertEquals(CompareOperator.GREATER_OR_EQUAL, qualifierFilter.getCompareOperator()); assertTrue(qualifierFilter.getComparator() instanceof BinaryComparator); binaryComparator = (BinaryComparator) qualifierFilter.getComparator(); assertEquals("e", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testDependentColumnFilter() throws IOException { String filterString = "DependentColumnFilter('family', 'qualifier', true, =, 'binary:abc')"; DependentColumnFilter dependentColumnFilter = doTestFilter(filterString, DependentColumnFilter.class); assertEquals("family", new String(dependentColumnFilter.getFamily(), StandardCharsets.UTF_8)); assertEquals("qualifier", new String(dependentColumnFilter.getQualifier(), StandardCharsets.UTF_8)); assertTrue(dependentColumnFilter.getDropDependentColumn()); assertEquals(CompareOperator.EQUAL, dependentColumnFilter.getCompareOperator()); assertTrue(dependentColumnFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator)dependentColumnFilter.getComparator(); assertEquals("abc", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }
private Filter adaptBinaryComparator( FilterAdapterContext context, CompareOp compareOp, BinaryComparator comparator) throws IOException { ByteString quotedValue = ReaderExpressionHelper.quoteRegularExpression(comparator.getValue()); switch (compareOp) { case LESS: return range(context).endOpen(quotedValue); case LESS_OR_EQUAL: return range(context).endClosed(quotedValue); case EQUAL: return FILTERS.qualifier().regex(quotedValue); case NOT_EQUAL: // This strictly less than + strictly greater than: String familyName = getFamily(context); return FILTERS.interleave() .filter(range(familyName).endOpen(quotedValue)) .filter(range(familyName).startOpen(quotedValue)); case GREATER_OR_EQUAL: return range(context).startClosed(quotedValue); case GREATER: return range(context).startOpen(quotedValue); case NO_OP: // No-op always passes. Instead of attempting to return null or default instance, // include an always-match filter. return FILTERS.pass(); default: throw new IllegalStateException( String.format("Cannot handle unknown compare op %s", compareOp)); } }
@Test public void testSkipFilter() throws IOException { String filterString = "SKIP ValueFilter( =, 'binary:0')"; SkipFilter skipFilter = doTestFilter(filterString, SkipFilter.class); assertTrue(skipFilter.getFilter() instanceof ValueFilter); ValueFilter valueFilter = (ValueFilter) skipFilter.getFilter(); assertEquals(CompareOperator.EQUAL, valueFilter.getCompareOperator()); assertTrue(valueFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) valueFilter.getComparator(); assertEquals("0", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testWhileFilter() throws IOException { String filterString = " WHILE RowFilter ( !=, 'binary:row1')"; WhileMatchFilter whileMatchFilter = doTestFilter(filterString, WhileMatchFilter.class); assertTrue(whileMatchFilter.getFilter() instanceof RowFilter); RowFilter rowFilter = (RowFilter) whileMatchFilter.getFilter(); assertEquals(CompareOperator.NOT_EQUAL, rowFilter.getCompareOperator()); assertTrue(rowFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) rowFilter.getComparator(); assertEquals("row1", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }
private Filter adaptBinaryComparator( FilterAdapterContext context, CompareOp compareOp, BinaryComparator comparator) throws IOException { ByteString quotedValue = ReaderExpressionHelper.quoteRegularExpression(comparator.getValue()); switch (compareOp) { case LESS: return range(context).endOpen(quotedValue); case LESS_OR_EQUAL: return range(context).endClosed(quotedValue); case EQUAL: return FILTERS.qualifier().regex(quotedValue); case NOT_EQUAL: // This strictly less than + strictly greater than: String familyName = getFamily(context); return FILTERS.interleave() .filter(range(familyName).endOpen(quotedValue)) .filter(range(familyName).startOpen(quotedValue)); case GREATER_OR_EQUAL: return range(context).startClosed(quotedValue); case GREATER: return range(context).startOpen(quotedValue); case NO_OP: // No-op always passes. Instead of attempting to return null or default instance, // include an always-match filter. return FILTERS.pass(); default: throw new IllegalStateException( String.format("Cannot handle unknown compare op %s", compareOp)); } }
@Test public void testSingleColumnValueFilter() throws IOException { String filterString = "SingleColumnValueFilter " + "('family', 'qualifier', >=, 'binary:a', true, false)"; SingleColumnValueFilter singleColumnValueFilter = doTestFilter(filterString, SingleColumnValueFilter.class); assertEquals("family", new String(singleColumnValueFilter.getFamily(), StandardCharsets.UTF_8)); assertEquals("qualifier", new String(singleColumnValueFilter.getQualifier(), StandardCharsets.UTF_8)); assertEquals(CompareOperator.GREATER_OR_EQUAL, singleColumnValueFilter.getCompareOperator()); assertTrue(singleColumnValueFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) singleColumnValueFilter.getComparator(); assertEquals("a", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); assertTrue(singleColumnValueFilter.getFilterIfMissing()); assertFalse(singleColumnValueFilter.getLatestVersionOnly()); filterString = "SingleColumnValueFilter ('family', 'qualifier', >, 'binaryprefix:a')"; singleColumnValueFilter = doTestFilter(filterString, SingleColumnValueFilter.class); assertEquals("family", new String(singleColumnValueFilter.getFamily(), StandardCharsets.UTF_8)); assertEquals("qualifier", new String(singleColumnValueFilter.getQualifier(), StandardCharsets.UTF_8)); assertEquals(CompareOperator.GREATER, singleColumnValueFilter.getCompareOperator()); assertTrue(singleColumnValueFilter.getComparator() instanceof BinaryPrefixComparator); BinaryPrefixComparator binaryPrefixComparator = (BinaryPrefixComparator) singleColumnValueFilter.getComparator(); assertEquals("a", new String(binaryPrefixComparator.getValue(), StandardCharsets.UTF_8)); assertFalse(singleColumnValueFilter.getFilterIfMissing()); assertTrue(singleColumnValueFilter.getLatestVersionOnly()); }