@@ -1920,12 +1920,14 @@ impl<'a> Parser<'a> {
1920
1920
}
1921
1921
}
1922
1922
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) ,
1926
1928
_ => {
1927
1929
self . prev_token ( ) ;
1928
- self . expected ( "literal number" , self . peek_token ( ) )
1930
+ self . expected ( "literal number or ident " , self . peek_token ( ) )
1929
1931
}
1930
1932
}
1931
1933
}
@@ -2952,7 +2954,7 @@ impl<'a> Parser<'a> {
2952
2954
self . expect_token ( & Token :: RParen ) ?;
2953
2955
Some ( quantity)
2954
2956
} else {
2955
- Some ( Expr :: Value ( self . parse_number_value ( ) ?) )
2957
+ Some ( self . parse_number_value_or_ident ( ) ?)
2956
2958
} ;
2957
2959
2958
2960
let percent = self . parse_keyword ( Keyword :: PERCENT ) ;
@@ -2971,13 +2973,13 @@ impl<'a> Parser<'a> {
2971
2973
if self . parse_keyword ( Keyword :: ALL ) {
2972
2974
Ok ( None )
2973
2975
} else {
2974
- Ok ( Some ( Expr :: Value ( self . parse_number_value ( ) ?) ) )
2976
+ Ok ( Some ( self . parse_number_value_or_ident ( ) ?) )
2975
2977
}
2976
2978
}
2977
2979
2978
2980
/// Parse an OFFSET clause
2979
2981
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 ( ) ?;
2981
2983
let rows = if self . parse_keyword ( Keyword :: ROW ) {
2982
2984
OffsetRows :: Row
2983
2985
} else if self . parse_keyword ( Keyword :: ROWS ) {
0 commit comments