Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion datafusion/sql/src/statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -892,8 +892,12 @@ impl<S: ContextProvider> SqlToRel<'_, S> {
.map(|expr| self.sql_to_expr(expr, &empty_schema, planner_context))
.collect::<Result<Vec<Expr>>>()?;

let name = name.ok_or_else(|| {
plan_datafusion_err!("EXECUTE statement requires a name")
})?;

Ok(LogicalPlan::Statement(PlanStatement::Execute(Execute {
name: object_name_to_string(&name.unwrap()),
name: object_name_to_string(&name),
parameters,
})))
}
Expand Down
16 changes: 16 additions & 0 deletions datafusion/sqllogictest/test_files/prepare.slt
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,22 @@ PREPARE my_plan(INT, INT) AS SELECT 1 + $1;
statement error SQL error: ParserError
PREPARE my_plan(INT) AS SELECT id, age FROM person WHERE age is $1;

# EXEC/EXECUTE with parentheses but no statement name must error instead of panic
statement error EXECUTE statement requires a name
EXEC();

statement error EXECUTE statement requires a name
EXEC('');

statement error EXECUTE statement requires a name
EXEC('any-string');

statement error EXECUTE statement requires a name
EXECUTE();

statement error EXECUTE statement requires a name
EXEC ('a');

# #######################
# Test prepare and execute statements

Expand Down
Loading