From 6529f22fedff2308fac0bd4d9b2fadddb62e9837 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Sat, 4 Jul 2026 23:31:32 +0800 Subject: [PATCH] fix(cassandra): omit empty keyspace in jdbc url --- .../dbx/agent/cassandra/CassandraAgent.java | 7 +++++-- .../agent/cassandra/CassandraAgentTest.java | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/agents/drivers/cassandra/src/main/java/com/dbx/agent/cassandra/CassandraAgent.java b/agents/drivers/cassandra/src/main/java/com/dbx/agent/cassandra/CassandraAgent.java index 5c6f63050..8d68245ab 100644 --- a/agents/drivers/cassandra/src/main/java/com/dbx/agent/cassandra/CassandraAgent.java +++ b/agents/drivers/cassandra/src/main/java/com/dbx/agent/cassandra/CassandraAgent.java @@ -159,8 +159,11 @@ public final class CassandraAgent extends AbstractJdbcAgent { }); } - private static String buildUrl(ConnectParams params) { - return "jdbc:cassandra://" + params.getHost() + ":" + params.getPort() + "/" + params.getDatabase(); + static String buildUrl(ConnectParams params) { + String baseUrl = "jdbc:cassandra://" + params.getHost() + ":" + params.getPort(); + String keyspace = coalesce(params.getDatabase()).trim(); + // Cassandra rejects an empty keyspace path; omit it so DBX can connect first and list keyspaces. + return keyspace.isEmpty() ? baseUrl : baseUrl + "/" + keyspace; } private static List targetColumns(String options) { diff --git a/agents/drivers/cassandra/src/test/java/com/dbx/agent/cassandra/CassandraAgentTest.java b/agents/drivers/cassandra/src/test/java/com/dbx/agent/cassandra/CassandraAgentTest.java index 484ed1e02..3dabb472c 100644 --- a/agents/drivers/cassandra/src/test/java/com/dbx/agent/cassandra/CassandraAgentTest.java +++ b/agents/drivers/cassandra/src/test/java/com/dbx/agent/cassandra/CassandraAgentTest.java @@ -1,7 +1,11 @@ package com.dbx.agent.cassandra; +import com.dbx.agent.ConnectParams; import com.dbx.agent.DatabaseAgent; import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; class CassandraAgentTest extends JdbcFakeExecutionBehaviorTest { @Override @@ -13,4 +17,18 @@ class CassandraAgentTest extends JdbcFakeExecutionBehaviorTest { protected String resultSetSql() { return "LIST ROLES"; } + + @Test + void buildsServerUrlWhenKeyspaceIsEmpty() { + ConnectParams params = new ConnectParams("127.0.0.1", 9042, "", "cassandra", "cassandra", "", "", false); + + assertEquals("jdbc:cassandra://127.0.0.1:9042", CassandraAgent.buildUrl(params)); + } + + @Test + void buildsKeyspaceUrlWhenKeyspaceIsSet() { + ConnectParams params = new ConnectParams("127.0.0.1", 9042, "app_keyspace", "cassandra", "cassandra", "", "", false); + + assertEquals("jdbc:cassandra://127.0.0.1:9042/app_keyspace", CassandraAgent.buildUrl(params)); + } }