fix: empty statements hang (#6480)

* fix: empty statements hang

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* tests: add cases

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

---------

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>
Signed-off-by: evenyag <realevenyag@gmail.com>
This commit is contained in:
dennis zhuang
2025-07-09 10:13:14 +08:00
committed by Yingwen
parent 6435b97314
commit 69fac19770
2 changed files with 17 additions and 0 deletions

View File

@@ -380,6 +380,13 @@ impl SqlQueryHandler for Instance {
.and_then(|stmts| query_interceptor.post_parsing(stmts, query_ctx.clone()))
{
Ok(stmts) => {
if stmts.is_empty() {
return vec![InvalidSqlSnafu {
err_msg: "empty statements",
}
.fail()];
}
let mut results = Vec::with_capacity(stmts.len());
for stmt in stmts {
if let Err(e) = checker

View File

@@ -152,6 +152,16 @@ pub async fn test_mysql_stmts(store_type: StorageType) {
conn.execute("SET TRANSACTION READ ONLY").await.unwrap();
// empty statements
let err = conn.execute(" ------- ;").await.unwrap_err();
assert!(err.to_string().contains("empty statements"));
let err = conn.execute("----------\n;").await.unwrap_err();
assert!(err.to_string().contains("empty statements"));
let err = conn.execute(" ;").await.unwrap_err();
assert!(err.to_string().contains("empty statements"));
let err = conn.execute(" \n ;").await.unwrap_err();
assert!(err.to_string().contains("empty statements"));
let _ = fe_mysql_server.shutdown().await;
guard.remove_all().await;
}