From be3246664b18efc8cfbb1c104ac9285d44a77533 Mon Sep 17 00:00:00 2001 From: ZhuchkaTriplesix Date: Thu, 30 Jul 2026 06:43:29 +0300 Subject: [PATCH 1/3] fix(driver): fix URL and ssl mapping for connections. Closes #43 --- src/driver/client.rs | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/driver/client.rs b/src/driver/client.rs index ce605cf..f429e5e 100644 --- a/src/driver/client.rs +++ b/src/driver/client.rs @@ -14,10 +14,13 @@ pub struct ConnectParams { pub connection_string: Option, pub host: Option, pub port: Option, + #[serde(alias = "username")] pub user: Option, pub database: Option, #[serde(alias = "safe_mode", alias = "safeMode")] pub readonly: Option, + #[serde(alias = "sslMode")] + pub ssl_mode: Option, } #[derive(Debug)] @@ -44,8 +47,17 @@ impl ClickHouseClient { } else { let parsed = Url::parse(&cs)?; let host = parsed.host_str().unwrap_or("localhost"); - let port = parsed.port().unwrap_or(8123); let scheme = parsed.scheme(); + let port_str = match parsed.port() { + Some(p) => format!(":{}", p), + None => { + if scheme == "http" { + ":8123".to_string() + } else { + String::new() + } + } + }; let user = if !parsed.username().is_empty() { parsed.username().to_string() } else { @@ -58,17 +70,24 @@ impl ClickHouseClient { params.database.unwrap_or_else(|| "default".to_string()) }; let readonly = params.readonly.unwrap_or(false); - let base = format!("{}://{}:{}", scheme, host, port); + let base = format!("{}://{}{}", scheme, host, port_str); (base, user, database, readonly) } } else { let host = params.host.unwrap_or_else(|| "localhost".to_string()); - let port = params.port.unwrap_or(8123); + let scheme = match params.ssl_mode.as_deref() { + Some("prefer") | Some("require") => "https", + _ => "http", + }; + let mut port = params.port.unwrap_or(8123); + if scheme == "https" && port == 8123 { + port = 8443; + } let user = params.user.unwrap_or_else(|| "default".to_string()); let database = params.database.unwrap_or_else(|| "default".to_string()); let readonly = params.readonly.unwrap_or(false); ( - format!("http://{}:{}", host, port), + format!("{}://{}:{}", scheme, host, port), user, database, readonly, From 33008b1e0d5c2c547162dc7a37e845b084512891 Mon Sep 17 00:00:00 2001 From: ZhuchkaTriplesix Date: Thu, 30 Jul 2026 06:45:45 +0300 Subject: [PATCH 2/3] style(formatting): run cargo fmt to satisfy CI --- src/rpc/handlers/schema.rs | 15 +++++++-------- src/rpc/router.rs | 4 +++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/rpc/handlers/schema.rs b/src/rpc/handlers/schema.rs index d778dd9..6e3db45 100644 --- a/src/rpc/handlers/schema.rs +++ b/src/rpc/handlers/schema.rs @@ -396,14 +396,13 @@ pub async fn handle_get_object_metadata(params: Option) -> Result = p.node_id.split('.').collect(); - let (db_name, tbl_name) = - if parts.len() >= 3 && (parts[0] == "table" || parts[0] == "view") { - (parts[1], parts[2]) - } else if parts.len() >= 2 { - (parts[0], parts[1]) - } else { - ("default", p.node_id.as_str()) - }; + let (db_name, tbl_name) = if parts.len() >= 3 && (parts[0] == "table" || parts[0] == "view") { + (parts[1], parts[2]) + } else if parts.len() >= 2 { + (parts[0], parts[1]) + } else { + ("default", p.node_id.as_str()) + }; if client.base_url.starts_with("mock://") || client.base_url.starts_with("test://") { return Ok(json!({ diff --git a/src/rpc/router.rs b/src/rpc/router.rs index 60e183d..51097c8 100644 --- a/src/rpc/router.rs +++ b/src/rpc/router.rs @@ -19,7 +19,9 @@ pub async fn dispatch(method: &str, params: Option) -> Result schema::handle_context_actions(params).await, "db.getCapabilities" => schema::handle_get_capabilities(params).await, "db.getServerStats" => schema::handle_get_server_stats(params).await, - "db.getObjectMetadata" | "db.getObjectDDL" => schema::handle_get_object_metadata(params).await, + "db.getObjectMetadata" | "db.getObjectDDL" => { + schema::handle_get_object_metadata(params).await + } _ => Err(DriverError::Rpc { code: -32601, message: format!("Method not found: {}", method), From 065020e14f3a1b48c8f17d61d868e927fc1a1786 Mon Sep 17 00:00:00 2001 From: ZhuchkaTriplesix Date: Thu, 30 Jul 2026 06:47:41 +0300 Subject: [PATCH 3/3] style(clippy): fix collapsible_if warnings --- src/rpc/handlers/schema.rs | 64 ++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/src/rpc/handlers/schema.rs b/src/rpc/handlers/schema.rs index 6e3db45..9097650 100644 --- a/src/rpc/handlers/schema.rs +++ b/src/rpc/handlers/schema.rs @@ -328,21 +328,19 @@ pub async fn handle_get_server_stats(params: Option) -> Result) -> Result) -> Result