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

diwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-spark-connector.git


The following commit(s) were added to refs/heads/master by this push:
     new 8b03846  [Fix] Fix filter push issue with OR in SQL (#317)
8b03846 is described below

commit 8b038462e2b2afe82295d05a5c45265d69bccc7b
Author: Lei <[email protected]>
AuthorDate: Thu May 29 10:00:43 2025 +0800

    [Fix] Fix filter push issue with OR in SQL (#317)
---
 .../src/main/scala/org/apache/doris/spark/util/DorisDialects.scala | 4 ++--
 .../test/scala/org/apache/doris/spark/util/DorisDialectsTest.scala | 6 ++++--
 .../test/java/org/apache/doris/spark/sql/DorisReaderITCase.scala   | 7 +++++++
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git 
a/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/util/DorisDialects.scala
 
b/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/util/DorisDialects.scala
index 7329326..16ad34a 100644
--- 
a/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/util/DorisDialects.scala
+++ 
b/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/util/DorisDialects.scala
@@ -50,12 +50,12 @@ object DorisDialects {
       case And(left, right) =>
         val and = Seq(left, right).flatMap(compileFilter(_, 
inValueLengthLimit))
         if (and.size == 2) {
-          and.map(p => s"($p)").mkString(" AND ")
+          s"(${and.map(p => s"($p)").mkString(" AND ")})"
         } else null
       case Or(left, right) =>
         val or = Seq(left, right).flatMap(compileFilter(_, inValueLengthLimit))
         if (or.size == 2) {
-          or.map(p => s"($p)").mkString(" OR ")
+          s"(${or.map(p => s"($p)").mkString(" OR ")})"
         } else null
       case StringContains(attribute, value) => s"${quote(attribute)} LIKE 
'%$value%'"
       case Not(StringContains(attribute, value)) => s"${quote(attribute)} NOT 
LIKE '%$value%'"
diff --git 
a/spark-doris-connector/spark-doris-connector-base/src/test/scala/org/apache/doris/spark/util/DorisDialectsTest.scala
 
b/spark-doris-connector/spark-doris-connector-base/src/test/scala/org/apache/doris/spark/util/DorisDialectsTest.scala
index d14af87..987aa68 100644
--- 
a/spark-doris-connector/spark-doris-connector-base/src/test/scala/org/apache/doris/spark/util/DorisDialectsTest.scala
+++ 
b/spark-doris-connector/spark-doris-connector-base/src/test/scala/org/apache/doris/spark/util/DorisDialectsTest.scala
@@ -38,8 +38,10 @@ class DorisDialectsTest {
     Assert.assertEquals(DorisDialects.compileFilter(Not(In("c7", 
Array(10,11,12))), 10).get, "`c7` NOT IN (10,11,12)")
     Assert.assertEquals(DorisDialects.compileFilter(IsNull("c8"), 10).get, 
"`c8` IS NULL")
     Assert.assertEquals(DorisDialects.compileFilter(IsNotNull("c9"), 10).get, 
"`c9` IS NOT NULL")
-    Assert.assertEquals(DorisDialects.compileFilter(And(EqualTo("c10", 13), 
EqualTo("c11", 14)), 10).get, "(`c10` = 13) AND (`c11` = 14)")
-    Assert.assertEquals(DorisDialects.compileFilter(Or(EqualTo("c12", 15), 
EqualTo("c13", 16)), 10).get, "(`c12` = 15) OR (`c13` = 16)")
+    Assert.assertEquals(DorisDialects.compileFilter(And(EqualTo("c10", 13), 
EqualTo("c11", 14)), 10).get, "((`c10` = 13) AND (`c11` = 14))")
+    Assert.assertEquals(DorisDialects.compileFilter(Or(EqualTo("c12", 15), 
EqualTo("c13", 16)), 10).get, "((`c12` = 15) OR (`c13` = 16))")
+    Assert.assertEquals(DorisDialects.compileFilter(Or(Or(EqualTo("c12", 15), 
EqualTo("c13", 16)), GreaterThan("c14", 17)), 10).get,
+      "((((`c12` = 15) OR (`c13` = 16))) OR (`c14` > 17))")
     Assert.assertEquals(DorisDialects.compileFilter(StringContains("c14", 
"a"), 10).get, "`c14` LIKE '%a%'")
     Assert.assertEquals(DorisDialects.compileFilter(Not(StringContains("c15", 
"a")), 10).get, "`c15` NOT LIKE '%a%'")
     Assert.assertEquals(DorisDialects.compileFilter(StringEndsWith("c16", 
"a"), 10).get, "`c16` LIKE '%a'")
diff --git 
a/spark-doris-connector/spark-doris-connector-it/src/test/java/org/apache/doris/spark/sql/DorisReaderITCase.scala
 
b/spark-doris-connector/spark-doris-connector-it/src/test/java/org/apache/doris/spark/sql/DorisReaderITCase.scala
index 1099655..47793b6 100644
--- 
a/spark-doris-connector/spark-doris-connector-it/src/test/java/org/apache/doris/spark/sql/DorisReaderITCase.scala
+++ 
b/spark-doris-connector/spark-doris-connector-it/src/test/java/org/apache/doris/spark/sql/DorisReaderITCase.scala
@@ -447,6 +447,13 @@ class DorisReaderITCase(readMode: String, flightSqlPort: 
Int) extends AbstractCo
           |""".stripMargin).collect()
 
       assert("List([3])".equals(likeFilter.toList.toString()))
+
+      val orFilter = session.sql(
+        """
+          |select id from test_source
+          |where c15 is not null and c12 = 'A' and (id = 1 or c2 = 127 or id > 
0)
+          |""".stripMargin).collect()
+      assert("List([1])".equals(orFilter.toList.toString()))
     } finally {
       session.stop()
     }


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

Reply via email to