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
This commit is contained in:
hb 2026-06-22 00:37:41 +08:00 committed by GitHub
parent 2fc835060e
commit 4e07f73157
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 5 additions and 1 deletions

View File

@ -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)