fix(knowledge-fs): decode freeze bigint evidence

This commit is contained in:
Jyong 2026-07-28 06:34:02 -04:00
parent da9870b5e1
commit 76f67f096e
2 changed files with 31 additions and 3 deletions

View File

@ -64,6 +64,34 @@ describe.each(["postgres", "tidb"] as const)("database Dify integration freeze (
).resolves.toMatchObject({ applied: false, replayed: true });
script.expectDone();
});
it("accepts safe bigint freeze values returned as decimal strings", async () => {
const script = scriptedDatabase(dialect, [
{
operation: "select",
rows: [{ ...stateRow(), freeze_revision: "7", source_task_watermark: "12" }],
},
]);
await expect(
createDatabaseDifyIntegrationFreezeRepository({ database: script.database }).get("tenant-a"),
).resolves.toMatchObject({ freezeRevision: 7, sourceTaskWatermark: 12 });
script.expectDone();
});
it("rejects bigint freeze values outside JavaScript's safe integer range", async () => {
const script = scriptedDatabase(dialect, [
{
operation: "select",
rows: [{ ...stateRow(), freeze_revision: "9007199254740992" }],
},
]);
await expect(
createDatabaseDifyIntegrationFreezeRepository({ database: script.database }).get("tenant-a"),
).rejects.toThrow("nonnegative safe integer");
script.expectDone();
});
});
interface ScriptStep {

View File

@ -5,7 +5,7 @@ import type {
DatabaseRow,
} from "@knowledge/core";
import { numberColumn, stringColumn } from "./database-row-utils";
import { nonnegativeSafeIntegerColumn, stringColumn } from "./database-row-utils";
import { databasePlaceholder, quoteDatabaseIdentifier } from "./database-sql-utils";
import {
DifyIntegrationFreezeConflictError,
@ -154,11 +154,11 @@ async function updateState(
function stateFromRow(row: DatabaseRow): DifyIntegrationFreezeState {
const state = {
freezeId: stringColumn(row, "freeze_id"),
freezeRevision: numberColumn(row, "freeze_revision"),
freezeRevision: nonnegativeSafeIntegerColumn(row, "freeze_revision"),
frozenAt: stringColumn(row, "frozen_at"),
namespaceId: stringColumn(row, "tenant_id"),
sourceRevisionDigest: stringColumn(row, "source_revision_digest"),
sourceTaskWatermark: numberColumn(row, "source_task_watermark"),
sourceTaskWatermark: nonnegativeSafeIntegerColumn(row, "source_task_watermark"),
updatedAt: stringColumn(row, "updated_at"),
};
assertDifyIntegrationFreezeState(state);