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

jackie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 97a2e6d95e fix TextMatchFilterOperator boolean grouping (#13009)
97a2e6d95e is described below

commit 97a2e6d95eb87c67405cd661371a51acc478adec
Author: Christopher Peck <[email protected]>
AuthorDate: Thu Apr 25 16:14:26 2024 -0700

    fix TextMatchFilterOperator boolean grouping (#13009)
---
 .../optimizer/filter/TextMatchFilterOptimizer.java |  2 +-
 .../core/query/optimizer/QueryOptimizerTest.java   | 29 ++++++++++++----------
 2 files changed, 17 insertions(+), 14 deletions(-)

diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/query/optimizer/filter/TextMatchFilterOptimizer.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/query/optimizer/filter/TextMatchFilterOptimizer.java
index aca4e2d5cc..8c742cfc98 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/query/optimizer/filter/TextMatchFilterOptimizer.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/query/optimizer/filter/TextMatchFilterOptimizer.java
@@ -162,7 +162,7 @@ public class TextMatchFilterOptimizer implements 
FilterOptimizer {
         mergedTextMatchFilter = String.join(SPACE + operator + SPACE, 
literals);
       }
       Expression mergedTextMatchExpression = 
RequestUtils.getFunctionExpression(FilterKind.TEXT_MATCH.name());
-      Expression mergedTextMatchFilterExpression = 
RequestUtils.getLiteralExpression(mergedTextMatchFilter);
+      Expression mergedTextMatchFilterExpression = 
RequestUtils.getLiteralExpression("(" + mergedTextMatchFilter + ")");
       mergedTextMatchExpression.getFunctionCall()
           .setOperands(Arrays.asList(entry.getKey(), 
mergedTextMatchFilterExpression));
 
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/core/query/optimizer/QueryOptimizerTest.java
 
b/pinot-core/src/test/java/org/apache/pinot/core/query/optimizer/QueryOptimizerTest.java
index 337075f974..848f458742 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/core/query/optimizer/QueryOptimizerTest.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/core/query/optimizer/QueryOptimizerTest.java
@@ -178,7 +178,7 @@ public class QueryOptimizerTest {
     List<Expression> operands = filterFunction.getOperands();
     assertEquals(operands.size(), 2);
     assertEquals(operands.get(0), 
RequestUtils.getIdentifierExpression("string"));
-    assertEquals(operands.get(1), RequestUtils.getLiteralExpression("foo AND 
bar OR baz"));
+    assertEquals(operands.get(1), RequestUtils.getLiteralExpression("((foo AND 
bar) OR baz)"));
   }
 
   private static Expression getRangeFilterExpression(String column, String 
rangeString) {
@@ -268,32 +268,35 @@ public class QueryOptimizerTest {
 
     // TextMatchFilterOptimizer
     testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo') AND 
TEXT_MATCH(string, 'bar')",
-        "SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo AND bar')");
+        "SELECT * FROM testTable WHERE TEXT_MATCH(string, '(foo AND bar)')");
     testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, '\"foo bar\"') 
AND TEXT_MATCH(string, 'baz')",
-        "SELECT * FROM testTable WHERE TEXT_MATCH(string, '\"foo bar\" AND 
baz')");
+        "SELECT * FROM testTable WHERE TEXT_MATCH(string, '(\"foo bar\" AND 
baz)')");
     testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, '\"foo bar\"') 
AND TEXT_MATCH(string, '/.*ooba.*/')",
-        "SELECT * FROM testTable WHERE TEXT_MATCH(string, '\"foo bar\" AND 
/.*ooba.*/')");
+        "SELECT * FROM testTable WHERE TEXT_MATCH(string, '(\"foo bar\" AND 
/.*ooba.*/)')");
     testQuery("SELECT * FROM testTable WHERE int = 1 AND TEXT_MATCH(string, 
'foo') AND TEXT_MATCH(string, 'bar')",
-        "SELECT * FROM testTable WHERE int = 1 AND TEXT_MATCH(string, 'foo AND 
bar')");
+        "SELECT * FROM testTable WHERE int = 1 AND TEXT_MATCH(string, '(foo 
AND bar)')");
     testQuery("SELECT * FROM testTable WHERE int = 1 OR TEXT_MATCH(string, 
'foo') AND TEXT_MATCH(string, 'bar')",
-        "SELECT * FROM testTable WHERE int = 1 OR TEXT_MATCH(string, 'foo AND 
bar')");
+        "SELECT * FROM testTable WHERE int = 1 OR TEXT_MATCH(string, '(foo AND 
bar)')");
     testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo') AND NOT 
TEXT_MATCH(string, 'bar')",
-        "SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo AND NOT bar')");
+        "SELECT * FROM testTable WHERE TEXT_MATCH(string, '(foo AND NOT 
bar)')");
     testQuery("SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, 'foo') AND 
TEXT_MATCH(string, 'bar')",
-        "SELECT * FROM testTable WHERE TEXT_MATCH(string, 'NOT foo AND bar')");
+        "SELECT * FROM testTable WHERE TEXT_MATCH(string, '(NOT foo AND 
bar)')");
     testQuery("SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, 'foo') AND 
NOT TEXT_MATCH(string, 'bar')",
-        "SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, 'foo OR bar')");
+        "SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, '(foo OR 
bar)')");
     testQuery("SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, 'foo') OR 
NOT TEXT_MATCH(string, 'bar')",
-        "SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, 'foo AND bar')");
+        "SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, '(foo AND 
bar)')");
     testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo') AND 
TEXT_MATCH(string, 'bar') OR "
-        + "TEXT_MATCH(string, 'baz')", "SELECT * FROM testTable WHERE 
TEXT_MATCH(string, 'foo AND bar OR baz')");
+        + "TEXT_MATCH(string, 'baz')", "SELECT * FROM testTable WHERE 
TEXT_MATCH(string, '((foo AND bar) OR baz)')");
+    testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo') AND 
(TEXT_MATCH(string, 'bar') OR "
+        + "TEXT_MATCH(string, 'baz'))", "SELECT * FROM testTable WHERE 
TEXT_MATCH(string, '(foo AND (bar OR baz))')");
     testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string1, 'foo1') AND 
TEXT_MATCH(string1, 'bar1') OR "
             + "TEXT_MATCH(string1, 'baz1') AND TEXT_MATCH(string2, 'foo')",
-        "SELECT * FROM testTable WHERE TEXT_MATCH(string1, 'foo1 AND bar1') OR 
TEXT_MATCH(string1, 'baz1') AND "
+        "SELECT * FROM testTable WHERE TEXT_MATCH(string1, '(foo1 AND bar1)') 
OR TEXT_MATCH(string1, 'baz1') AND "
             + "TEXT_MATCH(string2, 'foo')");
     testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string1, 'foo1') AND 
TEXT_MATCH(string1, 'bar1')"
             + "AND TEXT_MATCH(string2, 'foo2') AND TEXT_MATCH(string2, 
'bar2')",
-        "SELECT * FROM testTable WHERE TEXT_MATCH(string1, 'foo1 AND bar1') 
AND TEXT_MATCH(string2, 'foo2 AND bar2')");
+        "SELECT * FROM testTable WHERE TEXT_MATCH(string1, '(foo1 AND bar1)') 
AND TEXT_MATCH(string2, '(foo2 AND "
+            + "bar2)')");
     testCannotOptimizeQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string1, 
'foo') OR TEXT_MATCH(string2, 'bar')");
     testCannotOptimizeQuery(
         "SELECT * FROM testTable WHERE int = 1 AND TEXT_MATCH(string, 'foo') 
OR TEXT_MATCH(string, 'bar')");


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to