feat(oceanbase-oracle): split execution time from client wait

This commit is contained in:
efeire authored and GitHub committed 2026-09-20 12:31:47 +08:00
1 parent 1294708eea
commit 33afb0b432
58 files changed
+843 -11

No files matched your search

@@ -146,6 +146,28 @@ describe("drawCanvasDataGrid with frozen columns", () => {
expect(resolveCanvasBackingStoreMetrics({ width: 801, height: 399, pixelRatio: 5 })).toEqual({ pixelWidth: 3204, pixelHeight: 1596, scaleX: 4, scaleY: 4, measured: false });
});
it("reports a completed draw only after obtaining a Canvas context", () => {
const canvas = createMockCanvas();
const options = createBaseOptions({ canvas, rowCount: 0, rowAt: () => undefined });
const fillRect = vi.fn();
vi.spyOn(canvas, "getContext")
.mockReturnValueOnce(null)
.mockReturnValueOnce(
new Proxy(
{},
{
get: (_target, key) => (key === "fillRect" ? fillRect : key === "measureText" ? () => ({ width: 0 }) : () => {}),
set: () => true,
},
) as unknown as CanvasRenderingContext2D,
);
expect(drawCanvasDataGrid(options)).toBe(false);
expect(fillRect).not.toHaveBeenCalled();
expect(drawCanvasDataGrid(options)).toBe(true);
expect(fillRect).toHaveBeenCalled();
});
it("draws without errors when frozenColumnCount is 0", () => {
const canvas = createMockCanvas();
const options = createBaseOptions({ canvas, frozenColumnCount: 0 });
@@ -81,6 +81,8 @@ describe("tab result cache statement execution metadata", () => {
rows: [[1]],
affected_rows: 0,
execution_time_ms: 1,
server_execute_time_us: 370,
client_request_wait_ms: 45,
statement_index: 0,
sourceStatement: "SELECT 1",
},
@@ -101,6 +103,7 @@ describe("tab result cache statement execution metadata", () => {
const restored = decodeTabResultSnapshot(encoded);
expect(restored?.resultEditorFingerprint).toBe("15:0123456789abcdef");
expect(restored?.results?.[0]).toMatchObject({ server_execute_time_us: 370, client_request_wait_ms: 45 });
expect(restored?.results?.map((result) => ({ statementIndex: result.statement_index, error: result.execution_error }))).toEqual([
{ statementIndex: 0, error: undefined },
{ statementIndex: 1, error: true },
@@ -324,7 +324,7 @@ function resolveCanvasRenderState(canvas: HTMLCanvasElement, isDark: boolean, st
return state;
}
export function drawCanvasDataGrid(options: DrawCanvasDataGridOptions) {
export function drawCanvasDataGrid(options: DrawCanvasDataGridOptions): boolean {
const {
canvas,
scroller,
@@ -387,7 +387,7 @@ export function drawCanvasDataGrid(options: DrawCanvasDataGridOptions) {
if (canvas.style.height !== canvasHeight) canvas.style.height = canvasHeight;
const ctx = canvas.getContext("2d");
if (!ctx) return;
if (!ctx) return false;
ctx.setTransform(scaleX, 0, 0, scaleY, 0, 0);
ctx.imageSmoothingEnabled = false;
ctx.clearRect(0, 0, width, height);
@@ -742,4 +742,5 @@ export function drawCanvasDataGrid(options: DrawCanvasDataGridOptions) {
}
ctx.restore();
}
return true;
}
@@ -69,6 +69,8 @@ interface ColumnarQueryResult {
mongo_copy_documents?: unknown[];
affected_rows: number;
execution_time_ms: number;
server_execute_time_us?: number;
client_request_wait_ms?: number;
truncated?: boolean;
has_more?: boolean;
sourceLabel?: string;
@@ -355,6 +357,8 @@ function stripSessionIds(result: QueryResult | undefined): QueryResult | undefin
mongo_copy_documents: result.mongo_copy_documents ? clonePlain(result.mongo_copy_documents) : undefined,
affected_rows: result.affected_rows,
execution_time_ms: result.execution_time_ms,
server_execute_time_us: result.server_execute_time_us,
client_request_wait_ms: result.client_request_wait_ms,
truncated: result.truncated,
session_id: undefined,
has_more: result.has_more,
@@ -400,6 +404,8 @@ function toColumnarResult(result: QueryResult | undefined): ColumnarQueryResult
mongo_copy_documents: result.mongo_copy_documents ? clonePlain(result.mongo_copy_documents) : undefined,
affected_rows: result.affected_rows,
execution_time_ms: result.execution_time_ms,
server_execute_time_us: result.server_execute_time_us,
client_request_wait_ms: result.client_request_wait_ms,
truncated: result.truncated,
has_more: result.has_more,
sourceLabel: result.sourceLabel,
@@ -426,6 +432,8 @@ function fromColumnarResult(result: ColumnarQueryResult | undefined): QueryResul
mongo_copy_documents: result.mongo_copy_documents ? clonePlain(result.mongo_copy_documents) : undefined,
affected_rows: result.affected_rows,
execution_time_ms: result.execution_time_ms,
server_execute_time_us: result.server_execute_time_us,
client_request_wait_ms: result.client_request_wait_ms,
truncated: result.truncated,
session_id: undefined,
has_more: result.has_more,