From 4e07f731579500251dd0d201d3fe8103bb8e22a9 Mon Sep 17 00:00:00 2001 From: hb <34821912+chenhbb@users.noreply.github.com> Date: Mon, 22 Jun 2026 00:37:41 +0800 Subject: [PATCH] fix(mysql): preserve temporary tables in client session pools Disable COM_RESET_CONNECTION for single-connection session pools (max_connections == 1) so that MySQL session state such as TEMPORARY TABLEs is not cleared when a connection is returned to the pool. Closes #1509 --- crates/dbx-core/src/db/mysql.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/dbx-core/src/db/mysql.rs b/crates/dbx-core/src/db/mysql.rs index 8ce4b5ddc..c5ffc2d7f 100644 --- a/crates/dbx-core/src/db/mysql.rs +++ b/crates/dbx-core/src/db/mysql.rs @@ -417,9 +417,13 @@ fn create_pool(url: &str, ca_cert_path: Option<&str>, max_connections: usize) -> mysql_async::Opts::from_url(&mysql_async_url(&tls_url.url)).map_err(|e| format!("Invalid MySQL URL: {e}"))?; let base_ssl_opts = opts.ssl_opts().cloned(); let max_connections = max_connections.max(1); + // Single-connection pools (max_connections == 1) are client session pools that + // must preserve session state (e.g. TEMPORARY TABLEs) across queries. + // Disable COM_RESET_CONNECTION for these pools to avoid clearing that state. let pool_opts = mysql_async::PoolOpts::new() .with_constraints(mysql_async::PoolConstraints::new(1, max_connections).unwrap()) - .with_inactive_connection_ttl(Duration::from_secs(300)); + .with_inactive_connection_ttl(Duration::from_secs(300)) + .with_reset_connection(max_connections > 1); let mut builder = mysql_async::OptsBuilder::from_opts(opts) .stmt_cache_size(0) .prefer_socket(false)