File tree Expand file tree Collapse file tree 2 files changed +30
-1
lines changed Expand file tree Collapse file tree 2 files changed +30
-1
lines changed Original file line number Diff line number Diff line change @@ -174,6 +174,7 @@ impl Parser {
174
174
expr : Box :: new ( self . parse_subexpr ( p) ?) ,
175
175
} )
176
176
}
177
+ // another SQLWord:
177
178
_ => match self . peek_token ( ) {
178
179
Some ( Token :: LParen ) => self . parse_function ( w. as_sql_ident ( ) ) ,
179
180
Some ( Token :: Period ) => {
@@ -201,8 +202,15 @@ impl Parser {
201
202
}
202
203
_ => Ok ( ASTNode :: SQLIdentifier ( w. as_sql_ident ( ) ) ) ,
203
204
} ,
204
- } ,
205
+ } , // End of Token::SQLWord
205
206
Token :: Mult => Ok ( ASTNode :: SQLWildcard ) ,
207
+ tok @ Token :: Minus | tok @ Token :: Plus => {
208
+ let p = self . get_precedence ( & tok) ?;
209
+ Ok ( ASTNode :: SQLUnary {
210
+ operator : self . to_sql_operator ( & tok) ?,
211
+ expr : Box :: new ( self . parse_subexpr ( p) ?) ,
212
+ } )
213
+ }
206
214
Token :: Number ( _)
207
215
| Token :: SingleQuotedString ( _)
208
216
| Token :: NationalStringLiteral ( _) => {
Original file line number Diff line number Diff line change @@ -174,6 +174,27 @@ fn parse_compound_expr_2() {
174
174
) ;
175
175
}
176
176
177
+ #[ test]
178
+ fn parse_unary_math ( ) {
179
+ use self :: ASTNode :: * ;
180
+ use self :: SQLOperator :: * ;
181
+ let sql = "- a + - b" ;
182
+ assert_eq ! (
183
+ SQLBinaryExpr {
184
+ left: Box :: new( SQLUnary {
185
+ operator: Minus ,
186
+ expr: Box :: new( SQLIdentifier ( "a" . to_string( ) ) ) ,
187
+ } ) ,
188
+ op: Plus ,
189
+ right: Box :: new( SQLUnary {
190
+ operator: Minus ,
191
+ expr: Box :: new( SQLIdentifier ( "b" . to_string( ) ) ) ,
192
+ } ) ,
193
+ } ,
194
+ verified_expr( sql)
195
+ ) ;
196
+ }
197
+
177
198
#[ test]
178
199
fn parse_is_null ( ) {
179
200
use self :: ASTNode :: * ;
You can’t perform that action at this time.
0 commit comments