diff --git a/apps/desktop/src/components/connection/ConnectionDialog.vue b/apps/desktop/src/components/connection/ConnectionDialog.vue index fc1423279..d3b9c3b61 100644 --- a/apps/desktop/src/components/connection/ConnectionDialog.vue +++ b/apps/desktop/src/components/connection/ConnectionDialog.vue @@ -330,7 +330,7 @@ watch( proxy_username: config.proxy_username || "", proxy_password: config.proxy_password || "", ssl: config.ssl || false, - oracle_connection_type: config.oracle_connection_type || "service_name", + oracle_connection_type: config.oracle_connection_type || "sid", connection_string: config.connection_string, jdbc_driver_class: config.jdbc_driver_class, jdbc_driver_paths: config.jdbc_driver_paths || [], diff --git a/crates/dbx-core/src/connection.rs b/crates/dbx-core/src/connection.rs index bf36d3dd7..343a9ba51 100644 --- a/crates/dbx-core/src/connection.rs +++ b/crates/dbx-core/src/connection.rs @@ -595,14 +595,14 @@ fn oracle_jdbc_connection_string(config: &ConnectionConfig, host: &str, port: u1 return config.connection_string.as_deref().unwrap_or("").to_string(); } - if config.oracle_connection_type.as_deref() == Some("sid") { - format!("jdbc:oracle:thin:@{host}:{port}:{database}") - } else { + if config.oracle_connection_type.as_deref() == Some("service_name") { format!("jdbc:oracle:thin:@//{host}:{port}/{database}") + } else { + format!("jdbc:oracle:thin:@{host}:{port}:{database}") } } -fn should_retry_oracle_with_10g_driver(config: &ConnectionConfig, err: &str) -> bool { +pub fn should_retry_oracle_with_10g_driver(config: &ConnectionConfig, err: &str) -> bool { if config.db_type != DatabaseType::Oracle { return false; } @@ -808,6 +808,7 @@ mod tests { config.port = 1521; config.username = "system".to_string(); config.password = "oracle".to_string(); + config.oracle_connection_type = Some("service_name".to_string()); let params = agent_connect_params(&config, "oracle.example.com", 1521, "ORCLPDB1"); @@ -826,6 +827,17 @@ mod tests { assert_eq!(params["connection_string"], "jdbc:oracle:thin:@127.0.0.1:11521:ORCL"); } + #[test] + fn agent_connect_params_preserve_legacy_oracle_configs_as_sid() { + let mut config = mysql_config(Some("ORCL")); + config.db_type = DatabaseType::Oracle; + config.oracle_connection_type = None; + + let params = agent_connect_params(&config, "127.0.0.1", 11521, "ORCL"); + + assert_eq!(params["connection_string"], "jdbc:oracle:thin:@127.0.0.1:11521:ORCL"); + } + #[test] fn oracle_retry_guard_only_triggers_for_non_10g_listener_errors() { let mut config = mysql_config(Some("ORCL")); diff --git a/packages/app-tests/connectionDialogOracleMode.test.ts b/packages/app-tests/connectionDialogOracleMode.test.ts index 9c9257b2a..4a4dfd8b4 100644 --- a/packages/app-tests/connectionDialogOracleMode.test.ts +++ b/packages/app-tests/connectionDialogOracleMode.test.ts @@ -15,3 +15,7 @@ test("Oracle connection mode uses an inline option group", () => { assert.match(oracleModeBlock, /form\.oracle_connection_type = 'sid'/); assert.doesNotMatch(oracleModeBlock, /