@@ -1920,12 +1920,14 @@ impl<'a> Parser<'a> {
19201920 }
19211921 }
19221922
1923- pub fn parse_number_value ( & mut self ) -> Result < Value , ParserError > {
1924- match self . parse_value ( ) ? {
1925- v @ Value :: Number ( _) => Ok ( v) ,
1923+ // XXX(don): this used to only succeed if we found a number value, but due to https://sigmacomputing.atlassian.net/browse/SIG-13647 I've updated it to allow idents as well.
1924+ pub fn parse_number_value_or_ident ( & mut self ) -> Result < Expr , ParserError > {
1925+ match self . parse_expr ( ) ? {
1926+ e @ Expr :: Value ( Value :: Number ( _) ) => Ok ( e) ,
1927+ e @ Expr :: Identifier ( _) => Ok ( e) ,
19261928 _ => {
19271929 self . prev_token ( ) ;
1928- self . expected ( "literal number" , self . peek_token ( ) )
1930+ self . expected ( "literal number or ident " , self . peek_token ( ) )
19291931 }
19301932 }
19311933 }
@@ -2952,7 +2954,7 @@ impl<'a> Parser<'a> {
29522954 self . expect_token ( & Token :: RParen ) ?;
29532955 Some ( quantity)
29542956 } else {
2955- Some ( Expr :: Value ( self . parse_number_value ( ) ?) )
2957+ Some ( self . parse_number_value_or_ident ( ) ?)
29562958 } ;
29572959
29582960 let percent = self . parse_keyword ( Keyword :: PERCENT ) ;
@@ -2971,13 +2973,13 @@ impl<'a> Parser<'a> {
29712973 if self . parse_keyword ( Keyword :: ALL ) {
29722974 Ok ( None )
29732975 } else {
2974- Ok ( Some ( Expr :: Value ( self . parse_number_value ( ) ?) ) )
2976+ Ok ( Some ( self . parse_number_value_or_ident ( ) ?) )
29752977 }
29762978 }
29772979
29782980 /// Parse an OFFSET clause
29792981 pub fn parse_offset ( & mut self ) -> Result < Offset , ParserError > {
2980- let value = Expr :: Value ( self . parse_number_value ( ) ?) ;
2982+ let value = self . parse_number_value_or_ident ( ) ?;
29812983 let rows = if self . parse_keyword ( Keyword :: ROW ) {
29822984 OffsetRows :: Row
29832985 } else if self . parse_keyword ( Keyword :: ROWS ) {
0 commit comments