fix(oracle): reuse connection runtime for schemas

This commit is contained in:
t8y2 2026-06-14 11:40:48 +08:00
parent 97192297eb
commit babdd7f12f
1 changed files with 17 additions and 6 deletions

View File

@ -782,6 +782,9 @@ impl AppState {
let configs = self.configs.read().await;
configs.get(connection_id).map(|c| c.db_type)
};
if database.is_some() && db_type.is_some_and(|db_type| shares_database_pool_with_connection(&db_type)) {
return Ok(false);
}
let base_pool_key = base_pool_key_for(db_type, connection_id, database, false);
let session_prefix = format!("{base_pool_key}:session:");
let mut conns = self.connections.write().await;
@ -1095,7 +1098,7 @@ fn base_pool_key_for(
let is_single_connection_pool = db_type.as_ref().is_some_and(|db_type| {
let is_single = database_capabilities::is_single_connection_pool(db_type)
|| (include_elasticsearch_single_pool && *db_type == DatabaseType::Elasticsearch);
is_single && !database_capabilities::is_agent_type(db_type)
is_single && (!database_capabilities::is_agent_type(db_type) || shares_database_pool_with_connection(db_type))
});
if is_single_connection_pool {
@ -1108,6 +1111,10 @@ fn base_pool_key_for(
}
}
fn shares_database_pool_with_connection(db_type: &DatabaseType) -> bool {
matches!(db_type, DatabaseType::Oracle)
}
fn default_plugin_dir() -> PathBuf {
default_dbx_dir().join("plugins")
}
@ -1915,15 +1922,19 @@ mod tests {
}
#[test]
fn agent_single_connection_types_keep_database_scoped_pool_keys() {
fn oracle_reuses_connection_scoped_pool_for_schema_database_keys() {
assert_eq!(
super::base_pool_key_for(Some(DatabaseType::Oracle), "oracle-conn", Some("ORCLPDB1"), false),
"oracle-conn"
);
}
#[test]
fn other_agent_single_connection_types_keep_database_scoped_pool_keys() {
assert_eq!(
super::base_pool_key_for(Some(DatabaseType::Kingbase), "kingbase-conn", Some("app1"), false),
"kingbase-conn:app1"
);
assert_eq!(
super::base_pool_key_for(Some(DatabaseType::Oracle), "oracle-conn", Some("ORCLPDB1"), false),
"oracle-conn:ORCLPDB1"
);
assert_eq!(
super::base_pool_key_for(Some(DatabaseType::MongoDb), "mongo-conn", Some("shop"), false),
"mongo-conn:shop"