File tree Expand file tree Collapse file tree 2 files changed +26
-3
lines changed Expand file tree Collapse file tree 2 files changed +26
-3
lines changed Original file line number Diff line number Diff line change @@ -504,7 +504,7 @@ impl<'a> Parser<'a> {
504
504
} ;
505
505
Ok ( Expr :: UnaryOp {
506
506
op,
507
- expr : Box :: new ( self . parse_subexpr ( Self :: PLUS_MINUS_PREC ) ?) ,
507
+ expr : Box :: new ( self . parse_subexpr ( Self :: MUL_DIV_MOD_OP_PREC ) ?) ,
508
508
} )
509
509
}
510
510
tok @ Token :: DoubleExclamationMark
@@ -1476,6 +1476,7 @@ impl<'a> Parser<'a> {
1476
1476
}
1477
1477
1478
1478
// use https://www.postgresql.org/docs/7.0/operators.htm#AEN2026 as a reference
1479
+ const MUL_DIV_MOD_OP_PREC : u8 = 40 ;
1479
1480
const PLUS_MINUS_PREC : u8 = 30 ;
1480
1481
const XOR_PREC : u8 = 24 ;
1481
1482
const TIME_ZONE_PREC : u8 = 20 ;
@@ -1545,7 +1546,9 @@ impl<'a> Parser<'a> {
1545
1546
Token :: Caret | Token :: Sharp | Token :: ShiftRight | Token :: ShiftLeft => Ok ( 22 ) ,
1546
1547
Token :: Ampersand => Ok ( 23 ) ,
1547
1548
Token :: Plus | Token :: Minus => Ok ( Self :: PLUS_MINUS_PREC ) ,
1548
- Token :: Mul | Token :: Div | Token :: Mod | Token :: StringConcat => Ok ( 40 ) ,
1549
+ Token :: Mul | Token :: Div | Token :: Mod | Token :: StringConcat => {
1550
+ Ok ( Self :: MUL_DIV_MOD_OP_PREC )
1551
+ }
1549
1552
Token :: DoubleColon => Ok ( 50 ) ,
1550
1553
Token :: ExclamationMark => Ok ( 50 ) ,
1551
1554
Token :: LBracket
Original file line number Diff line number Diff line change @@ -674,7 +674,7 @@ fn parse_compound_expr_2() {
674
674
}
675
675
676
676
#[ test]
677
- fn parse_unary_math ( ) {
677
+ fn parse_unary_math_with_plus ( ) {
678
678
use self :: Expr :: * ;
679
679
let sql = "- a + - b" ;
680
680
assert_eq ! (
@@ -693,6 +693,26 @@ fn parse_unary_math() {
693
693
) ;
694
694
}
695
695
696
+ #[ test]
697
+ fn parse_unary_math_with_multiply ( ) {
698
+ use self :: Expr :: * ;
699
+ let sql = "- a * - b" ;
700
+ assert_eq ! (
701
+ BinaryOp {
702
+ left: Box :: new( UnaryOp {
703
+ op: UnaryOperator :: Minus ,
704
+ expr: Box :: new( Identifier ( Ident :: new( "a" ) ) ) ,
705
+ } ) ,
706
+ op: BinaryOperator :: Multiply ,
707
+ right: Box :: new( UnaryOp {
708
+ op: UnaryOperator :: Minus ,
709
+ expr: Box :: new( Identifier ( Ident :: new( "b" ) ) ) ,
710
+ } ) ,
711
+ } ,
712
+ verified_expr( sql)
713
+ ) ;
714
+ }
715
+
696
716
#[ test]
697
717
fn parse_is_null ( ) {
698
718
use self :: Expr :: * ;
You can’t perform that action at this time.
0 commit comments