@@ -10748,7 +10748,7 @@ fn parse_call() {
1074810748#[ test]
1074910749fn parse_execute_stored_procedure ( ) {
1075010750 let expected = Statement :: Execute {
10751- name : ObjectName :: from ( vec ! [
10751+ name : Some ( ObjectName :: from ( vec ! [
1075210752 Ident {
1075310753 value: "my_schema" . to_string( ) ,
1075410754 quote_style: None ,
@@ -10759,13 +10759,15 @@ fn parse_execute_stored_procedure() {
1075910759 quote_style: None ,
1076010760 span: Span :: empty( ) ,
1076110761 } ,
10762- ] ) ,
10762+ ] ) ) ,
1076310763 parameters : vec ! [
1076410764 Expr :: Value ( Value :: NationalStringLiteral ( "param1" . to_string( ) ) ) ,
1076510765 Expr :: Value ( Value :: NationalStringLiteral ( "param2" . to_string( ) ) ) ,
1076610766 ] ,
1076710767 has_parentheses : false ,
10768+ immediate : false ,
1076810769 using : vec ! [ ] ,
10770+ into : vec ! [ ] ,
1076910771 } ;
1077010772 assert_eq ! (
1077110773 // Microsoft SQL Server does not use parentheses around arguments for EXECUTE
@@ -10782,6 +10784,41 @@ fn parse_execute_stored_procedure() {
1078210784 ) ;
1078310785}
1078410786
10787+ #[ test]
10788+ fn parse_execute_immediate ( ) {
10789+ let dialects = all_dialects_where ( |d| d. supports_execute_immediate ( ) ) ;
10790+
10791+ let expected = Statement :: Execute {
10792+ parameters : vec ! [ Expr :: Value ( Value :: SingleQuotedString (
10793+ "SELECT 1" . to_string( ) ,
10794+ ) ) ] ,
10795+ immediate : true ,
10796+ using : vec ! [ ExprWithAlias {
10797+ expr: Expr :: Value ( number( "1" ) ) ,
10798+ alias: Some ( Ident :: new( "b" ) ) ,
10799+ } ] ,
10800+ into : vec ! [ Ident :: new( "a" ) ] ,
10801+ name : None ,
10802+ has_parentheses : false ,
10803+ } ;
10804+
10805+ let stmt = dialects. verified_stmt ( "EXECUTE IMMEDIATE 'SELECT 1' INTO a USING 1 AS b" ) ;
10806+ assert_eq ! ( expected, stmt) ;
10807+
10808+ dialects. verified_stmt ( "EXECUTE IMMEDIATE 'SELECT 1' INTO a, b USING 1 AS x, y" ) ;
10809+ dialects. verified_stmt ( "EXECUTE IMMEDIATE 'SELECT 1' USING 1 AS x, y" ) ;
10810+ dialects. verified_stmt ( "EXECUTE IMMEDIATE 'SELECT 1' INTO a, b" ) ;
10811+ dialects. verified_stmt ( "EXECUTE IMMEDIATE 'SELECT 1'" ) ;
10812+ dialects. verified_stmt ( "EXECUTE 'SELECT 1'" ) ;
10813+
10814+ assert_eq ! (
10815+ ParserError :: ParserError ( "Expected: identifier, found: ," . to_string( ) ) ,
10816+ dialects
10817+ . parse_sql_statements( "EXECUTE IMMEDIATE 'SELECT 1' USING 1 AS, y" )
10818+ . unwrap_err( )
10819+ ) ;
10820+ }
10821+
1078510822#[ test]
1078610823fn parse_create_table_collate ( ) {
1078710824 pg_and_generic ( ) . verified_stmt ( "CREATE TABLE tbl (foo INT, bar TEXT COLLATE \" de_DE\" )" ) ;
0 commit comments