@@ -10745,7 +10745,7 @@ fn parse_call() {
10745
10745
#[ test]
10746
10746
fn parse_execute_stored_procedure ( ) {
10747
10747
let expected = Statement :: Execute {
10748
- name : ObjectName :: from ( vec ! [
10748
+ name : Some ( ObjectName :: from ( vec ! [
10749
10749
Ident {
10750
10750
value: "my_schema" . to_string( ) ,
10751
10751
quote_style: None ,
@@ -10756,13 +10756,15 @@ fn parse_execute_stored_procedure() {
10756
10756
quote_style: None ,
10757
10757
span: Span :: empty( ) ,
10758
10758
} ,
10759
- ] ) ,
10759
+ ] ) ) ,
10760
10760
parameters : vec ! [
10761
10761
Expr :: Value ( Value :: NationalStringLiteral ( "param1" . to_string( ) ) ) ,
10762
10762
Expr :: Value ( Value :: NationalStringLiteral ( "param2" . to_string( ) ) ) ,
10763
10763
] ,
10764
10764
has_parentheses : false ,
10765
+ immediate : false ,
10765
10766
using : vec ! [ ] ,
10767
+ into : vec ! [ ] ,
10766
10768
} ;
10767
10769
assert_eq ! (
10768
10770
// Microsoft SQL Server does not use parentheses around arguments for EXECUTE
@@ -10779,6 +10781,41 @@ fn parse_execute_stored_procedure() {
10779
10781
) ;
10780
10782
}
10781
10783
10784
+ #[ test]
10785
+ fn parse_execute_immediate ( ) {
10786
+ let dialects = all_dialects_where ( |d| d. supports_execute_immediate ( ) ) ;
10787
+
10788
+ let expected = Statement :: Execute {
10789
+ parameters : vec ! [ Expr :: Value ( Value :: SingleQuotedString (
10790
+ "SELECT 1" . to_string( ) ,
10791
+ ) ) ] ,
10792
+ immediate : true ,
10793
+ using : vec ! [ ExprWithAlias {
10794
+ expr: Expr :: Value ( number( "1" ) ) ,
10795
+ alias: Some ( Ident :: new( "b" ) ) ,
10796
+ } ] ,
10797
+ into : vec ! [ Ident :: new( "a" ) ] ,
10798
+ name : None ,
10799
+ has_parentheses : false ,
10800
+ } ;
10801
+
10802
+ let stmt = dialects. verified_stmt ( "EXECUTE IMMEDIATE 'SELECT 1' INTO a USING 1 AS b" ) ;
10803
+ assert_eq ! ( expected, stmt) ;
10804
+
10805
+ dialects. verified_stmt ( "EXECUTE IMMEDIATE 'SELECT 1' INTO a, b USING 1 AS x, y" ) ;
10806
+ dialects. verified_stmt ( "EXECUTE IMMEDIATE 'SELECT 1' USING 1 AS x, y" ) ;
10807
+ dialects. verified_stmt ( "EXECUTE IMMEDIATE 'SELECT 1' INTO a, b" ) ;
10808
+ dialects. verified_stmt ( "EXECUTE IMMEDIATE 'SELECT 1'" ) ;
10809
+ dialects. verified_stmt ( "EXECUTE 'SELECT 1'" ) ;
10810
+
10811
+ assert_eq ! (
10812
+ ParserError :: ParserError ( "Expected: identifier, found: ," . to_string( ) ) ,
10813
+ dialects
10814
+ . parse_sql_statements( "EXECUTE IMMEDIATE 'SELECT 1' USING 1 AS, y" )
10815
+ . unwrap_err( )
10816
+ ) ;
10817
+ }
10818
+
10782
10819
#[ test]
10783
10820
fn parse_create_table_collate ( ) {
10784
10821
pg_and_generic ( ) . verified_stmt ( "CREATE TABLE tbl (foo INT, bar TEXT COLLATE \" de_DE\" )" ) ;
0 commit comments