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

github-bot pushed a commit to branch 
gh-readonly-queue/main/pr-2144-00da3d71fc8e0e11ed14dffadc18ef349f371007
in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git

commit 24e12839d8a990639246e182f41fff0e6c91903c
Author: Yoav Cohen <[email protected]>
AuthorDate: Fri Jan 9 11:47:49 2026 +0100

    MySQL: Add support for && as boolean AND (#2144)
---
 src/dialect/mod.rs        | 5 +++++
 src/dialect/mysql.rs      | 5 +++++
 src/parser/mod.rs         | 3 +++
 tests/sqlparser_common.rs | 6 ++++++
 4 files changed, 19 insertions(+)

diff --git a/src/dialect/mod.rs b/src/dialect/mod.rs
index 0b621297..4c7173d5 100644
--- a/src/dialect/mod.rs
+++ b/src/dialect/mod.rs
@@ -1221,6 +1221,11 @@ pub trait Dialect: Debug + Any {
     fn supports_quote_delimited_string(&self) -> bool {
         false
     }
+
+    /// Returns true if the dialect considers the `&&` operator as a boolean 
AND operator.
+    fn supports_double_ampersand_operator(&self) -> bool {
+        false
+    }
 }
 
 /// This represents the operators for which precedence must be defined
diff --git a/src/dialect/mysql.rs b/src/dialect/mysql.rs
index 53a30f18..60385c5b 100644
--- a/src/dialect/mysql.rs
+++ b/src/dialect/mysql.rs
@@ -171,6 +171,11 @@ impl Dialect for MySqlDialect {
     fn supports_cross_join_constraint(&self) -> bool {
         true
     }
+
+    /// See: <https://dev.mysql.com/doc/refman/8.4/en/expressions.html>
+    fn supports_double_ampersand_operator(&self) -> bool {
+        true
+    }
 }
 
 /// `LOCK TABLES`
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index e436a7af..08ce9f1c 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -3500,6 +3500,9 @@ impl<'a> Parser<'a> {
             Token::Overlap if dialect_is!(dialect is PostgreSqlDialect | 
GenericDialect) => {
                 Some(BinaryOperator::PGOverlap)
             }
+            Token::Overlap if dialect.supports_double_ampersand_operator() => {
+                Some(BinaryOperator::And)
+            }
             Token::CaretAt if dialect_is!(dialect is PostgreSqlDialect | 
GenericDialect) => {
                 Some(BinaryOperator::PGStartsWith)
             }
diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs
index d3f85aff..dd95315b 100644
--- a/tests/sqlparser_common.rs
+++ b/tests/sqlparser_common.rs
@@ -18037,3 +18037,9 @@ fn parse_select_parenthesized_wildcard() {
     assert_eq!(select2.projection.len(), 1);
     assert!(matches!(select2.projection[0], SelectItem::Wildcard(_)));
 }
+
+#[test]
+fn parse_overlap_as_bool_and() {
+    let dialects = all_dialects_where(|d| 
d.supports_double_ampersand_operator());
+    dialects.one_statement_parses_to("SELECT x && y", "SELECT x AND y");
+}


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

Reply via email to