From 08fb5bbf4def9b9f68071cbad8ba3c619978876b Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Mon, 15 Jun 2026 14:42:03 +0800 Subject: [PATCH] fix(query): avoid retrying local query timeouts --- crates/dbx-core/src/query.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/dbx-core/src/query.rs b/crates/dbx-core/src/query.rs index 86b5c03c5..1aa7806ee 100644 --- a/crates/dbx-core/src/query.rs +++ b/crates/dbx-core/src/query.rs @@ -572,6 +572,9 @@ pub fn agent_close_query_session_params(session_id: &str) -> serde_json::Value { pub fn is_connection_error(err: &str) -> bool { let lower = err.to_lowercase(); + if is_dbx_query_timeout_error(&lower) { + return false; + } lower.contains("connection") || lower.contains("broken pipe") || lower.contains("reset by peer") @@ -588,6 +591,10 @@ pub fn is_connection_error(err: &str) -> bool { || is_os_connection_error(&lower) } +fn is_dbx_query_timeout_error(lower: &str) -> bool { + lower.starts_with("query timed out after ") +} + fn is_os_connection_error(lower: &str) -> bool { let os_error_codes = ["10053", "10054", "10057", "10058", "10060", "10061"]; if let Some(pos) = lower.find("os error ") { @@ -1823,6 +1830,7 @@ mod tests { #[test] fn is_connection_error_rejects_non_connection_errors() { + assert!(!is_connection_error("Query timed out after 30 seconds")); assert!(!is_connection_error("ORA-00942: table or view does not exist")); assert!(!is_connection_error("syntax error at position 5")); assert!(!is_connection_error("os error 13"));