@@ -165,10 +165,13 @@ impl Parser {
165
165
}
166
166
"CASE" => self . parse_case_expression ( ) ,
167
167
"CAST" => self . parse_cast_expression ( ) ,
168
- "NOT" => Ok ( ASTNode :: SQLUnary {
169
- operator : SQLOperator :: Not ,
170
- expr : Box :: new ( self . parse_subexpr ( 0 ) ?) , // TBD (2)
171
- } ) ,
168
+ "NOT" => {
169
+ let p = self . get_precedence ( & Token :: make_keyword ( "NOT" ) ) ?;
170
+ Ok ( ASTNode :: SQLUnary {
171
+ operator : SQLOperator :: Not ,
172
+ expr : Box :: new ( self . parse_subexpr ( p) ?) ,
173
+ } )
174
+ }
172
175
_ => match self . peek_token ( ) {
173
176
Some ( Token :: LParen ) => self . parse_function ( & w. value ) ,
174
177
Some ( Token :: Period ) => {
@@ -371,7 +374,7 @@ impl Parser {
371
374
& Token :: SQLWord ( ref k) if k. keyword == "OR" => Ok ( 5 ) ,
372
375
& Token :: SQLWord ( ref k) if k. keyword == "AND" => Ok ( 10 ) ,
373
376
& Token :: SQLWord ( ref k) if k. keyword == "NOT" => Ok ( 15 ) ,
374
- & Token :: SQLWord ( ref k) if k. keyword == "IS" => Ok ( 15 ) ,
377
+ & Token :: SQLWord ( ref k) if k. keyword == "IS" => Ok ( 17 ) ,
375
378
& Token :: SQLWord ( ref k) if k. keyword == "LIKE" => Ok ( 20 ) ,
376
379
& Token :: Eq | & Token :: Lt | & Token :: LtEq | & Token :: Neq | & Token :: Gt | & Token :: GtEq => {
377
380
Ok ( 20 )
0 commit comments