You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by wc...@apache.org on 2020/12/21 08:49:04 UTC

[hbase] branch branch-2 updated: HBASE-25084 Add "regexstringnocase" to ParseFilter for case-insensitivity (#2784)

This is an automated email from the ASF dual-hosted git repository.

wchevreuil pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2 by this push:
     new befa76f  HBASE-25084 Add "regexstringnocase" to ParseFilter for case-insensitivity (#2784)
befa76f is described below

commit befa76f55a609ad15f70cadf2692baaa04e49af6
Author: scotthunt <sc...@adobe.com>
AuthorDate: Mon Dec 21 01:39:13 2020 -0700

    HBASE-25084 Add "regexstringnocase" to ParseFilter for case-insensitivity (#2784)
    
    Signed-off-by: stack <st...@apache.org>
    Signed-off-by: Wellington Chevreuil <wc...@apache.org>
---
 .../org/apache/hadoop/hbase/filter/ParseConstants.java    |  7 +++++++
 .../java/org/apache/hadoop/hbase/filter/ParseFilter.java  |  4 ++++
 .../org/apache/hadoop/hbase/filter/TestParseFilter.java   | 15 +++++++++++++++
 3 files changed, 26 insertions(+)

diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ParseConstants.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ParseConstants.java
index 9f52783..b9132a3 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ParseConstants.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ParseConstants.java
@@ -245,6 +245,13 @@ public final class ParseConstants {
                                                              's','t','r','i','n','g'};
 
   /**
+   * RegexStringNoCaseType byte array
+   */
+  public static final byte [] regexStringNoCaseType = new byte [] {'r','e','g','e','x',
+                                                                   's','t','r','i','n','g',
+                                                                   'n','o','c','a','s','e'};
+
+  /**
    * SubstringType byte array
    */
   public static final byte [] substringType = new byte [] {'s','u','b','s','t','r','i','n','g'};
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 716322c..91e578a 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
@@ -28,6 +28,7 @@ import java.util.Collections;
 import java.util.EmptyStackException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.regex.Pattern;
 import java.util.Set;
 import java.util.Stack;
 
@@ -839,6 +840,9 @@ public class ParseFilter {
       return new BinaryPrefixComparator(comparatorValue);
     else if (Bytes.equals(comparatorType, ParseConstants.regexStringType))
       return new RegexStringComparator(new String(comparatorValue, StandardCharsets.UTF_8));
+    else if (Bytes.equals(comparatorType, ParseConstants.regexStringNoCaseType))
+      return new RegexStringComparator(new String(comparatorValue, StandardCharsets.UTF_8),
+                                       Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
     else if (Bytes.equals(comparatorType, ParseConstants.substringType))
       return new SubstringComparator(new String(comparatorValue, StandardCharsets.UTF_8));
     else
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 8dd15be..fbedc1c 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
@@ -24,6 +24,7 @@ import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Pattern;
 import org.apache.hadoop.hbase.CompareOperator;
 import org.apache.hadoop.hbase.HBaseClassTestRule;
 import org.apache.hadoop.hbase.testclassification.MediumTests;
@@ -280,6 +281,20 @@ public class TestParseFilter {
   }
 
   @Test
+  public void testQualifierFilterNoCase() throws IOException {
+    String filterString = "QualifierFilter(=, 'regexstringnocase:pre*')";
+    QualifierFilter qualifierFilter =
+      doTestFilter(filterString, QualifierFilter.class);
+    assertEquals(CompareOperator.EQUAL, qualifierFilter.getCompareOperator());
+    assertTrue(qualifierFilter.getComparator() instanceof RegexStringComparator);
+    RegexStringComparator regexStringComparator =
+      (RegexStringComparator) qualifierFilter.getComparator();
+    assertEquals("pre*", new String(regexStringComparator.getValue(), StandardCharsets.UTF_8));
+    int regexComparatorFlags = regexStringComparator.getEngine().getFlags();
+    assertEquals(Pattern.CASE_INSENSITIVE | Pattern.DOTALL, regexComparatorFlags);
+  }
+
+  @Test
   public void testValueFilter() throws IOException {
     String filterString = "ValueFilter(!=, 'substring:pre')";
     ValueFilter valueFilter =