@@ -10745,7 +10745,7 @@ fn parse_call() {
1074510745#[ test]
1074610746fn parse_execute_stored_procedure ( ) {
1074710747 let expected = Statement :: Execute {
10748- name : ObjectName :: from ( vec ! [
10748+ name : Some ( ObjectName :: from ( vec ! [
1074910749 Ident {
1075010750 value: "my_schema" . to_string( ) ,
1075110751 quote_style: None ,
@@ -10756,13 +10756,15 @@ fn parse_execute_stored_procedure() {
1075610756 quote_style: None ,
1075710757 span: Span :: empty( ) ,
1075810758 } ,
10759- ] ) ,
10759+ ] ) ) ,
1076010760 parameters : vec ! [
1076110761 Expr :: Value ( Value :: NationalStringLiteral ( "param1" . to_string( ) ) ) ,
1076210762 Expr :: Value ( Value :: NationalStringLiteral ( "param2" . to_string( ) ) ) ,
1076310763 ] ,
1076410764 has_parentheses : false ,
10765+ immediate : false ,
1076510766 using : vec ! [ ] ,
10767+ into : vec ! [ ] ,
1076610768 } ;
1076710769 assert_eq ! (
1076810770 // Microsoft SQL Server does not use parentheses around arguments for EXECUTE
@@ -10779,6 +10781,41 @@ fn parse_execute_stored_procedure() {
1077910781 ) ;
1078010782}
1078110783
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+
1078210819#[ test]
1078310820fn parse_create_table_collate ( ) {
1078410821 pg_and_generic ( ) . verified_stmt ( "CREATE TABLE tbl (foo INT, bar TEXT COLLATE \" de_DE\" )" ) ;
0 commit comments