feat(oracle): expand package members in schema tree

This commit is contained in:
t8y2 committed 2026-08-10 18:15:47 +08:00
1 parent ad9075e18f
commit 585e2f3c50
12 files changed
+508 -75

No files matched your search

@@ -91,6 +91,7 @@ import {
supportsTableTruncate,
supportsTableStructureEditing,
supportsTransfer,
supportsPackageMemberExpansion,
usesTreeSchemaMode,
isSingleDatabase,
} from "@/lib/database/databaseCapabilities";
@@ -622,8 +623,8 @@ async function toggle() {
return;
}
if (node.type === "package" && node.connectionId && connectionStore.getConfig(node.connectionId)?.db_type === "xugu") {
await connectionStore.loadXuguPackageMembers(node);
if (node.type === "package" && node.connectionId && supportsPackageMemberExpansion(currentDatabaseType())) {
await connectionStore.loadPackageMembers(node);
emitNodeToggled(node, wasExpanded);
return;
}
@@ -13,6 +13,9 @@ const connectionStore = {
canUseLoadedTreeNodeToggle: vi.fn(() => true),
releaseCollapsedTreeNodeChildren: vi.fn(),
getConfig: vi.fn(() => ({ db_type: "mysql" })),
loadPackageMembers: vi.fn(async (node: TreeNode) => {
node.isExpanded = true;
}),
};
vi.mock("@/stores/connectionStore", () => ({
@@ -41,6 +44,7 @@ afterEach(() => {
connectionStore.treeNodes = [];
connectionStore.sidebarSearchQuery = "";
vi.clearAllMocks();
connectionStore.getConfig.mockReturnValue({ db_type: "mysql" });
});
describe("SidebarTreeRuntimeHost expansion", () => {
@@ -78,4 +82,38 @@ describe("SidebarTreeRuntimeHost expansion", () => {
expect(toggled).toHaveBeenCalledWith(renderedGroup, false);
expect(liveGroup.isExpanded).toBe(false);
});
it("loads Oracle package members through the shared expansion path", async () => {
const packageNode: TreeNode = {
id: "oracle:XE:APP:package:BUSINESS_API",
label: "BUSINESS_API",
type: "package",
connectionId: "oracle",
database: "XE",
schema: "APP",
isExpanded: false,
children: [],
};
connectionStore.treeNodes = [packageNode];
connectionStore.getConfig.mockReturnValue({ db_type: "oracle" });
const host = ref<InstanceType<typeof SidebarTreeRuntimeHost> | null>(null);
const toggled = vi.fn();
const app = createApp(
defineComponent({
setup: () => () => h(SidebarTreeRuntimeHost, { ref: host, node: packageNode, depth: 0, onNodeToggled: toggled }),
}),
);
mountedApps.push(app);
const container = document.createElement("div");
document.body.append(container);
app.use(i18n);
app.mount(container);
host.value?.toggleNode(packageNode);
await vi.waitFor(() => expect(connectionStore.loadPackageMembers).toHaveBeenCalledWith(packageNode));
expect(packageNode.isExpanded).toBe(true);
expect(toggled).toHaveBeenCalledWith(packageNode, true);
});
});