mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-18 16:02:10 +00:00
28c8b5c60f
* feat(cli): add datatable list and run commands * feat(cli): render datatable query results as a table * feat(cli): serve datatables as a postgres-wire endpoint * feat(cli): add 'datatable psql' to launch psql against the proxy * feat(cli): route datatable serve by client-supplied database name * override database list + password option * fix: support extended queries in datatable serve * fix: correct cloud size threshold log and parse CLI descriptions with parens/trailing comma * refactor: extract raw_output envelope encoding into pg_raw_output module --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
47 lines
1.8 KiB
TypeScript
47 lines
1.8 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
|
|
import {
|
|
queryTouchesVirtualDatabaseCatalog,
|
|
virtualizeDatabaseCatalogQuery,
|
|
} from "../src/commands/datatable/virtual_catalog.ts";
|
|
|
|
test("queryTouchesVirtualDatabaseCatalog: detects current_database and pg_database", () => {
|
|
expect(queryTouchesVirtualDatabaseCatalog("select current_database()")).toBe(true);
|
|
expect(queryTouchesVirtualDatabaseCatalog("select * from pg_catalog.pg_database")).toBe(true);
|
|
expect(queryTouchesVirtualDatabaseCatalog("select * from public.users")).toBe(false);
|
|
});
|
|
|
|
test("virtualizeDatabaseCatalogQuery: rewrites current_database to the virtual datatable name", () => {
|
|
expect(
|
|
virtualizeDatabaseCatalogQuery(
|
|
"select current_database() as db",
|
|
"sales-main",
|
|
["sales-main"],
|
|
),
|
|
).toBe("select 'sales-main' as db");
|
|
});
|
|
|
|
test("virtualizeDatabaseCatalogQuery: rewrites pg_database reads to the virtual datatable catalog", () => {
|
|
const rewritten = virtualizeDatabaseCatalogQuery(
|
|
"select datname from pg_catalog.pg_database where datname = current_database() order by datname",
|
|
"sales-main",
|
|
["sales-main", "warehouse"],
|
|
);
|
|
|
|
expect(rewritten).toContain("FROM unnest(ARRAY['sales-main', 'warehouse']::text[]) WITH ORDINALITY");
|
|
expect(rewritten).toContain("where datname = 'sales-main'");
|
|
expect(rewritten).not.toContain("pg_catalog.pg_database");
|
|
});
|
|
|
|
test("virtualizeDatabaseCatalogQuery: neutralizes pg_database metadata helpers that need a real upstream database", () => {
|
|
const rewritten = virtualizeDatabaseCatalogQuery(
|
|
"select pg_size_pretty(pg_database_size(datname)) as size, has_database_privilege(datname, 'CONNECT') from pg_database",
|
|
"sales-main",
|
|
["sales-main"],
|
|
);
|
|
|
|
expect(rewritten).toContain("NULL::text as size");
|
|
expect(rewritten).toContain("true");
|
|
expect(rewritten).not.toContain("pg_database_size");
|
|
});
|