You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2016/12/12 20:07:40 UTC
hbase git commit: HBASE-17297 Single Filter in parenthesis cannot be
parsed correctly (Xuesen Liang)
Repository: hbase
Updated Branches:
refs/heads/master 1615f45b3 -> adb319f5c
HBASE-17297 Single Filter in parenthesis cannot be parsed correctly (Xuesen Liang)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/adb319f5
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/adb319f5
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/adb319f5
Branch: refs/heads/master
Commit: adb319f5c23e8813ac8cc5a27a483caf825dfdda
Parents: 1615f45
Author: tedyu <yu...@gmail.com>
Authored: Mon Dec 12 12:07:34 2016 -0800
Committer: tedyu <yu...@gmail.com>
Committed: Mon Dec 12 12:07:34 2016 -0800
----------------------------------------------------------------------
.../org/apache/hadoop/hbase/filter/ParseFilter.java | 7 +++++++
.../apache/hadoop/hbase/filter/TestParseFilter.java | 16 ++++++++++++++++
2 files changed, 23 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/adb319f5/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ParseFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ParseFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ParseFilter.java
index 5089308..f59ddb5 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ParseFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ParseFilter.java
@@ -161,6 +161,10 @@ public class ParseFilter {
throw new IllegalArgumentException("Mismatched parenthesis");
}
ByteBuffer argumentOnTopOfStack = operatorStack.peek();
+ if (argumentOnTopOfStack.equals(ParseConstants.LPAREN_BUFFER)) {
+ operatorStack.pop();
+ continue;
+ }
while (!(argumentOnTopOfStack.equals(ParseConstants.LPAREN_BUFFER))) {
filterStack.push(popArguments(operatorStack, filterStack));
if (operatorStack.empty()) {
@@ -181,6 +185,9 @@ public class ParseFilter {
while (!operatorStack.empty()) {
filterStack.push(popArguments(operatorStack, filterStack));
}
+ if (filterStack.empty()) {
+ throw new IllegalArgumentException("Incorrect Filter String");
+ }
filter = filterStack.pop();
if (!filterStack.empty()) {
throw new IllegalArgumentException("Incorrect Filter String");
http://git-wip-us.apache.org/repos/asf/hbase/blob/adb319f5/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestParseFilter.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestParseFilter.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestParseFilter.java
index 4b2df33..b6d8bc1 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestParseFilter.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestParseFilter.java
@@ -509,6 +509,22 @@ public class TestParseFilter {
}
@Test
+ public void testCompoundFilter5() throws IOException {
+ String filterStr = "(ValueFilter(!=, 'substring:pre'))";
+ ValueFilter valueFilter = doTestFilter(filterStr, ValueFilter.class);
+ assertTrue(valueFilter.getComparator() instanceof SubstringComparator);
+
+ filterStr = "(ValueFilter(>=,'binary:x') AND (ValueFilter(<=,'binary:y')))"
+ + " OR ValueFilter(=,'binary:ab')";
+ filter = f.parseFilterString(filterStr);
+ assertTrue(filter instanceof FilterList);
+ List<Filter> list = ((FilterList) filter).getFilters();
+ assertEquals(2, list.size());
+ assertTrue(list.get(0) instanceof FilterList);
+ assertTrue(list.get(1) instanceof ValueFilter);
+ }
+
+ @Test
public void testIncorrectCompareOperator() throws IOException {
String filterString = "RowFilter ('>>' , 'binary:region')";
try {