fix(saphana): normalize legacy driver class alias

This commit is contained in:
t8y2 committed 2026-07-27 18:28:32 +08:00
1 parent cec4796dab
commit 66c768061a
1 file changed
+46 -1
+46 -1
View File
@@ -7,6 +7,15 @@ const OCEANBASE_ORACLE_COMPATIBLE_OJDBC_VERSION_KEY: &str = "compatibleOjdbcVers
const OCEANBASE_ORACLE_COMPATIBLE_OJDBC_VERSION_PARAM: &str = "compatibleOjdbcVersion=8";
const ZOOKEEPER_MIN_CONNECTION_TIMEOUT_MS: u64 = 15_000;
fn agent_jdbc_driver_class(config: &ConnectionConfig) -> &str {
let driver_class = config.jdbc_driver_class.as_deref().unwrap_or("");
if config.db_type == DatabaseType::SapHana && matches!(driver_class, "sap_hana" | "saphana") {
""
} else {
driver_class
}
}
pub fn agent_connect_params(config: &ConnectionConfig, host: &str, port: u16, database: &str) -> serde_json::Value {
let agent_database = if config.db_type == DatabaseType::MongoDb {
mongo_agent_database(config, database)
@@ -70,7 +79,7 @@ pub fn agent_connect_params(config: &ConnectionConfig, host: &str, port: u16, da
"zookeeper_connect_string": zookeeper_connect_string,
"gbase_server": config.gbase_server,
"informix_server": config.informix_server,
"jdbc_driver_class": config.jdbc_driver_class.as_deref().unwrap_or(""),
"jdbc_driver_class": agent_jdbc_driver_class(config),
"jdbc_driver_paths": &config.jdbc_driver_paths,
});
if config.db_type == DatabaseType::ZooKeeper {
@@ -1018,6 +1027,42 @@ mod tests {
assert_eq!(params["connection_string"], "jdbc:sap://hana.example.com:30013/?databaseName=TENANT1&encrypt=true");
}
#[test]
fn sap_hana_agent_connect_params_normalizes_legacy_driver_class_aliases() {
for alias in ["sap_hana", "saphana"] {
let mut cfg = config(DatabaseType::SapHana, Some("TENANT1"));
cfg.jdbc_driver_class = Some(alias.to_string());
cfg.jdbc_driver_paths = vec!["/tmp/ngdbc.jar".to_string()];
let params = agent_connect_params(&cfg, "hana.example.com", 30013, "TENANT1");
assert_eq!(params["jdbc_driver_class"], "");
assert_eq!(params["jdbc_driver_paths"], serde_json::json!(["/tmp/ngdbc.jar"]));
}
}
#[test]
fn sap_hana_agent_connect_params_preserves_custom_driver_class() {
let mut cfg = config(DatabaseType::SapHana, Some("TENANT1"));
cfg.jdbc_driver_class = Some("com.example.CustomSapHanaDriver".to_string());
let params = agent_connect_params(&cfg, "hana.example.com", 30013, "TENANT1");
assert_eq!(params["jdbc_driver_class"], "com.example.CustomSapHanaDriver");
}
#[test]
fn other_agent_connect_params_preserve_sap_hana_driver_alias() {
let mut cfg = config(DatabaseType::Mysql, Some("test"));
cfg.jdbc_driver_class = Some("sap_hana".to_string());
cfg.jdbc_driver_paths = vec!["/tmp/custom-driver.jar".to_string()];
let params = agent_connect_params(&cfg, "mysql.example.com", 3306, "test");
assert_eq!(params["jdbc_driver_class"], "sap_hana");
assert_eq!(params["jdbc_driver_paths"], serde_json::json!(["/tmp/custom-driver.jar"]));
}
#[test]
fn trino_agent_url_uses_jdbc_scheme_without_ssl_by_default() {
let mut cfg = config(DatabaseType::Trino, Some("hive"));