mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-29 08:11:06 +00:00
feat(schema): refresh stale metadata cache
This commit is contained in:
@@ -1,10 +1,15 @@
|
||||
import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
import { sqlMetadataRefreshScope } from "../src/lib/sqlMetadataRefresh.ts";
|
||||
import { sqlMetadataRefreshScope, sqlMetadataRefreshTarget } from "../src/lib/sqlMetadataRefresh.ts";
|
||||
|
||||
test("database DDL refreshes the connection database list", () => {
|
||||
assert.equal(sqlMetadataRefreshScope("CREATE DATABASE app;"), "connection");
|
||||
assert.equal(sqlMetadataRefreshScope("drop schema public cascade;"), "connection");
|
||||
assert.deepEqual(sqlMetadataRefreshTarget("DROP DATABASE app;"), { scope: "connection" });
|
||||
});
|
||||
|
||||
test("schema DDL refreshes the selected database tree", () => {
|
||||
assert.equal(sqlMetadataRefreshScope("drop schema public cascade;"), "database");
|
||||
assert.deepEqual(sqlMetadataRefreshTarget("CREATE SCHEMA analytics;"), { scope: "database" });
|
||||
});
|
||||
|
||||
test("object DDL refreshes the selected database tree", () => {
|
||||
@@ -19,8 +24,43 @@ test("object DDL refreshes the selected database tree", () => {
|
||||
);
|
||||
});
|
||||
|
||||
test("qualified object DDL refreshes the matching schema node", () => {
|
||||
assert.deepEqual(sqlMetadataRefreshTarget("CREATE TABLE public.users (id int);"), {
|
||||
scope: "database",
|
||||
schema: "public",
|
||||
});
|
||||
assert.deepEqual(sqlMetadataRefreshTarget('ALTER TABLE "Sales".orders ADD COLUMN name text;'), {
|
||||
scope: "database",
|
||||
schema: "Sales",
|
||||
});
|
||||
assert.deepEqual(sqlMetadataRefreshTarget("DROP VIEW `reporting`.active_users;"), {
|
||||
scope: "database",
|
||||
schema: "reporting",
|
||||
});
|
||||
assert.deepEqual(sqlMetadataRefreshTarget("CREATE INDEX idx_users_email ON public.users (email);"), {
|
||||
scope: "database",
|
||||
schema: "public",
|
||||
});
|
||||
});
|
||||
|
||||
test("unqualified object DDL can use the active schema as the refresh target", () => {
|
||||
assert.deepEqual(sqlMetadataRefreshTarget("ALTER TABLE users ADD COLUMN name text;", "public"), {
|
||||
scope: "database",
|
||||
schema: "public",
|
||||
});
|
||||
assert.deepEqual(sqlMetadataRefreshTarget("CREATE SCHEMA analytics;", "public"), { scope: "database" });
|
||||
});
|
||||
|
||||
test("multiple object DDL schemas fall back to refreshing the database tree", () => {
|
||||
assert.deepEqual(
|
||||
sqlMetadataRefreshTarget("CREATE TABLE public.users (id int); CREATE TABLE audit.events (id int);"),
|
||||
{ scope: "database" },
|
||||
);
|
||||
});
|
||||
|
||||
test("data-only SQL does not refresh metadata trees", () => {
|
||||
assert.equal(sqlMetadataRefreshScope("SELECT * FROM users;"), "none");
|
||||
assert.equal(sqlMetadataRefreshScope("INSERT INTO users VALUES (1);"), "none");
|
||||
assert.equal(sqlMetadataRefreshScope("TRUNCATE TABLE users;"), "none");
|
||||
assert.deepEqual(sqlMetadataRefreshTarget("SELECT * FROM users;"), { scope: "none" });
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user