This is an automated email from the ASF dual-hosted git repository. github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/main/pr-2531-1195239663b48a51bf6b153f5d5150ec71042335 in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git
commit 3fd342fe823f8bd787b574adf3074d0b4da59b91 Author: Luca Cappelletti <[email protected]> AuthorDate: Mon Sep 21 10:58:19 2026 +0000 PostgreSQL: Render prefix @ operator with a space (#2531) --- src/ast/mod.rs | 1 + tests/sqlparser_postgres.rs | 27 +++++++++++++++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 20058b83..b6d67df5 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -1964,6 +1964,7 @@ impl fmt::Display for Expr { | UnaryOperator::Hash | UnaryOperator::AtDashAt | UnaryOperator::DoubleAt + | UnaryOperator::PGAbs | UnaryOperator::QuestionDash | UnaryOperator::QuestionPipe ) { diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs index d71e49b2..c85cb26f 100644 --- a/tests/sqlparser_postgres.rs +++ b/tests/sqlparser_postgres.rs @@ -2623,13 +2623,13 @@ fn parse_ampersand_arobase() { #[test] fn parse_pg_unary_ops() { let pg_unary_ops = &[ - ("|/", UnaryOperator::PGSquareRoot), - ("||/", UnaryOperator::PGCubeRoot), - ("!!", UnaryOperator::PGPrefixFactorial), - ("@", UnaryOperator::PGAbs), + ("SELECT |/a", UnaryOperator::PGSquareRoot), + ("SELECT ||/a", UnaryOperator::PGCubeRoot), + ("SELECT !!a", UnaryOperator::PGPrefixFactorial), + ("SELECT @ a", UnaryOperator::PGAbs), ]; - for (str_op, op) in pg_unary_ops { - let select = pg().verified_only_select(&format!("SELECT {}a", str_op)); + for (sql, op) in pg_unary_ops { + let select = pg().verified_only_select(sql); assert_eq!( SelectItem::UnnamedExpr(Expr::UnaryOp { op: *op, @@ -9953,3 +9953,18 @@ fn parse_insert_by_name_keywords_as_table_and_alias() { statement => panic!("Expected INSERT statement, got: {statement:?}"), } } + +#[test] +fn parse_pg_abs_space_before_negative_operand() { + // `@-` tokenizes as a geometric operator prefix, so displaying PGAbs + // without a space breaks re-parsing of a negative operand. + pg().verified_stmt("SELECT @ -2"); + pg().one_statement_parses_to("SELECT @a", "SELECT @ a"); + let err = pg().parse_sql_statements("SELECT @-2").unwrap_err(); + assert_eq!( + ParserError::TokenizerError( + "Expected a valid binary operator after '@-' at Line: 1, Column: 10".to_string(), + ), + err + ); +} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
