apache / datafusion-sqlparser-rs

Extensible SQL Lexer and Parser for Rust
Apache License 2.0
2.81k stars 543 forks source link

hive doesn't support `!a` expression #1471

Closed wugeer closed 1 week ago

wugeer commented 1 month ago

Hive supports ! as a synonym for not, but the current project's Hive dialect does not support the select !a syntax.

https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=27362046#LanguageManualUDF-LogicalOperators

image

The reproduction steps are as follows:

echo "select not (false), !a" > ok.sql
cargo run --features json_example --example cli ok.sql  --hive
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/examples/cli ok.sql --hive`
Parsing from file 'ok.sql' using HiveDialect
2024-10-12T07:25:23.412Z DEBUG [sqlparser::parser] Parsing sql 'select not (false), !a
'...
2024-10-12T07:25:23.412Z DEBUG [sqlparser::parser] parsing expr
2024-10-12T07:25:23.412Z DEBUG [sqlparser::parser] parsing expr
2024-10-12T07:25:23.412Z DEBUG [sqlparser::parser] parsing expr
2024-10-12T07:25:23.412Z DEBUG [sqlparser::parser] prefix: Value(Boolean(false))
2024-10-12T07:25:23.412Z DEBUG [sqlparser::dialect] get_next_precedence_full() TokenWithLocation { token: RParen, location: Location { line: 1, column: 18 } }
2024-10-12T07:25:23.412Z DEBUG [sqlparser::parser] next precedence: 0
2024-10-12T07:25:23.412Z DEBUG [sqlparser::parser] prefix: Nested(Value(Boolean(false)))
2024-10-12T07:25:23.412Z DEBUG [sqlparser::dialect] get_next_precedence_full() TokenWithLocation { token: Comma, location: Location { line: 1, column: 19 } }
2024-10-12T07:25:23.412Z DEBUG [sqlparser::parser] next precedence: 0
2024-10-12T07:25:23.412Z DEBUG [sqlparser::parser] prefix: UnaryOp { op: Not, expr: Nested(Value(Boolean(false))) }
2024-10-12T07:25:23.413Z DEBUG [sqlparser::dialect] get_next_precedence_full() TokenWithLocation { token: Comma, location: Location { line: 1, column: 19 } }
2024-10-12T07:25:23.413Z DEBUG [sqlparser::parser] next precedence: 0
2024-10-12T07:25:23.413Z DEBUG [sqlparser::parser] parsing expr
Error during parsing: ParserError("Expected: an expression, found: ! at Line: 1, Column: 21")