Skip to content

Commit c7f67db

Browse files
committed
Handle EXECUTE without statement name
1 parent 3cba937 commit c7f67db

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

datafusion/sql/src/statement.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -892,8 +892,12 @@ impl<S: ContextProvider> SqlToRel<'_, S> {
892892
.map(|expr| self.sql_to_expr(expr, &empty_schema, planner_context))
893893
.collect::<Result<Vec<Expr>>>()?;
894894

895+
let name = name.ok_or_else(|| {
896+
plan_datafusion_err!("EXECUTE statement requires a name")
897+
})?;
898+
895899
Ok(LogicalPlan::Statement(PlanStatement::Execute(Execute {
896-
name: object_name_to_string(&name.unwrap()),
900+
name: object_name_to_string(&name),
897901
parameters,
898902
})))
899903
}

datafusion/sqllogictest/test_files/prepare.slt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ PREPARE my_plan(INT, INT) AS SELECT 1 + $1;
5353
statement error SQL error: ParserError
5454
PREPARE my_plan(INT) AS SELECT id, age FROM person WHERE age is $1;
5555

56+
# EXEC/EXECUTE with parentheses but no statement name must error instead of panic
57+
statement error EXECUTE statement requires a name
58+
EXEC();
59+
60+
statement error EXECUTE statement requires a name
61+
EXEC('');
62+
63+
statement error EXECUTE statement requires a name
64+
EXEC('any-string');
65+
66+
statement error EXECUTE statement requires a name
67+
EXECUTE();
68+
69+
statement error EXECUTE statement requires a name
70+
EXEC ('a');
71+
5672
# #######################
5773
# Test prepare and execute statements
5874

0 commit comments

Comments
 (0)