fix(oceanbase): add ojdbc compatibility parameter
This commit is contained in:
parent
26cc2fdc4c
commit
d6544ba4be
|
|
@ -3,6 +3,9 @@ use percent_encoding::{percent_decode_str, utf8_percent_encode, NON_ALPHANUMERIC
|
|||
use crate::models::connection::{ConnectionConfig, DatabaseType};
|
||||
use crate::path_utils::expand_tilde;
|
||||
|
||||
const OCEANBASE_ORACLE_COMPATIBLE_OJDBC_VERSION_KEY: &str = "compatibleOjdbcVersion";
|
||||
const OCEANBASE_ORACLE_COMPATIBLE_OJDBC_VERSION_PARAM: &str = "compatibleOjdbcVersion=8";
|
||||
|
||||
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)
|
||||
|
|
@ -335,10 +338,15 @@ fn oracle_descriptor_jdbc_url(host: &str, port: u16, database: &str, key: &str)
|
|||
fn oceanbase_oracle_jdbc_connection_string(config: &ConnectionConfig, host: &str, port: u16, database: &str) -> String {
|
||||
if let Some(connection_string) = config.connection_string.as_deref().filter(|value| !value.trim().is_empty()) {
|
||||
let connection_string = connection_string.trim();
|
||||
if host == config.host && port == config.port {
|
||||
return connection_string.to_string();
|
||||
let url = if host == config.host && port == config.port {
|
||||
connection_string.to_string()
|
||||
} else {
|
||||
crate::models::connection::rewrite_jdbc_url_host(connection_string, host, port)
|
||||
};
|
||||
if url_has_query_key(&url, OCEANBASE_ORACLE_COMPATIBLE_OJDBC_VERSION_KEY) {
|
||||
return url;
|
||||
}
|
||||
return crate::models::connection::rewrite_jdbc_url_host(connection_string, host, port);
|
||||
return append_agent_url_params(url, Some(OCEANBASE_ORACLE_COMPATIBLE_OJDBC_VERSION_PARAM));
|
||||
}
|
||||
|
||||
let database = database.trim();
|
||||
|
|
@ -346,7 +354,20 @@ fn oceanbase_oracle_jdbc_connection_string(config: &ConnectionConfig, host: &str
|
|||
return String::new();
|
||||
}
|
||||
|
||||
append_agent_url_params(format!("jdbc:oceanbase://{host}:{port}/{database}"), config.url_params.as_deref())
|
||||
let base = format!("jdbc:oceanbase://{host}:{port}/{database}");
|
||||
append_agent_url_params(base, Some(&oceanbase_oracle_jdbc_params(config)))
|
||||
}
|
||||
|
||||
fn oceanbase_oracle_jdbc_params(config: &ConnectionConfig) -> String {
|
||||
let user_params = normalize_agent_url_params(config.url_params.as_deref());
|
||||
let mut params = Vec::new();
|
||||
if !user_params.is_empty() {
|
||||
params.push(user_params.to_string());
|
||||
}
|
||||
if !url_params_has_key(user_params, OCEANBASE_ORACLE_COMPATIBLE_OJDBC_VERSION_KEY) {
|
||||
params.push(OCEANBASE_ORACLE_COMPATIBLE_OJDBC_VERSION_PARAM.to_string());
|
||||
}
|
||||
params.join("&")
|
||||
}
|
||||
|
||||
fn postgres_like_agent_jdbc_connection_string(
|
||||
|
|
@ -717,7 +738,10 @@ mod tests {
|
|||
|
||||
assert_eq!(params["database"], "sys");
|
||||
assert_eq!(params["sysdba"], false);
|
||||
assert_eq!(params["connection_string"], "jdbc:oceanbase://oceanbase.example.com:2881/sys");
|
||||
assert_eq!(
|
||||
params["connection_string"],
|
||||
"jdbc:oceanbase://oceanbase.example.com:2881/sys?compatibleOjdbcVersion=8"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
@ -729,7 +753,40 @@ mod tests {
|
|||
|
||||
let params = agent_connect_params(&cfg, "127.0.0.1", 12881, "sys");
|
||||
|
||||
assert_eq!(params["connection_string"], "jdbc:oceanbase://127.0.0.1:12881/sys?useSSL=false");
|
||||
assert_eq!(
|
||||
params["connection_string"],
|
||||
"jdbc:oceanbase://127.0.0.1:12881/sys?useSSL=false&compatibleOjdbcVersion=8"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn oceanbase_oracle_jdbc_url_keeps_explicit_compatible_ojdbc_version() {
|
||||
let mut cfg = config(DatabaseType::OceanbaseOracle, Some("sys"));
|
||||
cfg.host = "oceanbase.example.com".to_string();
|
||||
cfg.port = 2881;
|
||||
cfg.url_params = Some("compatibleOjdbcVersion=6&useSSL=false".to_string());
|
||||
|
||||
let params = agent_connect_params(&cfg, "127.0.0.1", 12881, "sys");
|
||||
|
||||
assert_eq!(
|
||||
params["connection_string"],
|
||||
"jdbc:oceanbase://127.0.0.1:12881/sys?compatibleOjdbcVersion=6&useSSL=false"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn oceanbase_oracle_custom_jdbc_url_gets_compatible_ojdbc_version_and_forwarded_host() {
|
||||
let mut cfg = config(DatabaseType::OceanbaseOracle, Some("sys"));
|
||||
cfg.host = "oceanbase.example.com".to_string();
|
||||
cfg.port = 2881;
|
||||
cfg.connection_string = Some("jdbc:oceanbase://oceanbase.example.com:2881/sys?useSSL=false".to_string());
|
||||
|
||||
let params = agent_connect_params(&cfg, "127.0.0.1", 12881, "sys");
|
||||
|
||||
assert_eq!(
|
||||
params["connection_string"],
|
||||
"jdbc:oceanbase://127.0.0.1:12881/sys?useSSL=false&compatibleOjdbcVersion=8"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
|||
Loading…
Reference in New Issue