feat(cloudberry): add database support

This commit is contained in:
t8y2 committed 2026-07-24 16:55:50 +08:00
1 parent 0362fef273
commit 0449d7487a
13 files changed
+573 -1

No files matched your search

@@ -0,0 +1,37 @@
import { describe, expect, it } from "vitest";
import { connectionProfileForScheme, parseConnectionUrl } from "@/lib/connection/connectionUrl";
describe("Cloudberry connection URLs", () => {
it("parses the Cloudberry alias as a PostgreSQL-compatible profile", () => {
const parsed = parseConnectionUrl("cloudberry://analyst:secret@cb.example.com/warehouse");
expect(parsed).toMatchObject({
dbType: "postgres",
driverProfile: "cloudberry",
driverLabel: "Apache Cloudberry",
host: "cb.example.com",
port: 5432,
username: "analyst",
password: "secret",
database: "warehouse",
});
});
it("keeps the Cloudberry profile for standard PostgreSQL URLs", () => {
const parsed = parseConnectionUrl("postgresql://cb.example.com:6432/warehouse", "cloudberry");
expect(parsed.dbType).toBe("postgres");
expect(parsed.driverProfile).toBe("cloudberry");
expect(parsed.driverLabel).toBe("Apache Cloudberry");
expect(parsed.port).toBe(6432);
});
it("exposes Cloudberry to connection deep links", () => {
expect(connectionProfileForScheme("cloudberry")).toEqual({
type: "postgres",
profile: "cloudberry",
label: "Apache Cloudberry",
defaultPort: 5432,
});
});
});
@@ -81,3 +81,36 @@ describe("DBeaver folder import", () => {
expect(layoutLabels(result.layout!, names)).toEqual([{ group: "Ad hoc", children: [{ group: "Production", children: ["Nested"] }] }]);
});
});
describe("DBeaver Cloudberry import", () => {
it("preserves Cloudberry while reusing the PostgreSQL backend", async () => {
const connections = await parseDbeaverConnections(
payload({
connections: {
cloudberry: {
id: "cloudberry",
name: "analytics",
provider: "cloudberry",
driver: "cloudberry-jdbc",
configuration: {
host: "cb.example.com",
port: 5432,
database: "warehouse",
user: "analyst",
},
},
},
}),
);
expect(connections[0]).toMatchObject({
db_type: "postgres",
driver_profile: "cloudberry",
driver_label: "Apache Cloudberry",
host: "cb.example.com",
port: 5432,
database: "warehouse",
username: "analyst",
});
});
});
@@ -31,6 +31,7 @@ const SCHEME_PROFILES: Record<string, ConnectionProfile> = {
mariadb: { type: "mysql", profile: "mariadb", label: "MariaDB", defaultPort: 3306 },
postgres: { type: "postgres", profile: "postgres", label: "PostgreSQL", defaultPort: 5432 },
postgresql: { type: "postgres", profile: "postgres", label: "PostgreSQL", defaultPort: 5432 },
cloudberry: { type: "postgres", profile: "cloudberry", label: "Apache Cloudberry", defaultPort: 5432 },
redshift: { type: "redshift", profile: "redshift", label: "Redshift", defaultPort: 5439 },
redis: { type: "redis", profile: "redis", label: "Redis", defaultPort: 6379 },
rediss: { type: "redis", profile: "redis", label: "Redis", defaultPort: 6379 },
@@ -248,6 +249,10 @@ export function connectionProfileForScheme(scheme: string, preferredProfile?: st
if ((scheme === "http" || scheme === "https") && preferredProfile) {
return HTTP_SELECTED_PROFILES[preferredProfile];
}
// Cloudberry uses PostgreSQL URLs, so keep the selected product profile when parsing a pasted URL.
if ((scheme === "postgres" || scheme === "postgresql") && preferredProfile === "cloudberry") {
return SCHEME_PROFILES.cloudberry;
}
return SCHEME_PROFILES[scheme];
}
@@ -41,6 +41,7 @@ const profileMap: Record<string, ConnectionProfile> = {
mariadb: { dbType: "mysql", profile: "mariadb", label: "MariaDB", port: 3306, user: "root" },
postgresql: { dbType: "postgres", profile: "postgres", label: "PostgreSQL", port: 5432, user: "postgres" },
postgres: { dbType: "postgres", profile: "postgres", label: "PostgreSQL", port: 5432, user: "postgres" },
cloudberry: { dbType: "postgres", profile: "cloudberry", label: "Apache Cloudberry", port: 5432, user: "postgres" },
sqlite: { dbType: "sqlite", profile: "sqlite", label: "SQLite", port: 0, user: "" },
sqlserver: { dbType: "sqlserver", profile: "sqlserver", label: "SQL Server", port: 1433, user: "sa" },
mssql: { dbType: "sqlserver", profile: "sqlserver", label: "SQL Server", port: 1433, user: "sa" },