fix(mysql): return result sets for EXECUTE statements

This commit is contained in:
zipg authored and GitHub committed 2026-09-22 17:05:53 +08:00
1 parent 4975b72b69
commit 2dda96336d
2 files changed
+42 -1

No files matched your search

+23
View File
@@ -6612,6 +6612,29 @@ async fn execute_manual_txn_mysql_statement(
let mut result = conn.query_iter(sql).await.map_err(|e| format!("Query failed: {e}"))?;
let columns: Vec<String> = result.columns_ref().iter().map(|c| c.name_str().to_string()).collect();
let column_types: Vec<String> = result.columns_ref().iter().map(db::mysql::mysql_column_type_name).collect();
// Some statements only *may* return rows — `EXECUTE` of a prepared DML statement
// finishes with a plain OK packet instead — so report the affected rows rather than
// failing on the missing result set.
if columns.is_empty() {
let affected_rows = result.affected_rows();
result.drop_result().await.map_err(|e| format!("Query failed: {e}"))?;
return Ok(db::QueryResult {
columns: Vec::new(),
column_types: Vec::new(),
column_sortables: vec![],
spatial_columns: vec![],
spatial_values: vec![],
rows: vec![],
affected_rows,
execution_time_ms: start.elapsed().as_millis(),
server_execute_time_us: None,
truncated: false,
session_id: None,
has_more: false,
elasticsearch_raw_body: None,
messages: Vec::new(),
});
}
let mut data: Vec<Vec<serde_json::Value>> = Vec::with_capacity(row_limit.min(1024));
let mut stream = result
.stream::<mysql_async::Row>()