wugeer commented on code in PR #1472:
URL:
https://github.com/apache/datafusion-sqlparser-rs/pull/1472#discussion_r1825279646
##########
src/parser/mod.rs:
##########
@@ -2800,11 +2814,40 @@ impl<'a> Parser<'a> {
format: None,
})
} else if Token::ExclamationMark == tok {
- // PostgreSQL factorial operation
- Ok(Expr::UnaryOp {
- op: UnaryOperator::PGPostfixFactorial,
- expr: Box::new(expr),
- })
+ if self.dialect.supports_factorial_operator() {
+ match expr {
+ Expr::Value(_) | Expr::Identifier(_) | Expr::Nested(_) |
Expr::BinaryOp{..} => Ok(Expr::UnaryOp {
+ op: UnaryOperator::PGPostfixFactorial,
+ expr: Box::new(expr),
+ }),
+ _ => {
+ self.expected(
+ "Value or Identifier or Nested or BinaryOp struct
before factorial operator(!)", self.peek_token())
+ },
+ }
+ } else if self.dialect.supports_bang_not_operator() {
Review Comment:
@iffyio Sorry, I missed this reply.
My intention with this code block was to provide additional context checks
and more meaningful error messages. Without it, the error messages would be
less precise, so I’m hesitant about whether to remove it or not.
without it
```bash
cargo run --features json_example --example cli err.sql --hive
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/examples/cli err.sql --hive`
Parsing from file 'err.sql' using HiveDialect
2024-10-31T23:24:09.204Z DEBUG [sqlparser::parser] Parsing sql 'select a!,
(b+c)!, C+D !
'...
2024-10-31T23:24:09.204Z DEBUG [sqlparser::parser] parsing expr
2024-10-31T23:24:09.204Z DEBUG [sqlparser::parser] prefix: Identifier(Ident
{ value: "a", quote_style: None })
2024-10-31T23:24:09.204Z DEBUG [sqlparser::dialect]
get_next_precedence_full() TokenWithLocation { token: ExclamationMark,
location: Location { line: 1, column: 9 } }
2024-10-31T23:24:09.204Z DEBUG [sqlparser::parser] next precedence: 50
Error during parsing: ParserError("No infix parser for token ExclamationMark
at Line: 1, Column: 9")
```
currently
```bash
cargo run --features json_example --example cli err.sql --hive
Compiling sqlparser v0.51.0 (/home/xiehw/code/person/rust/sqlparser-rs)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.04s
Running `target/debug/examples/cli err.sql --hive`
Parsing from file 'err.sql' using HiveDialect
2024-10-31T23:24:17.700Z DEBUG [sqlparser::parser] Parsing sql 'select a!,
(b+c)!, C+D !
'...
2024-10-31T23:24:17.700Z DEBUG [sqlparser::parser] parsing expr
2024-10-31T23:24:17.700Z DEBUG [sqlparser::parser] prefix: Identifier(Ident
{ value: "a", quote_style: None })
2024-10-31T23:24:17.700Z DEBUG [sqlparser::dialect]
get_next_precedence_full() TokenWithLocation { token: ExclamationMark,
location: Location { line: 1, column: 9 } }
2024-10-31T23:24:17.700Z DEBUG [sqlparser::parser] next precedence: 50
Error during parsing: ParserError("current dialect support bang not
operator, but with wrong syntax at Line: 1, Column: 9")
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]