fix(gaussdb): 修复查询分页限制
* 修复驱动管理与首页重叠 * 修复 GaussDB 查询分页限制 --------- Co-authored-by: staff <staff@qimaos-MacBook-Pro.local>
This commit is contained in:
parent
a595d4d4bd
commit
d0dce7b87b
|
|
@ -0,0 +1,12 @@
|
|||
import { describe, expect, it } from "vitest";
|
||||
import { databaseRuntimeMode, usesAgentCursorForQuery } from "@/lib/databaseDriverManifest";
|
||||
|
||||
describe("databaseDriverManifest", () => {
|
||||
it("uses agent cursor only for agent or external runtimes", () => {
|
||||
expect(databaseRuntimeMode("gaussdb")).toBe("native");
|
||||
expect(usesAgentCursorForQuery("gaussdb")).toBe(false);
|
||||
expect(usesAgentCursorForQuery("mysql")).toBe(false);
|
||||
expect(usesAgentCursorForQuery("jdbc")).toBe(true);
|
||||
expect(usesAgentCursorForQuery("prestosql")).toBe(true);
|
||||
});
|
||||
});
|
||||
|
|
@ -2,6 +2,7 @@ import type { DatabaseType } from "@/types/database";
|
|||
import driverManifest from "../../../../crates/dbx-core/assets/database-drivers.manifest.json";
|
||||
|
||||
export type DatabaseSupportLevel = "connect" | "browse" | "understand" | "operate";
|
||||
export type DatabaseRuntimeMode = "native" | "file" | "agent" | "external";
|
||||
|
||||
export const DATABASE_PRODUCT_CAPABILITY_KEYS = [
|
||||
"queryExecution",
|
||||
|
|
@ -27,6 +28,7 @@ export type DatabaseProductCapabilities = Record<DatabaseProductCapability, bool
|
|||
|
||||
interface DatabaseDriverManifestEntry {
|
||||
dbType: DatabaseType;
|
||||
runtimeMode: DatabaseRuntimeMode;
|
||||
supportLevel: DatabaseSupportLevel;
|
||||
capabilities: Partial<DatabaseProductCapabilities>;
|
||||
}
|
||||
|
|
@ -72,6 +74,10 @@ export function databaseSupportLevel(dbType?: DatabaseType): DatabaseSupportLeve
|
|||
return dbType ? DATABASE_DRIVER_BY_TYPE.get(dbType)?.supportLevel : undefined;
|
||||
}
|
||||
|
||||
export function databaseRuntimeMode(dbType?: DatabaseType): DatabaseRuntimeMode | undefined {
|
||||
return dbType ? DATABASE_DRIVER_BY_TYPE.get(dbType)?.runtimeMode : undefined;
|
||||
}
|
||||
|
||||
export function databaseProductCapabilities(dbType?: DatabaseType): DatabaseProductCapabilities {
|
||||
if (!dbType) return DEFAULT_CAPABILITIES;
|
||||
return (DATABASE_DRIVER_BY_TYPE.get(dbType)?.capabilities ?? DEFAULT_CAPABILITIES) as DatabaseProductCapabilities;
|
||||
|
|
@ -85,6 +91,11 @@ export function manifestDatabaseTypes(): DatabaseType[] {
|
|||
return DATABASE_DRIVER_ENTRIES.map((entry) => entry.dbType);
|
||||
}
|
||||
|
||||
export function usesAgentCursorForQuery(dbType?: DatabaseType): boolean {
|
||||
const runtimeMode = databaseRuntimeMode(dbType);
|
||||
return runtimeMode === "agent" || runtimeMode === "external";
|
||||
}
|
||||
|
||||
function productCapabilities(overrides: Partial<DatabaseProductCapabilities>): DatabaseProductCapabilities {
|
||||
const capabilities = Object.fromEntries(DATABASE_PRODUCT_CAPABILITY_KEYS.map((key) => [key, false])) as DatabaseProductCapabilities;
|
||||
return { ...capabilities, ...overrides };
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import {
|
|||
import { redisCommandResultToQueryResult } from "@/lib/redisQueryResult";
|
||||
import { nextRedisCommandDb } from "@/lib/redisCommandSession";
|
||||
import { isRedisMutatingCommand } from "@/lib/redisCommandTable";
|
||||
import { supportsDatabaseFeature } from "@/lib/databaseCapabilities";
|
||||
import { usesAgentCursorForQuery } from "@/lib/databaseDriverManifest";
|
||||
import { canUseKeylessRowPredicate, editableRowIdentifierColumns } from "@/lib/tableEditing";
|
||||
import { TABLE_DATA_EXPORT_PAGE_SIZE } from "@/lib/tableDataExport";
|
||||
import { tableMetaForDataTab } from "@/lib/tableDataTabMeta";
|
||||
|
|
@ -1428,7 +1428,7 @@ export const useQueryStore = defineStore("query", () => {
|
|||
}
|
||||
const conn = connStore.getConfig(tab.connectionId);
|
||||
const effectiveDbType = effectiveDatabaseTypeForConnection(conn);
|
||||
const useAgentCursor = conn?.db_type === "jdbc" || supportsDatabaseFeature(conn?.db_type, "driverManagement");
|
||||
const useAgentCursor = usesAgentCursorForQuery(conn?.db_type);
|
||||
const queryTimeoutSecs = queryTimeoutSecsForConnection(conn);
|
||||
const settingsStore = useSettingsStore();
|
||||
console.info("[DBX][executeTabSql:previous-session-close:start]", { traceId, elapsed: elapsed() });
|
||||
|
|
@ -2218,7 +2218,7 @@ export const useQueryStore = defineStore("query", () => {
|
|||
const conn = connStore.getConfig(tab.connectionId);
|
||||
const effectiveDbType = effectiveDatabaseTypeForConnection(conn);
|
||||
const queryTimeoutSecs = queryTimeoutSecsForConnection(conn);
|
||||
const useAgentCursor = conn?.db_type === "jdbc" || supportsDatabaseFeature(conn?.db_type, "driverManagement");
|
||||
const useAgentCursor = usesAgentCursorForQuery(conn?.db_type);
|
||||
const queryBaseSql = tab.resultBaseSql ?? sql;
|
||||
const exportSettings = useSettingsStore().editorSettings;
|
||||
const exportRowLimit = exportSettings.exportRowLimitEnabled ? exportSettings.exportRowLimit : Number.POSITIVE_INFINITY;
|
||||
|
|
@ -2298,7 +2298,7 @@ export const useQueryStore = defineStore("query", () => {
|
|||
const settings = useSettingsStore().editorSettings;
|
||||
const effectiveDbType = effectiveDatabaseTypeForConnection(conn);
|
||||
if (!effectiveDbType) return undefined;
|
||||
const useAgentCursor = conn?.db_type === "jdbc" || supportsDatabaseFeature(conn?.db_type, "driverManagement");
|
||||
const useAgentCursor = usesAgentCursorForQuery(conn?.db_type);
|
||||
const queryBaseSql = tab.resultBaseSql ?? sql;
|
||||
const rowLimit = settings.exportRowLimitEnabled ? settings.exportRowLimit : null;
|
||||
const totalRows = typeof tab.resultTotalRowCount === "number" ? (rowLimit === null ? tab.resultTotalRowCount : Math.min(tab.resultTotalRowCount, rowLimit)) : null;
|
||||
|
|
|
|||
Loading…
Reference in New Issue