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]
