@@ -2592,6 +2592,7 @@ impl<'a> Parser<'a> {
2592
2592
pub fn parse_number_value ( & mut self ) -> Result < Value , ParserError > {
2593
2593
match self . parse_value ( ) ? {
2594
2594
v @ Value :: Number ( _, _) => Ok ( v) ,
2595
+ v @ Value :: Placeholder ( _) => Ok ( v) ,
2595
2596
_ => {
2596
2597
self . prev_token ( ) ;
2597
2598
self . expected ( "literal number" , self . peek_token ( ) )
@@ -4356,7 +4357,7 @@ impl Word {
4356
4357
#[ cfg( test) ]
4357
4358
mod tests {
4358
4359
use super :: * ;
4359
- use crate :: test_utils:: all_dialects;
4360
+ use crate :: test_utils:: { all_dialects, TestedDialects } ;
4360
4361
4361
4362
#[ test]
4362
4363
fn test_prev_index ( ) {
@@ -4378,4 +4379,38 @@ mod tests {
4378
4379
parser. prev_token ( ) ;
4379
4380
} ) ;
4380
4381
}
4382
+
4383
+ #[ test]
4384
+ fn test_parse_limit ( ) {
4385
+ let sql = "SELECT * FROM user LIMIT 1" ;
4386
+ all_dialects ( ) . run_parser_method ( sql, |parser| {
4387
+ let ast = parser. parse_query ( ) . unwrap ( ) ;
4388
+ assert_eq ! ( ast. to_string( ) , sql. to_string( ) ) ;
4389
+ } ) ;
4390
+
4391
+ let sql = "SELECT * FROM user LIMIT $1 OFFSET $2" ;
4392
+ let dialects = TestedDialects {
4393
+ dialects : vec ! [
4394
+ Box :: new( PostgreSqlDialect { } ) ,
4395
+ Box :: new( ClickHouseDialect { } ) ,
4396
+ Box :: new( GenericDialect { } ) ,
4397
+ Box :: new( MsSqlDialect { } ) ,
4398
+ Box :: new( SnowflakeDialect { } ) ,
4399
+ ] ,
4400
+ } ;
4401
+
4402
+ dialects. run_parser_method ( sql, |parser| {
4403
+ let ast = parser. parse_query ( ) . unwrap ( ) ;
4404
+ assert_eq ! ( ast. to_string( ) , sql. to_string( ) ) ;
4405
+ } ) ;
4406
+
4407
+ let sql = "SELECT * FROM user LIMIT ? OFFSET ?" ;
4408
+ let dialects = TestedDialects {
4409
+ dialects : vec ! [ Box :: new( MySqlDialect { } ) ] ,
4410
+ } ;
4411
+ dialects. run_parser_method ( sql, |parser| {
4412
+ let ast = parser. parse_query ( ) . unwrap ( ) ;
4413
+ assert_eq ! ( ast. to_string( ) , sql. to_string( ) ) ;
4414
+ } ) ;
4415
+ }
4381
4416
}
0 commit comments