feat(cloudberry): add database support
This commit is contained in:
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" },
|
||||
|
||||
Reference in new issue
Block a user