feat(settings): configure table open page size

This commit is contained in:
二丫讲梵 authored and GitHub committed 2026-07-20 14:05:40 +08:00
1 parent 5803df3f73
commit cdbe0079e7
21 files changed
+156 -31

No files matched your search

@@ -14,6 +14,7 @@ const mocks = vi.hoisted(() => ({
getColumns: vi.fn(),
listIndexes: vi.fn(),
ensureConnected: vi.fn(),
tableOpenPageSize: 100,
tabs: [] as QueryTab[],
setTableMeta: vi.fn(),
}));
@@ -58,6 +59,10 @@ vi.mock("@/stores/queryStore", () => ({
}),
}));
vi.mock("@/stores/settingsStore", () => ({
useSettingsStore: () => ({ editorSettings: { tableOpenPageSize: mocks.tableOpenPageSize } }),
}));
vi.mock("@/composables/useToast", () => ({
useToast: () => ({ toast: vi.fn() }),
}));
@@ -92,6 +97,7 @@ describe("useDataGridActions", () => {
clearTableMetadataCache();
vi.clearAllMocks();
mocks.tabs.length = 0;
mocks.tableOpenPageSize = 100;
mocks.getConfig.mockReturnValue({ id: "postgres-1", db_type: "postgres" });
mocks.buildTableSelectSql.mockResolvedValue("SELECT * FROM public.users LIMIT 100 OFFSET 0");
mocks.buildSortedQuerySql.mockResolvedValue({ ok: true, sql: "SELECT sorted" });
@@ -100,7 +106,9 @@ describe("useDataGridActions", () => {
mocks.listIndexes.mockResolvedValue([]);
});
it("uses the table-data default when toolbar reload has no saved pagination", async () => {
it("uses the configured table-data default when toolbar reload has no saved pagination", async () => {
mocks.tableOpenPageSize = 250;
mocks.buildTableSelectSql.mockResolvedValueOnce("SELECT * FROM public.users LIMIT 250 OFFSET 0");
const tab = tableDataTab();
const actions = useDataGridActions(computed(() => tab));
@@ -108,11 +116,11 @@ describe("useDataGridActions", () => {
expect(mocks.buildTableSelectSql).toHaveBeenCalledWith(
expect.objectContaining({
limit: 100,
limit: 250,
offset: 0,
}),
);
expect(mocks.executeTabSql).toHaveBeenCalledWith("tab-1", "SELECT * FROM public.users LIMIT 100 OFFSET 0", expect.objectContaining({ pagination: { limit: 100, offset: 0 } }));
expect(mocks.executeTabSql).toHaveBeenCalledWith("tab-1", "SELECT * FROM public.users LIMIT 250 OFFSET 0", expect.objectContaining({ pagination: { limit: 250, offset: 0 } }));
expect(mocks.executeTabSql.mock.calls[0]?.[2]).not.toHaveProperty("preserveTotalRowCountDuringExecution");
});
@@ -2,6 +2,7 @@ import { type ComputedRef } from "vue";
import { useI18n } from "vue-i18n";
import { useConnectionStore } from "@/stores/connectionStore";
import { useQueryStore } from "@/stores/queryStore";
import { useSettingsStore } from "@/stores/settingsStore";
import { buildTableSelectSql, quoteTableDataIdentifier } from "@/lib/table/tableSelectSql";
import { tableOpenPageLimit } from "@/lib/table/tableOpenPageLimit";
import { usesSyntheticRowIdKey } from "@/lib/table/tableEditing";
@@ -37,6 +38,7 @@ export function useDataGridActions(activeTab: ComputedRef<QueryTab | undefined>)
const { toast } = useToast();
const connectionStore = useConnectionStore();
const queryStore = useQueryStore();
const settingsStore = useSettingsStore();
function quoteIdent(tab: QueryTab, name: string): string {
const config = connectionStore.getConfig(tab.connectionId);
@@ -64,7 +66,7 @@ export function useDataGridActions(activeTab: ComputedRef<QueryTab | undefined>)
columns: realColumns?.map((column) => column.name),
primaryKeys,
includeRowId: useRowId,
limit: options.limit ?? tab.resultPageLimit ?? tableOpenPageLimit(),
limit: options.limit ?? tab.resultPageLimit ?? tableOpenPageLimit(settingsStore.editorSettings.tableOpenPageSize),
...options,
});
}
@@ -135,7 +137,7 @@ export function useDataGridActions(activeTab: ComputedRef<QueryTab | undefined>)
const elapsed = () => `${Math.round(performance.now() - startedAt)}ms`;
if (tab.mode === "data" && tableMetaForDataTab(tab)) {
tab.whereInput = whereInput ?? "";
const pageLimit = limit ?? tab.resultPageLimit ?? tableOpenPageLimit();
const pageLimit = limit ?? tab.resultPageLimit ?? tableOpenPageLimit(settingsStore.editorSettings.tableOpenPageSize);
const pageOffset = offset ?? 0;
console.info("[DBX][reloadData:start]", {
traceId,
@@ -28,7 +28,7 @@ async function openTableTarget(target: NavigationTarget, options: { tableInfoTab
const connectionStore = useConnectionStore();
const queryStore = useQueryStore();
const settingsStore = useSettingsStore();
const pageLimit = tableOpenPageLimit();
const pageLimit = tableOpenPageLimit(settingsStore.editorSettings.tableOpenPageSize);
connectionStore.activeConnectionId = target.connectionId;
const config = connectionStore.getConfig(target.connectionId);
@@ -266,7 +266,7 @@ export function useSidebarDataOpenRuntime() {
logPhase("ensure-connected", { tabId });
if (!config) throw new Error("Connection config not found");
const limit = tableOpenPageLimit();
const limit = tableOpenPageLimit(settingsStore.editorSettings.tableOpenPageSize);
const shouldRefreshTableMeta = !cachedTableMeta;
// Dameng metadata calls must remain serialized behind the table query.
const deferTableMetaRefresh = effectiveDbType === "dameng";