This is an automated email from the ASF dual-hosted git repository.
github-merge-queue[bot] pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git
The following commit(s) were added to refs/heads/main by this push:
new 0718147b Render prefix ~ operator with a space (#2533)
0718147b is described below
commit 0718147b755953612bf099670e6d6906db92dcdc
Author: Luca Cappelletti <[email protected]>
AuthorDate: Mon Sep 21 16:26:26 2026 +0000
Render prefix ~ operator with a space (#2533)
---
src/ast/mod.rs | 35 +++++++++++++++++------------------
tests/sqlparser_common.rs | 22 +++++++++++++++++-----
tests/sqlparser_postgres.rs | 7 +++++++
3 files changed, 41 insertions(+), 23 deletions(-)
diff --git a/src/ast/mod.rs b/src/ast/mod.rs
index b6d67df5..4817a3f0 100644
--- a/src/ast/mod.rs
+++ b/src/ast/mod.rs
@@ -1955,24 +1955,23 @@ impl fmt::Display for Expr {
if add_parens { ")" } else { "" },
)
}
- Expr::UnaryOp { op, expr } => {
- if op == &UnaryOperator::PGPostfixFactorial {
- write!(f, "{expr}{op}")
- } else if matches!(
- op,
- UnaryOperator::Not
- | UnaryOperator::Hash
- | UnaryOperator::AtDashAt
- | UnaryOperator::DoubleAt
- | UnaryOperator::PGAbs
- | UnaryOperator::QuestionDash
- | UnaryOperator::QuestionPipe
- ) {
- write!(f, "{op} {expr}")
- } else {
- write!(f, "{op}{expr}")
- }
- }
+ Expr::UnaryOp { op, expr } => match op {
+ UnaryOperator::PGPostfixFactorial => write!(f, "{expr}{op}"),
+ UnaryOperator::Not
+ | UnaryOperator::BitwiseNot
+ | UnaryOperator::Hash
+ | UnaryOperator::AtDashAt
+ | UnaryOperator::DoubleAt
+ | UnaryOperator::PGAbs
+ | UnaryOperator::QuestionDash
+ | UnaryOperator::QuestionPipe => write!(f, "{op} {expr}"),
+ UnaryOperator::Plus
+ | UnaryOperator::Minus
+ | UnaryOperator::BangNot
+ | UnaryOperator::PGPrefixFactorial
+ | UnaryOperator::PGSquareRoot
+ | UnaryOperator::PGCubeRoot => write!(f, "{op}{expr}"),
+ },
Expr::Convert {
is_try,
expr,
diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs
index 2de6062b..4069ff10 100644
--- a/tests/sqlparser_common.rs
+++ b/tests/sqlparser_common.rs
@@ -19469,11 +19469,7 @@ fn test_parse_alter_user() {
#[test]
fn parse_generic_unary_ops() {
- let unary_ops = &[
- ("~", UnaryOperator::BitwiseNot),
- ("-", UnaryOperator::Minus),
- ("+", UnaryOperator::Plus),
- ];
+ let unary_ops = &[("-", UnaryOperator::Minus), ("+", UnaryOperator::Plus)];
for (str_op, op) in unary_ops {
let select = verified_only_select(&format!("SELECT {}expr", str_op));
assert_eq!(
@@ -19484,6 +19480,16 @@ fn parse_generic_unary_ops() {
select.projection[0]
);
}
+
+ let select = verified_only_select("SELECT ~ expr");
+ assert_eq!(
+ UnnamedExpr(UnaryOp {
+ op: UnaryOperator::BitwiseNot,
+ expr: Box::new(Identifier(Ident::new("expr"))),
+ }),
+ select.projection[0]
+ );
+ one_statement_parses_to("SELECT ~expr", "SELECT ~ expr");
}
#[test]
@@ -20060,3 +20066,9 @@ fn parse_insert_by_name() {
_ => unreachable!(),
}
}
+
+#[test]
+fn parse_bitwise_not_renders_apart_from_operand() {
+ all_dialects().verified_stmt("SELECT ~ -1");
+ all_dialects().verified_stmt("SELECT ~ ~ 1");
+}
diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs
index c85cb26f..bf535383 100644
--- a/tests/sqlparser_postgres.rs
+++ b/tests/sqlparser_postgres.rs
@@ -9968,3 +9968,10 @@ fn parse_pg_abs_space_before_negative_operand() {
err
);
}
+
+#[test]
+fn parse_bitwise_not_before_pg_prefix_operators() {
+ pg().one_statement_parses_to("SELECT ~ @2", "SELECT ~ @ 2");
+ pg().verified_stmt("SELECT ~ @ 2");
+ pg().one_statement_parses_to("SELECT ~ #x", "SELECT ~ # x");
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]