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]