@@ -24,8 +24,12 @@ use test_utils::{all_dialects, expr_from_projection, join, number, only, table,
24
24
25
25
use matches:: assert_matches;
26
26
use sqlparser:: ast:: * ;
27
- use sqlparser:: dialect:: { keywords:: ALL_KEYWORDS , SQLiteDialect } ;
27
+ use sqlparser:: dialect:: {
28
+ keywords:: ALL_KEYWORDS , AnsiDialect , GenericDialect , MsSqlDialect , PostgreSqlDialect ,
29
+ SQLiteDialect , SnowflakeDialect ,
30
+ } ;
28
31
use sqlparser:: parser:: { Parser , ParserError } ;
32
+ use sqlparser:: test_utils:: TestedDialects ;
29
33
30
34
#[ test]
31
35
fn parse_insert_values ( ) {
@@ -109,7 +113,7 @@ fn parse_insert_sqlite() {
109
113
. unwrap ( )
110
114
{
111
115
Statement :: Insert { or, .. } => assert_eq ! ( or, expected_action) ,
112
- _ => panic ! ( sql. to_string( ) ) ,
116
+ _ => panic ! ( "{}" , sql. to_string( ) ) ,
113
117
} ;
114
118
115
119
let sql = "INSERT INTO test_table(id) VALUES(1)" ;
@@ -2715,10 +2719,9 @@ fn parse_scalar_subqueries() {
2715
2719
assert_matches ! (
2716
2720
verified_expr( sql) ,
2717
2721
Expr :: BinaryOp {
2718
- op: BinaryOperator :: Plus , ..
2719
- //left: box Subquery { .. },
2720
- //right: box Subquery { .. },
2721
- }
2722
+ op: BinaryOperator :: Plus ,
2723
+ ..
2724
+ }
2722
2725
) ;
2723
2726
}
2724
2727
@@ -3557,6 +3560,42 @@ fn parse_rolling_window() {
3557
3560
) ;
3558
3561
}
3559
3562
3563
+ #[ test]
3564
+ fn test_placeholder ( ) {
3565
+ let sql = "SELECT * FROM student WHERE id = ?" ;
3566
+ let ast = verified_only_select ( sql) ;
3567
+ assert_eq ! (
3568
+ ast. selection,
3569
+ Some ( Expr :: BinaryOp {
3570
+ left: Box :: new( Expr :: Identifier ( Ident :: new( "id" ) ) ) ,
3571
+ op: BinaryOperator :: Eq ,
3572
+ right: Box :: new( Expr :: Value ( Value :: Placeholder ( "?" . into( ) ) ) )
3573
+ } )
3574
+ ) ;
3575
+
3576
+ let dialects = TestedDialects {
3577
+ dialects : vec ! [
3578
+ Box :: new( GenericDialect { } ) ,
3579
+ Box :: new( PostgreSqlDialect { } ) ,
3580
+ Box :: new( MsSqlDialect { } ) ,
3581
+ Box :: new( AnsiDialect { } ) ,
3582
+ Box :: new( SnowflakeDialect { } ) ,
3583
+ // Note: `$` is the starting word for the HiveDialect identifier
3584
+ // Box::new(sqlparser::dialect::HiveDialect {}),
3585
+ ] ,
3586
+ } ;
3587
+ let sql = "SELECT * FROM student WHERE id = $Id1" ;
3588
+ let ast = dialects. verified_only_select ( sql) ;
3589
+ assert_eq ! (
3590
+ ast. selection,
3591
+ Some ( Expr :: BinaryOp {
3592
+ left: Box :: new( Expr :: Identifier ( Ident :: new( "id" ) ) ) ,
3593
+ op: BinaryOperator :: Eq ,
3594
+ right: Box :: new( Expr :: Value ( Value :: Placeholder ( "$Id1" . into( ) ) ) )
3595
+ } )
3596
+ ) ;
3597
+ }
3598
+
3560
3599
fn parse_sql_statements ( sql : & str ) -> Result < Vec < Statement > , ParserError > {
3561
3600
all_dialects ( ) . parse_sql_statements ( sql)
3562
3601
}
0 commit comments