@g9tm/syncdata 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/sqlite/query.ts"],"names":[],"mappings":"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","sourcesContent":["// Twin of G9SyncData.Client.Sqlite/G9CSqliteSyncStore.Query.cs: staging, reconciliation reads, pending counts, change\n// feed, rejections, run reports and statistics.\nimport { G9SyncDigest } from '../abstractions/digest.js';\nimport { G9SyncKey } from '../abstractions/key.js';\nimport { G9Long, parseJson } from '../abstractions/long.js';\nimport { guidToN, tryNormalizeGuid } from '../abstractions/guid.js';\nimport type {\n G9ChangeFeedEntry,\n G9LocalRowEntry,\n G9PendingSummary,\n G9PendingTable,\n G9ResumePoint,\n G9StagedPull,\n G9SyncRejection,\n G9SyncRunReport,\n} from '../client/storeTypes.js';\nimport type { G9DtNegotiatedTable, G9DtSyncChunk, G9DtTableDigest } from '../protocol/dtos.js';\nimport { readContinuation, readPullPlan } from '../protocol/wire.js';\nimport { asLong, asNumber, asOptionalString, asString, statementsOf, type G9SqliteConnection } from './connection.js';\nimport type { G9SqlValue } from './driver.js';\nimport { findByServerName, getLocal, persistedJson, readSubscriptions, type LocalTable, type StoreInternals } from './internals.js';\nimport { allColumnsMask, bit, keyExpression, literal, NOW_MS, quote } from './sql.js';\nimport { deleteFiles, forgetPendingSegments, persistedPlan, stageFileSegment, takeStagedFiles } from './snapshotFiles.js';\nimport { formatTicks, ticksOf, ticksToUnixMs } from './values.js';\n\n// ================================================================ staging\n\nexport async function readStagedRun(connection: G9SqliteConnection, runId: string): Promise<G9StagedPull | null> {\n const rows = await connection.query('SELECT plan_json, backfills_json, created_utc, generation, stage_seq, from_cursors_json FROM g9_stage_runs WHERE run_id = $r', {\n $r: runId,\n });\n const r = rows[0];\n if (!r) return null;\n const backfills = r[1] === null ? [] : (parseJson(asString(r[1])) as { tableId?: number; columns?: string[] }[]);\n const fromCursors = r[5] === null ? {} : (JSON.parse(asString(r[5])) as { [key: string]: string | null });\n return {\n runId,\n plan: readPullPlan(parseJson(asString(r[0]))),\n backfills: (Array.isArray(backfills) ? backfills : []).map((b) => ({ tableId: Number(b.tableId ?? 0), columns: Array.isArray(b.columns) ? b.columns.map(String) : [] })),\n createdUtcMs: asNumber(r[2]),\n generation: asOptionalString(r[3]),\n stageSequence: asNumber(r[4]),\n plannedFromCursors: fromCursors ?? {},\n };\n}\n\nexport async function getStagedPull(store: StoreInternals, generation: string | null): Promise<G9StagedPull | null> {\n const connection = store.reader();\n const runId =\n generation === null\n ? await connection.scalar('SELECT run_id FROM g9_stage_runs ORDER BY created_utc DESC LIMIT 1')\n : await connection.scalar('SELECT run_id FROM g9_stage_runs WHERE generation = $g ORDER BY created_utc DESC LIMIT 1', { $g: generation });\n return runId === null ? null : readStagedRun(connection, asString(runId));\n}\n\nexport async function pruneStagedPulls(store: StoreInternals, olderThanUtcMs: number, maxBytes: number, keepGeneration: string | null): Promise<number> {\n let files: string[] = [];\n const pruned = await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n const doomed = (await connection.query('SELECT run_id FROM g9_stage_runs WHERE created_utc < $c', { $c: olderThanUtcMs })).map((r) => asString(r[0]));\n // The byte cap is for the stages nobody is about to resume: newest first, past the cap they go (ADR-0060).\n let kept = 0;\n for (const r of await connection.query(\n 'SELECT r.run_id, (SELECT coalesce(sum(length(payload)), 0) FROM g9_stage s WHERE s.run_id = r.run_id) ' +\n '+ (SELECT coalesce(sum(bytes_received), 0) FROM g9_stage_files f WHERE f.run_id = r.run_id) FROM g9_stage_runs r ' +\n 'WHERE r.created_utc >= $c AND (r.generation IS NULL OR r.generation <> $g) ORDER BY r.created_utc DESC',\n { $c: olderThanUtcMs, $g: keepGeneration ?? '' },\n )) {\n kept += asNumber(r[1]);\n if (kept > Math.max(0, maxBytes)) doomed.push(asString(r[0]));\n }\n for (const runId of doomed) {\n files = files.concat(await takeStagedFiles(connection, '$r', { $r: runId }));\n await connection.exec('DELETE FROM g9_stage WHERE run_id = $r; DELETE FROM g9_stage_runs WHERE run_id = $r', { $r: runId });\n }\n return doomed.length;\n }),\n );\n await deleteFiles(store, files);\n return pruned;\n}\n\nexport async function discardAllStagedPulls(store: StoreInternals): Promise<number> {\n let files: string[] = [];\n const count = await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n const count = asNumber(await connection.scalar('SELECT count(*) FROM g9_stage_runs'));\n files = await takeStagedFiles(connection, 'SELECT run_id FROM g9_stage_files');\n await connection.exec('DELETE FROM g9_stage; DELETE FROM g9_stage_runs;');\n return count;\n }),\n );\n await deleteFiles(store, files);\n return count;\n}\n\nexport async function beginStagedPull(store: StoreInternals, pull: G9StagedPull): Promise<void> {\n let replaced: string[] = [];\n await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n // Only the stage this one replaces goes: the same generation (ADR-0060).\n replaced = await takeStagedFiles(connection, 'SELECT run_id FROM g9_stage_runs WHERE generation IS $g', { $g: pull.generation });\n await connection.exec(\n 'DELETE FROM g9_stage WHERE run_id IN (SELECT run_id FROM g9_stage_runs WHERE generation IS $g); DELETE FROM g9_stage_runs WHERE generation IS $g',\n { $g: pull.generation },\n );\n // Read inside the transaction that inserts the run: rows written after it are newer than the stage (ADR-0046).\n const stageSequence = asNumber(await connection.scalar('SELECT seq FROM g9_clock WHERE id = 1'));\n const fromCursors: { [key: string]: string | null } = {};\n for (const key of Object.keys(pull.plannedFromCursors)) fromCursors[key] = pull.plannedFromCursors[key] ?? null;\n await connection.exec(\n 'INSERT INTO g9_stage_runs (run_id, plan_json, backfills_json, created_utc, complete, generation, stage_seq, from_cursors_json) VALUES ($r, $p, $b, $c, 0, $g, $s, $f)',\n {\n $r: pull.runId,\n $p: persistedPlan(pull.plan),\n $b: persistedJson(pull.backfills),\n $c: pull.createdUtcMs,\n $g: pull.generation,\n $s: stageSequence,\n // Dictionary<string, string?>: a null value stays (DefaultIgnoreCondition only drops null PROPERTIES).\n $f: JSON.stringify(fromCursors),\n },\n );\n }),\n );\n await deleteFiles(store, replaced);\n}\n\nexport async function stageChunk(store: StoreInternals, runId: string, chunk: G9DtSyncChunk, durability: (connection: G9SqliteConnection) => Promise<(() => Promise<void>) | null>): Promise<void> {\n await store.writeLock.run(async () => {\n const connection = store.writer();\n if (chunk.file) {\n // A snapshot-file segment goes to its place in the staged file, not into g9_stage (ADR-0072).\n await stageFileSegment(store, runId, chunk);\n return;\n }\n const restore = await durability(connection);\n try {\n // One transaction, one bridge call (a chunk used to cost ~7: PRAGMA reads, begin, insert, commit — LES-0056).\n await connection.runAtomic([\n ...statementsOf('INSERT OR REPLACE INTO g9_stage (run_id, seq, subscription_key, row_count, continuation_json, payload) VALUES ($r, $s, $k, $n, $c, $p)', {\n $r: runId,\n $s: chunk.sequence,\n $k: chunk.subscriptionKey ?? null,\n $n: chunk.rowCount,\n $c: chunk.continuation ? persistedJson(chunk.continuation) : null,\n $p: chunk.payload ?? null,\n }),\n ...(chunk.isFinal ? statementsOf('UPDATE g9_stage_runs SET complete = 1 WHERE run_id = $r', { $r: runId }) : []),\n ]);\n } finally {\n if (restore) await restore();\n }\n });\n}\n\nexport async function getResumePoint(store: StoreInternals, runId: string): Promise<G9ResumePoint> {\n return store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n const flag = await connection.scalar('SELECT complete FROM g9_stage_runs WHERE run_id = $r', { $r: runId });\n const complete = typeof flag === 'number' && flag !== 0;\n // A resumed stream starts at the last durable checkpoint of a snapshot file.\n forgetPendingSegments(store, runId);\n let continuation = null;\n let lastSequence = -1;\n if (!complete) {\n const rows = await connection.query('SELECT seq, continuation_json FROM g9_stage WHERE run_id = $r AND continuation_json IS NOT NULL ORDER BY seq DESC LIMIT 1', { $r: runId });\n const r = rows[0];\n if (r) {\n lastSequence = asNumber(r[0]);\n continuation = readContinuation(parseJson(asString(r[1])));\n }\n await connection.exec('DELETE FROM g9_stage WHERE run_id = $r AND seq > $s', { $r: runId, $s: lastSequence });\n }\n const totals = (\n await connection.query(\n 'SELECT coalesce(sum(row_count), 0), coalesce(sum(length(payload)), 0) + (SELECT coalesce(sum(bytes_received), 0) FROM g9_stage_files WHERE run_id = $r) ' +\n 'FROM g9_stage WHERE run_id = $r',\n { $r: runId },\n )\n )[0];\n return { continuation, stagedRows: totals ? asNumber(totals[0]) : 0, stagedBytes: totals ? asNumber(totals[1]) : 0, complete };\n }),\n );\n}\n\nexport async function discardStagedPull(store: StoreInternals, runId: string): Promise<void> {\n let files: string[] = [];\n await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n files = await takeStagedFiles(connection, '$r', { $r: runId });\n await connection.exec('DELETE FROM g9_stage WHERE run_id = $r; DELETE FROM g9_stage_runs WHERE run_id = $r', { $r: runId });\n }),\n );\n forgetPendingSegments(store, runId);\n await deleteFiles(store, files);\n}\n\n// ================================================================ reconciliation reads\n\nfunction computedColumns(local: LocalTable, table: G9DtNegotiatedTable): string[] {\n return table.computedColumns.filter((c) => local.model.indexOf(c) >= 0);\n}\n\nasync function memberRows(connection: G9SqliteConnection, local: LocalTable, subscriptionKey: string): Promise<(readonly G9SqlValue[])[] | null> {\n const records = await readSubscriptions(connection, subscriptionKey);\n const record = records[0];\n if (!record) return null;\n return record.ephemeral\n ? connection.query(\n 'SELECT r.pk, r.server_ver, r.dirty FROM g9_rows r WHERE r.tid = $t AND r.deleted = 0 AND r.dirty <> 2 ' +\n 'AND EXISTS (SELECT 1 FROM g9_ephemeral_rows e WHERE e.sub_key = $k AND e.tid = r.tid AND e.pk = r.pk)',\n { $t: local.tid, $k: subscriptionKey },\n )\n : connection.query('SELECT r.pk, r.server_ver, r.dirty FROM g9_rows r WHERE r.tid = $t AND r.deleted = 0 AND r.dirty <> 2 AND (r.subs & $b) <> 0', {\n $t: local.tid,\n $b: bit(record.slot),\n });\n}\n\nexport async function computeDigest(store: StoreInternals, subscriptionKey: string, table: G9DtNegotiatedTable): Promise<G9DtTableDigest> {\n store.ensureInitialized();\n const local = findByServerName(store, table.name);\n if (!local) throw new RangeError(`'${table.name}' is not a synced table.`);\n const computed = computedColumns(local, table);\n const digests: G9Long[] = [];\n const counts: number[] = [];\n for (let i = 0; i < 256; i++) {\n digests.push(G9Long.ZERO);\n counts.push(0);\n }\n const connection = store.reader();\n if (computed.length === 0) {\n for (const r of (await memberRows(connection, local, subscriptionKey)) ?? []) {\n const key = asString(r[0]);\n const bucket = G9SyncDigest.getBucket(key);\n counts[bucket] = (counts[bucket] as number) + 1;\n digests[bucket] = (digests[bucket] as G9Long).xor(G9SyncDigest.getRowHash(key, asLong(r[1])));\n }\n } else {\n for (const entry of await readMemberEntries(connection, local, subscriptionKey, computed)) {\n counts[entry.bucket] = (counts[entry.bucket] as number) + 1;\n digests[entry.bucket] = (digests[entry.bucket] as G9Long).xor(entry.hash);\n }\n }\n return { tableId: table.tableId, computedColumns: computed, digests, counts };\n}\n\nexport async function readLocalEntries(\n store: StoreInternals,\n subscriptionKey: string,\n table: G9DtNegotiatedTable,\n buckets: ReadonlySet<number>,\n serverKeys: ReadonlySet<string>,\n): Promise<G9LocalRowEntry[]> {\n store.ensureInitialized();\n const local = findByServerName(store, table.name);\n if (!local) throw new RangeError(`'${table.name}' is not a synced table.`);\n const computed = computedColumns(local, table);\n const entries = new Map<string, G9LocalRowEntry>();\n const connection = store.reader();\n if (computed.length === 0) {\n for (const r of (await memberRows(connection, local, subscriptionKey)) ?? []) {\n const key = asString(r[0]);\n const bucket = G9SyncDigest.getBucket(key);\n if (!buckets.has(bucket)) continue;\n const version = asLong(r[1]);\n entries.set(key, { key, bucket, version: version.toNumber(), hash: G9SyncDigest.getRowHash(key, version), member: true, dirty: asNumber(r[2]) !== 0 });\n }\n } else {\n for (const entry of await readMemberEntries(connection, local, subscriptionKey, computed)) {\n if (buckets.has(entry.bucket)) entries.set(entry.key, entry);\n }\n }\n const missing: string[] = [];\n serverKeys.forEach((key) => {\n if (!entries.has(key)) missing.push(key);\n });\n for (let i = 0; i < missing.length; i += 5000) {\n const json = JSON.stringify(missing.slice(i, i + 5000));\n for (const entry of await readEntries(connection, local, computed, 'r.deleted = 0 AND r.pk IN (SELECT value FROM json_each($keys))', false, { $keys: json })) {\n entries.set(entry.key, entry);\n }\n }\n return Array.from(entries.values());\n}\n\nasync function readMemberEntries(connection: G9SqliteConnection, local: LocalTable, subscriptionKey: string, computed: string[]): Promise<G9LocalRowEntry[]> {\n const record = (await readSubscriptions(connection, subscriptionKey))[0];\n if (!record) return [];\n return record.ephemeral\n ? readEntries(\n connection,\n local,\n computed,\n 'r.deleted = 0 AND r.dirty <> 2 AND EXISTS (SELECT 1 FROM g9_ephemeral_rows e WHERE e.sub_key = $sub AND e.tid = r.tid AND e.pk = r.pk)',\n true,\n { $sub: subscriptionKey },\n )\n : readEntries(connection, local, computed, 'r.deleted = 0 AND r.dirty <> 2 AND (r.subs & $bit) <> 0', true, { $bit: bit(record.slot) });\n}\n\nasync function readEntries(\n connection: G9SqliteConnection,\n local: LocalTable,\n computed: string[],\n where: string,\n member: boolean,\n params: { [name: string]: G9SqlValue | G9Long },\n): Promise<G9LocalRowEntry[]> {\n const computedTypes = computed.map((name) => (local.model.columns[local.model.indexOf(name)] as { type: number }).type);\n // typeof() next to each computed value: JavaScript cannot tell an INTEGER 5 from a REAL 5.0, and their canonical texts\n // can differ (1E+15 vs 1000000000000000).\n const select =\n 'SELECT r.pk, r.server_ver, r.dirty' +\n computed.map((c) => ', b.' + quote(c) + ', typeof(b.' + quote(c) + ')').join('') +\n ' FROM g9_rows r' +\n (computed.length === 0 ? '' : ` LEFT JOIN ${local.quoted} b ON b.${local.keyQuoted} = r.pk`) +\n ' WHERE r.tid = $tid AND ' +\n where;\n const rows = await connection.query(select, { $tid: local.tid, ...params });\n return rows.map((r) => {\n const key = asString(r[0]);\n const version = asLong(r[1]);\n const values: (string | null)[] = [];\n for (let i = 0; i < computed.length; i++) {\n const value = r[3 + i * 2] as G9SqlValue;\n const storage = asString(r[4 + i * 2]);\n values.push(value === null ? null : G9SyncDigest.canonicalText(computedTypes[i] as number, value, storage === 'real' ? 'real' : storage === 'integer' ? 'integer' : undefined));\n }\n return { key, bucket: G9SyncDigest.getBucket(key), version: version.toNumber(), hash: G9SyncDigest.getRowHash(key, version, values), member, dirty: asNumber(r[2]) !== 0 };\n });\n}\n\n// ================================================================ queries\n\nexport async function getPendingSummary(store: StoreInternals): Promise<G9PendingSummary> {\n const connection = store.reader();\n const tables: G9PendingTable[] = (\n await connection.query(\n 'SELECT t.local_name, ' +\n 'sum(CASE WHEN r.dirty = 1 AND r.rejected = 0 THEN 1 ELSE 0 END), ' +\n 'sum(CASE WHEN r.dirty = 2 AND r.rejected = 0 THEN 1 ELSE 0 END), ' +\n 'sum(CASE WHEN r.rejected = 1 THEN 1 ELSE 0 END) ' +\n 'FROM g9_rows r JOIN g9_tables t ON t.tid = r.tid WHERE r.dirty <> 0 GROUP BY t.local_name ORDER BY t.local_name',\n )\n ).map((r) => ({ localTable: asString(r[0]), upserts: asNumber(r[1]), deletes: asNumber(r[2]), rejected: asNumber(r[3]) }));\n const pendingCommands = asNumber(await connection.scalar('SELECT count(*) FROM g9_commands WHERE state = 0'));\n let totalRows = 0;\n let rejectedRows = 0;\n for (const t of tables) {\n totalRows += t.upserts + t.deletes;\n rejectedRows += t.rejected;\n }\n return { tables, totalRows, rejectedRows, pendingCommands };\n}\n\nexport async function readChangeFeed(store: StoreInternals, localTable: string, afterSequence: number, limit: number): Promise<G9ChangeFeedEntry[]> {\n store.ensureInitialized();\n const table = getLocal(store, localTable);\n const rows = await store\n .reader()\n .query('SELECT local_seq, pk, (deleted = 1 OR dirty = 2), dirty <> 0 FROM g9_rows WHERE tid = $t AND local_seq > $a ORDER BY local_seq LIMIT $l', {\n $t: table.tid,\n $a: afterSequence,\n $l: Math.max(1, limit),\n });\n return rows.map((r) => ({ sequence: asNumber(r[0]), key: asString(r[1]), deleted: asNumber(r[2]) !== 0, localPending: asNumber(r[3]) !== 0 }));\n}\n\nexport async function getChangeSequence(store: StoreInternals): Promise<number> {\n store.ensureInitialized();\n return asNumber(await store.reader().scalar('SELECT seq FROM g9_clock WHERE id = 1'));\n}\n\nexport async function getRejections(store: StoreInternals): Promise<G9SyncRejection[]> {\n const rows = await store\n .reader()\n .query(\n 'SELECT t.local_name, j.pk, j.code, j.message, j.sql_state, j.constraint_name, j.column_name, j.details, j.at_utc ' +\n 'FROM g9_rejections j JOIN g9_tables t ON t.tid = j.tid JOIN g9_rows r ON r.tid = j.tid AND r.pk = j.pk WHERE r.rejected = 1 ORDER BY j.at_utc',\n );\n return rows.map((r) => ({\n localTable: asString(r[0]),\n key: asString(r[1]),\n code: asString(r[2]),\n message: asOptionalString(r[3]),\n sqlState: asOptionalString(r[4]),\n constraint: asOptionalString(r[5]),\n column: asOptionalString(r[6]),\n details: asOptionalString(r[7]),\n atUtcMs: asNumber(r[8]),\n }));\n}\n\nexport async function retryRejected(store: StoreInternals, localTable: string | null, key: string | null): Promise<number> {\n store.ensureInitialized();\n let where = 'rejected = 1';\n const params: { [name: string]: G9SqlValue } = {};\n if (localTable !== null) {\n where += ' AND tid = $t';\n params.$t = getLocal(store, localTable).tid;\n }\n if (key !== null) {\n where += ' AND pk = $pk';\n params.$pk = key;\n }\n return store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n await connection.exec('DELETE FROM g9_rejections WHERE (tid, pk) IN (SELECT tid, pk FROM g9_rows WHERE ' + where + ')', params);\n return connection.exec('UPDATE g9_rows SET rejected = 0 WHERE ' + where, params);\n }),\n );\n}\n\nexport async function markDirty(store: StoreInternals, localTable: string, keys: readonly string[]): Promise<number> {\n store.ensureInitialized();\n const table = getLocal(store, localTable);\n const normalized = keys.map((k) => G9SyncKey.tryNormalize(table.model.keyType, k) ?? k);\n return store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n let marked = 0;\n for (let i = 0; i < normalized.length; i += 5000) {\n const json = JSON.stringify(normalized.slice(i, i + 5000));\n marked += await markPending(store.writer(), table, 'SELECT value AS pk FROM json_each($keys)', { $keys: json }, 'dirty = 1, dirty_mask = ' + literal(allColumnsMask(table.model.columns.length)));\n }\n return marked;\n }),\n );\n}\n\n/** Marks the rows `keysSql` selects as pending, giving EACH its own local sequence (LES-0039). */\nexport async function markPending(connection: G9SqliteConnection, table: LocalTable, keysSql: string, params: { [name: string]: G9SqlValue }, set: string): Promise<number> {\n await connection.exec('CREATE TEMP TABLE IF NOT EXISTS g9_mark (pk TEXT NOT NULL PRIMARY KEY, n INTEGER NOT NULL); DELETE FROM temp.g9_mark;');\n const count = await connection.exec(`INSERT INTO temp.g9_mark (pk, n) SELECT pk, row_number() OVER (ORDER BY pk) FROM (SELECT DISTINCT pk FROM (${keysSql}) WHERE pk IS NOT NULL)`, params);\n if (count === 0) return 0;\n const first = asNumber(await connection.scalar('SELECT seq FROM g9_clock WHERE id = 1'));\n await connection.exec('INSERT OR IGNORE INTO g9_rows (tid, pk) SELECT $t, pk FROM temp.g9_mark', { $t: table.tid });\n const marked = await connection.exec(\n `UPDATE g9_rows SET ${set}, local_seq = $first + m.n, hlc_ms = ${NOW_MS}, rejected = 0, deleted = 0 FROM temp.g9_mark AS m WHERE g9_rows.tid = $t AND g9_rows.pk = m.pk`,\n { $first: first, $t: table.tid },\n );\n await connection.exec('UPDATE g9_clock SET seq = seq + $n WHERE id = 1; DELETE FROM temp.g9_mark;', { $n: count });\n return marked;\n}\n\nexport async function adoptExistingRows(store: StoreInternals): Promise<number> {\n store.ensureInitialized();\n return store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n let adopted = 0;\n for (const table of store.byLocal.values()) {\n adopted += await store.writer().exec(`INSERT OR IGNORE INTO g9_rows (tid, pk) SELECT $t, ${keyExpression(table.model, 'b')} FROM ${table.quoted} AS b`, { $t: table.tid });\n }\n return adopted;\n }),\n );\n}\n\n// ================================================================ reports and statistics\n\n/** The run report as .NET's G9SyncClientJsonContext writes it (camelCase, nulls omitted, DateTime/Guid in .NET text). */\nfunction reportToJson(report: G9SyncRunReport): string {\n const startedTicks = ticksOf(1970, 1, 1, 0, 0, 0, 0).add(G9Long.fromNumber(Math.floor(report.startedUtcMs)).multiplySmall(10000));\n return persistedJson({\n runId: report.runId,\n startedUtc: formatTicks(startedTicks) + 'Z',\n durationMs: report.durationMs,\n outcome: report.outcome,\n priority: report.priority,\n errorCode: report.errorCode,\n errorMessage: report.errorMessage,\n pushed: report.pushed,\n rejected: report.rejected,\n conflicts: report.conflicts,\n downloaded: report.downloaded,\n applied: report.applied,\n downloadedBytes: report.downloadedBytes,\n subscriptions: report.subscriptions,\n phaseMs: report.phaseMs,\n triggersSkipped: report.triggersSkipped,\n foreignTriggers: report.foreignTriggers,\n applyTransactions: report.applyTransactions,\n indexesDeferred: report.indexesDeferred,\n indexRebuildMs: report.indexRebuildMs,\n liveIndexReasons: report.liveIndexReasons,\n unchangedRows: report.unchangedRows,\n });\n}\n\nfunction reportFromJson(json: string): G9SyncRunReport | null {\n const v = parseJson(json) as { [key: string]: unknown } | null;\n if (!v || typeof v !== 'object') return null;\n const num = (x: unknown) => (typeof x === 'number' ? x : x instanceof G9Long ? x.toNumber() : 0);\n const started = typeof v.startedUtc === 'string' ? Date.parse(v.startedUtc.replace(/(\\.\\d{3})\\d+/, '$1')) : NaN;\n return {\n runId: typeof v.runId === 'string' ? v.runId : '',\n startedUtcMs: isNaN(started) ? 0 : started,\n durationMs: num(v.durationMs),\n outcome: typeof v.outcome === 'string' ? v.outcome : '',\n priority: typeof v.priority === 'string' ? v.priority : '',\n errorCode: typeof v.errorCode === 'string' ? v.errorCode : null,\n errorMessage: typeof v.errorMessage === 'string' ? v.errorMessage : null,\n pushed: num(v.pushed),\n rejected: num(v.rejected),\n conflicts: num(v.conflicts),\n downloaded: num(v.downloaded),\n applied: num(v.applied),\n downloadedBytes: num(v.downloadedBytes),\n subscriptions: Array.isArray(v.subscriptions) ? v.subscriptions.map(String) : [],\n phaseMs: (v.phaseMs as { [phase: string]: number }) ?? {},\n triggersSkipped: typeof v.triggersSkipped === 'boolean' ? v.triggersSkipped : null,\n foreignTriggers: Array.isArray(v.foreignTriggers) ? v.foreignTriggers.map(String) : [],\n applyTransactions: num(v.applyTransactions),\n indexesDeferred: num(v.indexesDeferred),\n indexRebuildMs: num(v.indexRebuildMs),\n liveIndexReasons: (v.liveIndexReasons as { [table: string]: string }) ?? {},\n unchangedRows: num(v.unchangedRows),\n };\n}\n\nexport async function saveRunReport(store: StoreInternals, report: G9SyncRunReport, keep: number): Promise<void> {\n const runId = tryNormalizeGuid(report.runId) ? guidToN(report.runId) : report.runId;\n await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n await connection.exec('INSERT OR REPLACE INTO g9_runs (run_id, started_utc, report_json) VALUES ($r, $s, $j)', { $r: runId, $s: report.startedUtcMs, $j: reportToJson(report) });\n await connection.exec('DELETE FROM g9_runs WHERE run_id NOT IN (SELECT run_id FROM g9_runs ORDER BY started_utc DESC LIMIT $k)', { $k: Math.max(1, keep) });\n }),\n );\n}\n\nexport async function getRecentRunReports(store: StoreInternals, count: number): Promise<G9SyncRunReport[]> {\n const rows = await store.reader().query('SELECT report_json FROM g9_runs ORDER BY started_utc DESC LIMIT $c', { $c: Math.max(1, count) });\n const reports: G9SyncRunReport[] = [];\n for (const r of rows) {\n const report = reportFromJson(asString(r[0]));\n if (report) reports.push(report);\n }\n return reports;\n}\n\nexport async function getPhaseStatistics(store: StoreInternals): Promise<{ [key: string]: number }> {\n const statistics: { [key: string]: number } = {};\n for (const r of await store.reader().query('SELECT key, value FROM g9_stats')) statistics[asString(r[0])] = asNumber(r[1]);\n return statistics;\n}\n\nexport async function recordPhaseStatistics(store: StoreInternals, samples: { [key: string]: number }): Promise<void> {\n await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n for (const key of Object.keys(samples)) {\n const value = samples[key] as number;\n if (!isFinite(value) || value < 0) continue;\n await store\n .writer()\n .exec(\n 'INSERT INTO g9_stats (key, value, samples) VALUES ($k, $v, 1) ON CONFLICT(key) DO UPDATE SET value = value * 0.7 + excluded.value * 0.3, samples = samples + 1',\n { $k: key, $v: value },\n );\n }\n }),\n );\n}\n\nexport async function purgeDeletedFeed(store: StoreInternals, keep: number): Promise<number> {\n return store.writeLock.run(async () => {\n const connection = store.writer();\n const threshold = await connection.scalar('SELECT local_seq FROM g9_rows WHERE deleted = 1 ORDER BY local_seq DESC LIMIT 1 OFFSET $k', { $k: Math.max(0, keep) });\n if (threshold === null) return 0;\n return connection.transaction('immediate', async () => {\n // The floor moves in the same transaction as the purge (ADR-0059).\n const purgedUpTo = await connection.scalar('SELECT max(local_seq) FROM g9_rows WHERE deleted = 1 AND dirty = 0 AND local_seq < $x', { $x: threshold });\n if (purgedUpTo === null) return 0;\n const purged = await connection.exec('DELETE FROM g9_rows WHERE deleted = 1 AND dirty = 0 AND local_seq < $x', { $x: threshold });\n await connection.exec(\n \"INSERT INTO g9_meta (key, value) VALUES ('feed_floor_seq', $f) ON CONFLICT(key) DO UPDATE SET value = excluded.value WHERE CAST(value AS INTEGER) < CAST(excluded.value AS INTEGER)\",\n { $f: asLong(purgedUpTo).toString() },\n );\n return purged;\n });\n });\n}\n\nexport async function getChangeFeedFloor(store: StoreInternals): Promise<number> {\n store.ensureInitialized();\n const text = await store.reader().scalar(\"SELECT value FROM g9_meta WHERE key = 'feed_floor_seq'\");\n if (typeof text !== 'string' || !/^[+-]?\\d+$/.test(text.trim())) return 0;\n return Number(text.trim());\n}\n\nexport { ticksToUnixMs };\n"]}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/sqlite/query.ts"],"names":[],"mappings":"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","sourcesContent":["// Twin of G9SyncData.Client.Sqlite/G9CSqliteSyncStore.Query.cs: staging, reconciliation reads, pending counts, change\n// feed, rejections, run reports and statistics.\nimport { G9SyncDigest } from '../abstractions/digest.js';\nimport { G9SyncKey } from '../abstractions/key.js';\nimport { G9Long, parseJson } from '../abstractions/long.js';\nimport { guidToN, tryNormalizeGuid } from '../abstractions/guid.js';\nimport type {\n G9ChangeFeedEntry,\n G9ChangeFeedKeyFilter,\n G9LocalRowEntry,\n G9PendingSummary,\n G9PendingTable,\n G9ResumePoint,\n G9StagedPull,\n G9SyncRejection,\n G9SyncRunReport,\n} from '../client/storeTypes.js';\nimport { validateChangeFeedKeyFilter } from '../client/storeTypes.js';\nimport type { G9DtNegotiatedTable, G9DtSyncChunk, G9DtTableDigest } from '../protocol/dtos.js';\nimport { readContinuation, readPullPlan } from '../protocol/wire.js';\nimport { asLong, asNumber, asOptionalString, asString, statementsOf, type G9SqliteConnection } from './connection.js';\nimport type { G9SqlValue } from './driver.js';\nimport { findByServerName, getLocal, persistedJson, readSubscriptions, type LocalTable, type StoreInternals } from './internals.js';\nimport { allColumnsMask, bit, keyExpression, literal, NOW_MS, quote } from './sql.js';\nimport { deleteFiles, forgetPendingSegments, persistedPlan, stageFileSegment, takeStagedFiles } from './snapshotFiles.js';\nimport { formatTicks, ticksOf, ticksToUnixMs } from './values.js';\n\n// ================================================================ staging\n\nexport async function readStagedRun(connection: G9SqliteConnection, runId: string): Promise<G9StagedPull | null> {\n const rows = await connection.query('SELECT plan_json, backfills_json, created_utc, generation, stage_seq, from_cursors_json FROM g9_stage_runs WHERE run_id = $r', {\n $r: runId,\n });\n const r = rows[0];\n if (!r) return null;\n const backfills = r[1] === null ? [] : (parseJson(asString(r[1])) as { tableId?: number; columns?: string[] }[]);\n const fromCursors = r[5] === null ? {} : (JSON.parse(asString(r[5])) as { [key: string]: string | null });\n return {\n runId,\n plan: readPullPlan(parseJson(asString(r[0]))),\n backfills: (Array.isArray(backfills) ? backfills : []).map((b) => ({ tableId: Number(b.tableId ?? 0), columns: Array.isArray(b.columns) ? b.columns.map(String) : [] })),\n createdUtcMs: asNumber(r[2]),\n generation: asOptionalString(r[3]),\n stageSequence: asNumber(r[4]),\n plannedFromCursors: fromCursors ?? {},\n };\n}\n\nexport async function getStagedPull(store: StoreInternals, generation: string | null): Promise<G9StagedPull | null> {\n const connection = store.reader();\n const runId =\n generation === null\n ? await connection.scalar('SELECT run_id FROM g9_stage_runs ORDER BY created_utc DESC LIMIT 1')\n : await connection.scalar('SELECT run_id FROM g9_stage_runs WHERE generation = $g ORDER BY created_utc DESC LIMIT 1', { $g: generation });\n return runId === null ? null : readStagedRun(connection, asString(runId));\n}\n\nexport async function pruneStagedPulls(store: StoreInternals, olderThanUtcMs: number, maxBytes: number, keepGeneration: string | null): Promise<number> {\n let files: string[] = [];\n const pruned = await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n const doomed = (await connection.query('SELECT run_id FROM g9_stage_runs WHERE created_utc < $c', { $c: olderThanUtcMs })).map((r) => asString(r[0]));\n // The byte cap is for the stages nobody is about to resume: newest first, past the cap they go (ADR-0060).\n let kept = 0;\n for (const r of await connection.query(\n 'SELECT r.run_id, (SELECT coalesce(sum(length(payload)), 0) FROM g9_stage s WHERE s.run_id = r.run_id) ' +\n '+ (SELECT coalesce(sum(bytes_received), 0) FROM g9_stage_files f WHERE f.run_id = r.run_id) FROM g9_stage_runs r ' +\n 'WHERE r.created_utc >= $c AND (r.generation IS NULL OR r.generation <> $g) ORDER BY r.created_utc DESC',\n { $c: olderThanUtcMs, $g: keepGeneration ?? '' },\n )) {\n kept += asNumber(r[1]);\n if (kept > Math.max(0, maxBytes)) doomed.push(asString(r[0]));\n }\n for (const runId of doomed) {\n files = files.concat(await takeStagedFiles(connection, '$r', { $r: runId }));\n await connection.exec('DELETE FROM g9_stage WHERE run_id = $r; DELETE FROM g9_stage_runs WHERE run_id = $r', { $r: runId });\n }\n return doomed.length;\n }),\n );\n await deleteFiles(store, files);\n return pruned;\n}\n\nexport async function discardAllStagedPulls(store: StoreInternals): Promise<number> {\n let files: string[] = [];\n const count = await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n const count = asNumber(await connection.scalar('SELECT count(*) FROM g9_stage_runs'));\n files = await takeStagedFiles(connection, 'SELECT run_id FROM g9_stage_files');\n await connection.exec('DELETE FROM g9_stage; DELETE FROM g9_stage_runs;');\n return count;\n }),\n );\n await deleteFiles(store, files);\n return count;\n}\n\nexport async function beginStagedPull(store: StoreInternals, pull: G9StagedPull): Promise<void> {\n let replaced: string[] = [];\n await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n // Only the stage this one replaces goes: the same generation (ADR-0060).\n replaced = await takeStagedFiles(connection, 'SELECT run_id FROM g9_stage_runs WHERE generation IS $g', { $g: pull.generation });\n await connection.exec(\n 'DELETE FROM g9_stage WHERE run_id IN (SELECT run_id FROM g9_stage_runs WHERE generation IS $g); DELETE FROM g9_stage_runs WHERE generation IS $g',\n { $g: pull.generation },\n );\n // Read inside the transaction that inserts the run: rows written after it are newer than the stage (ADR-0046).\n const stageSequence = asNumber(await connection.scalar('SELECT seq FROM g9_clock WHERE id = 1'));\n const fromCursors: { [key: string]: string | null } = {};\n for (const key of Object.keys(pull.plannedFromCursors)) fromCursors[key] = pull.plannedFromCursors[key] ?? null;\n await connection.exec(\n 'INSERT INTO g9_stage_runs (run_id, plan_json, backfills_json, created_utc, complete, generation, stage_seq, from_cursors_json) VALUES ($r, $p, $b, $c, 0, $g, $s, $f)',\n {\n $r: pull.runId,\n $p: persistedPlan(pull.plan),\n $b: persistedJson(pull.backfills),\n $c: pull.createdUtcMs,\n $g: pull.generation,\n $s: stageSequence,\n // Dictionary<string, string?>: a null value stays (DefaultIgnoreCondition only drops null PROPERTIES).\n $f: JSON.stringify(fromCursors),\n },\n );\n }),\n );\n await deleteFiles(store, replaced);\n}\n\nexport async function stageChunk(store: StoreInternals, runId: string, chunk: G9DtSyncChunk, durability: (connection: G9SqliteConnection) => Promise<(() => Promise<void>) | null>): Promise<void> {\n await store.writeLock.run(async () => {\n const connection = store.writer();\n if (chunk.file) {\n // A snapshot-file segment goes to its place in the staged file, not into g9_stage (ADR-0072).\n await stageFileSegment(store, runId, chunk);\n return;\n }\n const restore = await durability(connection);\n try {\n // One transaction, one bridge call (a chunk used to cost ~7: PRAGMA reads, begin, insert, commit — LES-0056).\n await connection.runAtomic([\n ...statementsOf('INSERT OR REPLACE INTO g9_stage (run_id, seq, subscription_key, row_count, continuation_json, payload) VALUES ($r, $s, $k, $n, $c, $p)', {\n $r: runId,\n $s: chunk.sequence,\n $k: chunk.subscriptionKey ?? null,\n $n: chunk.rowCount,\n $c: chunk.continuation ? persistedJson(chunk.continuation) : null,\n $p: chunk.payload ?? null,\n }),\n ...(chunk.isFinal ? statementsOf('UPDATE g9_stage_runs SET complete = 1 WHERE run_id = $r', { $r: runId }) : []),\n ]);\n } finally {\n if (restore) await restore();\n }\n });\n}\n\nexport async function getResumePoint(store: StoreInternals, runId: string): Promise<G9ResumePoint> {\n return store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n const flag = await connection.scalar('SELECT complete FROM g9_stage_runs WHERE run_id = $r', { $r: runId });\n const complete = typeof flag === 'number' && flag !== 0;\n // A resumed stream starts at the last durable checkpoint of a snapshot file.\n forgetPendingSegments(store, runId);\n let continuation = null;\n let lastSequence = -1;\n if (!complete) {\n const rows = await connection.query('SELECT seq, continuation_json FROM g9_stage WHERE run_id = $r AND continuation_json IS NOT NULL ORDER BY seq DESC LIMIT 1', { $r: runId });\n const r = rows[0];\n if (r) {\n lastSequence = asNumber(r[0]);\n continuation = readContinuation(parseJson(asString(r[1])));\n }\n await connection.exec('DELETE FROM g9_stage WHERE run_id = $r AND seq > $s', { $r: runId, $s: lastSequence });\n }\n const totals = (\n await connection.query(\n 'SELECT coalesce(sum(row_count), 0), coalesce(sum(length(payload)), 0) + (SELECT coalesce(sum(bytes_received), 0) FROM g9_stage_files WHERE run_id = $r) ' +\n 'FROM g9_stage WHERE run_id = $r',\n { $r: runId },\n )\n )[0];\n return { continuation, stagedRows: totals ? asNumber(totals[0]) : 0, stagedBytes: totals ? asNumber(totals[1]) : 0, complete };\n }),\n );\n}\n\nexport async function discardStagedPull(store: StoreInternals, runId: string): Promise<void> {\n let files: string[] = [];\n await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n files = await takeStagedFiles(connection, '$r', { $r: runId });\n await connection.exec('DELETE FROM g9_stage WHERE run_id = $r; DELETE FROM g9_stage_runs WHERE run_id = $r', { $r: runId });\n }),\n );\n forgetPendingSegments(store, runId);\n await deleteFiles(store, files);\n}\n\n// ================================================================ reconciliation reads\n\nfunction computedColumns(local: LocalTable, table: G9DtNegotiatedTable): string[] {\n return table.computedColumns.filter((c) => local.model.indexOf(c) >= 0);\n}\n\nasync function memberRows(connection: G9SqliteConnection, local: LocalTable, subscriptionKey: string): Promise<(readonly G9SqlValue[])[] | null> {\n const records = await readSubscriptions(connection, subscriptionKey);\n const record = records[0];\n if (!record) return null;\n return record.ephemeral\n ? connection.query(\n 'SELECT r.pk, r.server_ver, r.dirty FROM g9_rows r WHERE r.tid = $t AND r.deleted = 0 AND r.dirty <> 2 ' +\n 'AND EXISTS (SELECT 1 FROM g9_ephemeral_rows e WHERE e.sub_key = $k AND e.tid = r.tid AND e.pk = r.pk)',\n { $t: local.tid, $k: subscriptionKey },\n )\n : connection.query('SELECT r.pk, r.server_ver, r.dirty FROM g9_rows r WHERE r.tid = $t AND r.deleted = 0 AND r.dirty <> 2 AND (r.subs & $b) <> 0', {\n $t: local.tid,\n $b: bit(record.slot),\n });\n}\n\nexport async function computeDigest(store: StoreInternals, subscriptionKey: string, table: G9DtNegotiatedTable): Promise<G9DtTableDigest> {\n store.ensureInitialized();\n const local = findByServerName(store, table.name);\n if (!local) throw new RangeError(`'${table.name}' is not a synced table.`);\n const computed = computedColumns(local, table);\n const digests: G9Long[] = [];\n const counts: number[] = [];\n for (let i = 0; i < 256; i++) {\n digests.push(G9Long.ZERO);\n counts.push(0);\n }\n const connection = store.reader();\n if (computed.length === 0) {\n for (const r of (await memberRows(connection, local, subscriptionKey)) ?? []) {\n const key = asString(r[0]);\n const bucket = G9SyncDigest.getBucket(key);\n counts[bucket] = (counts[bucket] as number) + 1;\n digests[bucket] = (digests[bucket] as G9Long).xor(G9SyncDigest.getRowHash(key, asLong(r[1])));\n }\n } else {\n for (const entry of await readMemberEntries(connection, local, subscriptionKey, computed)) {\n counts[entry.bucket] = (counts[entry.bucket] as number) + 1;\n digests[entry.bucket] = (digests[entry.bucket] as G9Long).xor(entry.hash);\n }\n }\n return { tableId: table.tableId, computedColumns: computed, digests, counts };\n}\n\nexport async function readLocalEntries(\n store: StoreInternals,\n subscriptionKey: string,\n table: G9DtNegotiatedTable,\n buckets: ReadonlySet<number>,\n serverKeys: ReadonlySet<string>,\n): Promise<G9LocalRowEntry[]> {\n store.ensureInitialized();\n const local = findByServerName(store, table.name);\n if (!local) throw new RangeError(`'${table.name}' is not a synced table.`);\n const computed = computedColumns(local, table);\n const entries = new Map<string, G9LocalRowEntry>();\n const connection = store.reader();\n if (computed.length === 0) {\n for (const r of (await memberRows(connection, local, subscriptionKey)) ?? []) {\n const key = asString(r[0]);\n const bucket = G9SyncDigest.getBucket(key);\n if (!buckets.has(bucket)) continue;\n const version = asLong(r[1]);\n entries.set(key, { key, bucket, version: version.toNumber(), hash: G9SyncDigest.getRowHash(key, version), member: true, dirty: asNumber(r[2]) !== 0 });\n }\n } else {\n for (const entry of await readMemberEntries(connection, local, subscriptionKey, computed)) {\n if (buckets.has(entry.bucket)) entries.set(entry.key, entry);\n }\n }\n const missing: string[] = [];\n serverKeys.forEach((key) => {\n if (!entries.has(key)) missing.push(key);\n });\n for (let i = 0; i < missing.length; i += 5000) {\n const json = JSON.stringify(missing.slice(i, i + 5000));\n for (const entry of await readEntries(connection, local, computed, 'r.deleted = 0 AND r.pk IN (SELECT value FROM json_each($keys))', false, { $keys: json })) {\n entries.set(entry.key, entry);\n }\n }\n return Array.from(entries.values());\n}\n\nasync function readMemberEntries(connection: G9SqliteConnection, local: LocalTable, subscriptionKey: string, computed: string[]): Promise<G9LocalRowEntry[]> {\n const record = (await readSubscriptions(connection, subscriptionKey))[0];\n if (!record) return [];\n return record.ephemeral\n ? readEntries(\n connection,\n local,\n computed,\n 'r.deleted = 0 AND r.dirty <> 2 AND EXISTS (SELECT 1 FROM g9_ephemeral_rows e WHERE e.sub_key = $sub AND e.tid = r.tid AND e.pk = r.pk)',\n true,\n { $sub: subscriptionKey },\n )\n : readEntries(connection, local, computed, 'r.deleted = 0 AND r.dirty <> 2 AND (r.subs & $bit) <> 0', true, { $bit: bit(record.slot) });\n}\n\nasync function readEntries(\n connection: G9SqliteConnection,\n local: LocalTable,\n computed: string[],\n where: string,\n member: boolean,\n params: { [name: string]: G9SqlValue | G9Long },\n): Promise<G9LocalRowEntry[]> {\n const computedTypes = computed.map((name) => (local.model.columns[local.model.indexOf(name)] as { type: number }).type);\n // typeof() next to each computed value: JavaScript cannot tell an INTEGER 5 from a REAL 5.0, and their canonical texts\n // can differ (1E+15 vs 1000000000000000).\n const select =\n 'SELECT r.pk, r.server_ver, r.dirty' +\n computed.map((c) => ', b.' + quote(c) + ', typeof(b.' + quote(c) + ')').join('') +\n ' FROM g9_rows r' +\n (computed.length === 0 ? '' : ` LEFT JOIN ${local.quoted} b ON b.${local.keyQuoted} = r.pk`) +\n ' WHERE r.tid = $tid AND ' +\n where;\n const rows = await connection.query(select, { $tid: local.tid, ...params });\n return rows.map((r) => {\n const key = asString(r[0]);\n const version = asLong(r[1]);\n const values: (string | null)[] = [];\n for (let i = 0; i < computed.length; i++) {\n const value = r[3 + i * 2] as G9SqlValue;\n const storage = asString(r[4 + i * 2]);\n values.push(value === null ? null : G9SyncDigest.canonicalText(computedTypes[i] as number, value, storage === 'real' ? 'real' : storage === 'integer' ? 'integer' : undefined));\n }\n return { key, bucket: G9SyncDigest.getBucket(key), version: version.toNumber(), hash: G9SyncDigest.getRowHash(key, version, values), member, dirty: asNumber(r[2]) !== 0 };\n });\n}\n\n// ================================================================ queries\n\nexport async function getPendingSummary(store: StoreInternals): Promise<G9PendingSummary> {\n const connection = store.reader();\n const tables: G9PendingTable[] = (\n await connection.query(\n 'SELECT t.local_name, ' +\n 'sum(CASE WHEN r.dirty = 1 AND r.rejected = 0 THEN 1 ELSE 0 END), ' +\n 'sum(CASE WHEN r.dirty = 2 AND r.rejected = 0 THEN 1 ELSE 0 END), ' +\n 'sum(CASE WHEN r.rejected = 1 THEN 1 ELSE 0 END) ' +\n 'FROM g9_rows r JOIN g9_tables t ON t.tid = r.tid WHERE r.dirty <> 0 GROUP BY t.local_name ORDER BY t.local_name',\n )\n ).map((r) => ({ localTable: asString(r[0]), upserts: asNumber(r[1]), deletes: asNumber(r[2]), rejected: asNumber(r[3]) }));\n const pendingCommands = asNumber(await connection.scalar('SELECT count(*) FROM g9_commands WHERE state = 0'));\n let totalRows = 0;\n let rejectedRows = 0;\n for (const t of tables) {\n totalRows += t.upserts + t.deletes;\n rejectedRows += t.rejected;\n }\n return { tables, totalRows, rejectedRows, pendingCommands };\n}\n\nexport async function readChangeFeed(store: StoreInternals, localTable: string, afterSequence: number, limit: number): Promise<G9ChangeFeedEntry[]> {\n store.ensureInitialized();\n const table = getLocal(store, localTable);\n const rows = await store\n .reader()\n .query('SELECT local_seq, pk, (deleted = 1 OR dirty = 2), dirty <> 0 FROM g9_rows WHERE tid = $t AND local_seq > $a ORDER BY local_seq LIMIT $l', {\n $t: table.tid,\n $a: afterSequence,\n $l: Math.max(1, limit),\n });\n return rows.map((r) => ({ sequence: asNumber(r[0]), key: asString(r[1]), deleted: asNumber(r[2]) !== 0, localPending: asNumber(r[3]) !== 0 }));\n}\n\n/** `ReadChangeFeedAsync(..., G9CChangeFeedKeyFilter, ...)`: the same read, narrowed in SQL to the selected keys plus every deletion. */\nexport async function readChangeFeedFiltered(\n store: StoreInternals,\n localTable: string,\n afterSequence: number,\n limit: number,\n keyFilter: G9ChangeFeedKeyFilter,\n): Promise<G9ChangeFeedEntry[]> {\n validateChangeFeedKeyFilter(keyFilter);\n store.ensureInitialized();\n const table = getLocal(store, localTable);\n const parameters: { [name: string]: G9SqlValue } = { $g9t: table.tid, $g9a: afterSequence, $g9l: Math.max(1, limit) };\n for (const [name, value] of Object.entries(keyFilter.parameters ?? {})) parameters[name] = value;\n const rows = await store\n .reader()\n .query(\n 'SELECT local_seq, pk, (deleted = 1 OR dirty = 2), dirty <> 0 FROM g9_rows ' +\n `WHERE tid = $g9t AND local_seq > $g9a AND (deleted = 1 OR dirty = 2 OR pk IN (${keyFilter.keySql.trim()})) ORDER BY local_seq LIMIT $g9l`,\n parameters,\n );\n return rows.map((r) => ({ sequence: asNumber(r[0]), key: asString(r[1]), deleted: asNumber(r[2]) !== 0, localPending: asNumber(r[3]) !== 0 }));\n}\n\nexport async function getChangeSequence(store: StoreInternals): Promise<number> {\n store.ensureInitialized();\n return asNumber(await store.reader().scalar('SELECT seq FROM g9_clock WHERE id = 1'));\n}\n\nexport async function getRejections(store: StoreInternals): Promise<G9SyncRejection[]> {\n const rows = await store\n .reader()\n .query(\n 'SELECT t.local_name, j.pk, j.code, j.message, j.sql_state, j.constraint_name, j.column_name, j.details, j.at_utc ' +\n 'FROM g9_rejections j JOIN g9_tables t ON t.tid = j.tid JOIN g9_rows r ON r.tid = j.tid AND r.pk = j.pk WHERE r.rejected = 1 ORDER BY j.at_utc',\n );\n return rows.map((r) => ({\n localTable: asString(r[0]),\n key: asString(r[1]),\n code: asString(r[2]),\n message: asOptionalString(r[3]),\n sqlState: asOptionalString(r[4]),\n constraint: asOptionalString(r[5]),\n column: asOptionalString(r[6]),\n details: asOptionalString(r[7]),\n atUtcMs: asNumber(r[8]),\n }));\n}\n\nexport async function retryRejected(store: StoreInternals, localTable: string | null, key: string | null): Promise<number> {\n store.ensureInitialized();\n let where = 'rejected = 1';\n const params: { [name: string]: G9SqlValue } = {};\n if (localTable !== null) {\n where += ' AND tid = $t';\n params.$t = getLocal(store, localTable).tid;\n }\n if (key !== null) {\n where += ' AND pk = $pk';\n params.$pk = key;\n }\n return store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n await connection.exec('DELETE FROM g9_rejections WHERE (tid, pk) IN (SELECT tid, pk FROM g9_rows WHERE ' + where + ')', params);\n return connection.exec('UPDATE g9_rows SET rejected = 0 WHERE ' + where, params);\n }),\n );\n}\n\nexport async function markDirty(store: StoreInternals, localTable: string, keys: readonly string[]): Promise<number> {\n store.ensureInitialized();\n const table = getLocal(store, localTable);\n const normalized = keys.map((k) => G9SyncKey.tryNormalize(table.model.keyType, k) ?? k);\n return store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n let marked = 0;\n for (let i = 0; i < normalized.length; i += 5000) {\n const json = JSON.stringify(normalized.slice(i, i + 5000));\n marked += await markPending(store.writer(), table, 'SELECT value AS pk FROM json_each($keys)', { $keys: json }, 'dirty = 1, dirty_mask = ' + literal(allColumnsMask(table.model.columns.length)));\n }\n return marked;\n }),\n );\n}\n\n/** Marks the rows `keysSql` selects as pending, giving EACH its own local sequence (LES-0039). */\nexport async function markPending(connection: G9SqliteConnection, table: LocalTable, keysSql: string, params: { [name: string]: G9SqlValue }, set: string): Promise<number> {\n await connection.exec('CREATE TEMP TABLE IF NOT EXISTS g9_mark (pk TEXT NOT NULL PRIMARY KEY, n INTEGER NOT NULL); DELETE FROM temp.g9_mark;');\n const count = await connection.exec(`INSERT INTO temp.g9_mark (pk, n) SELECT pk, row_number() OVER (ORDER BY pk) FROM (SELECT DISTINCT pk FROM (${keysSql}) WHERE pk IS NOT NULL)`, params);\n if (count === 0) return 0;\n const first = asNumber(await connection.scalar('SELECT seq FROM g9_clock WHERE id = 1'));\n await connection.exec('INSERT OR IGNORE INTO g9_rows (tid, pk) SELECT $t, pk FROM temp.g9_mark', { $t: table.tid });\n const marked = await connection.exec(\n `UPDATE g9_rows SET ${set}, local_seq = $first + m.n, hlc_ms = ${NOW_MS}, rejected = 0, deleted = 0 FROM temp.g9_mark AS m WHERE g9_rows.tid = $t AND g9_rows.pk = m.pk`,\n { $first: first, $t: table.tid },\n );\n await connection.exec('UPDATE g9_clock SET seq = seq + $n WHERE id = 1; DELETE FROM temp.g9_mark;', { $n: count });\n return marked;\n}\n\nexport async function adoptExistingRows(store: StoreInternals): Promise<number> {\n store.ensureInitialized();\n return store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n let adopted = 0;\n for (const table of store.byLocal.values()) {\n adopted += await store.writer().exec(`INSERT OR IGNORE INTO g9_rows (tid, pk) SELECT $t, ${keyExpression(table.model, 'b')} FROM ${table.quoted} AS b`, { $t: table.tid });\n }\n return adopted;\n }),\n );\n}\n\n// ================================================================ reports and statistics\n\n/** The run report as .NET's G9SyncClientJsonContext writes it (camelCase, nulls omitted, DateTime/Guid in .NET text). */\nfunction reportToJson(report: G9SyncRunReport): string {\n const startedTicks = ticksOf(1970, 1, 1, 0, 0, 0, 0).add(G9Long.fromNumber(Math.floor(report.startedUtcMs)).multiplySmall(10000));\n return persistedJson({\n runId: report.runId,\n startedUtc: formatTicks(startedTicks) + 'Z',\n durationMs: report.durationMs,\n outcome: report.outcome,\n priority: report.priority,\n errorCode: report.errorCode,\n errorMessage: report.errorMessage,\n pushed: report.pushed,\n rejected: report.rejected,\n conflicts: report.conflicts,\n downloaded: report.downloaded,\n applied: report.applied,\n downloadedBytes: report.downloadedBytes,\n subscriptions: report.subscriptions,\n phaseMs: report.phaseMs,\n triggersSkipped: report.triggersSkipped,\n foreignTriggers: report.foreignTriggers,\n applyTransactions: report.applyTransactions,\n indexesDeferred: report.indexesDeferred,\n indexRebuildMs: report.indexRebuildMs,\n liveIndexReasons: report.liveIndexReasons,\n unchangedRows: report.unchangedRows,\n });\n}\n\nfunction reportFromJson(json: string): G9SyncRunReport | null {\n const v = parseJson(json) as { [key: string]: unknown } | null;\n if (!v || typeof v !== 'object') return null;\n const num = (x: unknown) => (typeof x === 'number' ? x : x instanceof G9Long ? x.toNumber() : 0);\n const started = typeof v.startedUtc === 'string' ? Date.parse(v.startedUtc.replace(/(\\.\\d{3})\\d+/, '$1')) : NaN;\n return {\n runId: typeof v.runId === 'string' ? v.runId : '',\n startedUtcMs: isNaN(started) ? 0 : started,\n durationMs: num(v.durationMs),\n outcome: typeof v.outcome === 'string' ? v.outcome : '',\n priority: typeof v.priority === 'string' ? v.priority : '',\n errorCode: typeof v.errorCode === 'string' ? v.errorCode : null,\n errorMessage: typeof v.errorMessage === 'string' ? v.errorMessage : null,\n pushed: num(v.pushed),\n rejected: num(v.rejected),\n conflicts: num(v.conflicts),\n downloaded: num(v.downloaded),\n applied: num(v.applied),\n downloadedBytes: num(v.downloadedBytes),\n subscriptions: Array.isArray(v.subscriptions) ? v.subscriptions.map(String) : [],\n phaseMs: (v.phaseMs as { [phase: string]: number }) ?? {},\n triggersSkipped: typeof v.triggersSkipped === 'boolean' ? v.triggersSkipped : null,\n foreignTriggers: Array.isArray(v.foreignTriggers) ? v.foreignTriggers.map(String) : [],\n applyTransactions: num(v.applyTransactions),\n indexesDeferred: num(v.indexesDeferred),\n indexRebuildMs: num(v.indexRebuildMs),\n liveIndexReasons: (v.liveIndexReasons as { [table: string]: string }) ?? {},\n unchangedRows: num(v.unchangedRows),\n };\n}\n\nexport async function saveRunReport(store: StoreInternals, report: G9SyncRunReport, keep: number): Promise<void> {\n const runId = tryNormalizeGuid(report.runId) ? guidToN(report.runId) : report.runId;\n await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n const connection = store.writer();\n await connection.exec('INSERT OR REPLACE INTO g9_runs (run_id, started_utc, report_json) VALUES ($r, $s, $j)', { $r: runId, $s: report.startedUtcMs, $j: reportToJson(report) });\n await connection.exec('DELETE FROM g9_runs WHERE run_id NOT IN (SELECT run_id FROM g9_runs ORDER BY started_utc DESC LIMIT $k)', { $k: Math.max(1, keep) });\n }),\n );\n}\n\nexport async function getRecentRunReports(store: StoreInternals, count: number): Promise<G9SyncRunReport[]> {\n const rows = await store.reader().query('SELECT report_json FROM g9_runs ORDER BY started_utc DESC LIMIT $c', { $c: Math.max(1, count) });\n const reports: G9SyncRunReport[] = [];\n for (const r of rows) {\n const report = reportFromJson(asString(r[0]));\n if (report) reports.push(report);\n }\n return reports;\n}\n\nexport async function getPhaseStatistics(store: StoreInternals): Promise<{ [key: string]: number }> {\n const statistics: { [key: string]: number } = {};\n for (const r of await store.reader().query('SELECT key, value FROM g9_stats')) statistics[asString(r[0])] = asNumber(r[1]);\n return statistics;\n}\n\nexport async function recordPhaseStatistics(store: StoreInternals, samples: { [key: string]: number }): Promise<void> {\n await store.writeLock.run(() =>\n store.writer().transaction('immediate', async () => {\n for (const key of Object.keys(samples)) {\n const value = samples[key] as number;\n if (!isFinite(value) || value < 0) continue;\n await store\n .writer()\n .exec(\n 'INSERT INTO g9_stats (key, value, samples) VALUES ($k, $v, 1) ON CONFLICT(key) DO UPDATE SET value = value * 0.7 + excluded.value * 0.3, samples = samples + 1',\n { $k: key, $v: value },\n );\n }\n }),\n );\n}\n\nexport async function purgeDeletedFeed(store: StoreInternals, keep: number): Promise<number> {\n return store.writeLock.run(async () => {\n const connection = store.writer();\n const threshold = await connection.scalar('SELECT local_seq FROM g9_rows WHERE deleted = 1 ORDER BY local_seq DESC LIMIT 1 OFFSET $k', { $k: Math.max(0, keep) });\n if (threshold === null) return 0;\n return connection.transaction('immediate', async () => {\n // The floor moves in the same transaction as the purge (ADR-0059).\n const purgedUpTo = await connection.scalar('SELECT max(local_seq) FROM g9_rows WHERE deleted = 1 AND dirty = 0 AND local_seq < $x', { $x: threshold });\n if (purgedUpTo === null) return 0;\n const purged = await connection.exec('DELETE FROM g9_rows WHERE deleted = 1 AND dirty = 0 AND local_seq < $x', { $x: threshold });\n await connection.exec(\n \"INSERT INTO g9_meta (key, value) VALUES ('feed_floor_seq', $f) ON CONFLICT(key) DO UPDATE SET value = excluded.value WHERE CAST(value AS INTEGER) < CAST(excluded.value AS INTEGER)\",\n { $f: asLong(purgedUpTo).toString() },\n );\n return purged;\n });\n });\n}\n\nexport async function getChangeFeedFloor(store: StoreInternals): Promise<number> {\n store.ensureInitialized();\n const text = await store.reader().scalar(\"SELECT value FROM g9_meta WHERE key = 'feed_floor_seq'\");\n if (typeof text !== 'string' || !/^[+-]?\\d+$/.test(text.trim())) return 0;\n return Number(text.trim());\n}\n\nexport { ticksToUnixMs };\n"]}
@@ -5,7 +5,7 @@
5
5
  // few thousand statements: the whole reason this exists for the TypeScript client.
6
6
  import { G9SyncErrorCodes, G9SyncException } from '../abstractions/errors.js';
7
7
  import { parseJson } from '../abstractions/long.js';
8
- import { FILE_MODE_COLUMNS, FILE_MODE_COPY, FILE_MODE_MERGE } from '../client/storeTypes.js';
8
+ import { FILE_MODE_APPEND, FILE_MODE_COLUMNS, FILE_MODE_COPY, FILE_MODE_MERGE } from '../client/storeTypes.js';
9
9
  import { G9EPullPartKind } from '../protocol/dtos.js';
10
10
  import { readFileManifest } from '../protocol/wire.js';
11
11
  import { G9ESyncDirection } from '../abstractions/enums.js';
@@ -419,12 +419,17 @@ export async function applySnapshotFile(store, context, schema, file) {
419
419
  mode = identical ? FILE_MODE_COPY : FILE_MODE_COLUMNS;
420
420
  const list = shared.map(quote).join(', ');
421
421
  rows = await connection.exec(identical ? `INSERT INTO main.${table.quoted} SELECT * FROM ${source}` : `INSERT INTO main.${table.quoted} (${list}) SELECT ${list} FROM ${source}`);
422
- const clock = asNumber(await connection.scalar('SELECT seq FROM g9_clock WHERE id = 1'));
423
- const numbered = await connection.exec('INSERT INTO g9_rows (tid, pk, server_ver, local_seq, subs, dirty, dirty_mask, rejected, deleted) ' +
424
- `SELECT $t, v.pk, v.ver, $base + row_number() OVER (ORDER BY v.r), $bit, 0, 0, 0, 0 FROM ${pairs} AS v WHERE true ` +
425
- 'ON CONFLICT(tid, pk) DO UPDATE SET server_ver = excluded.server_ver, local_seq = excluded.local_seq, subs = subs | excluded.subs, ' +
426
- 'dirty = 0, dirty_mask = 0, rejected = 0, deleted = 0', { $t: table.tid, $base: clock, $bit: bitValue });
427
- await connection.exec('UPDATE g9_clock SET seq = seq + $n WHERE id = 1', { $n: numbered });
422
+ await numberNewRows(context, table, pairs, bitValue);
423
+ if (context.wantsChangedKey(table.model.localName))
424
+ await addChangedKeys(context, table, `SELECT ${sourceKey} FROM ${source} AS s ORDER BY s.rowid`);
425
+ }
426
+ else if (!isProtected && !(await overlapsStoredRows(context, table, source))) {
427
+ // A table holding only OTHER rows (a second site's first load): every row is new, so the merge's per-row diff proves nothing.
428
+ // The .NET twin measured 12.4 s as a merge against ~1 s as a plain insert for 232,005 rows (AgriPad, 2026-10-16).
429
+ mode = FILE_MODE_APPEND;
430
+ const list = shared.map(quote).join(', ');
431
+ rows = await connection.exec(`INSERT INTO main.${table.quoted} (${list}) SELECT ${list} FROM ${source} AS s ORDER BY s.${quote(table.model.keyColumn)}`);
432
+ await numberNewRows(context, table, pairs, bitValue);
428
433
  if (context.wantsChangedKey(table.model.localName))
429
434
  await addChangedKeys(context, table, `SELECT ${sourceKey} FROM ${source} AS s ORDER BY s.rowid`);
430
435
  }
@@ -447,6 +452,21 @@ export async function applySnapshotFile(store, context, schema, file) {
447
452
  diagnostics.snapshotFiles++;
448
453
  diagnostics.fileCopyMs += Date.now() - started;
449
454
  }
455
+ /** `NumberNewRows`: every row of the file is new to the table - membership, server version and the next number on the clock. */
456
+ async function numberNewRows(context, table, pairs, bitValue) {
457
+ const connection = context.connection;
458
+ const clock = asNumber(await connection.scalar('SELECT seq FROM g9_clock WHERE id = 1'));
459
+ const numbered = await connection.exec('INSERT INTO g9_rows (tid, pk, server_ver, local_seq, subs, dirty, dirty_mask, rejected, deleted) ' +
460
+ `SELECT $t, v.pk, v.ver, $base + row_number() OVER (ORDER BY v.r), $bit, 0, 0, 0, 0 FROM ${pairs} AS v WHERE true ` +
461
+ 'ON CONFLICT(tid, pk) DO UPDATE SET server_ver = excluded.server_ver, local_seq = excluded.local_seq, subs = subs | excluded.subs, ' +
462
+ 'dirty = 0, dirty_mask = 0, rejected = 0, deleted = 0', { $t: table.tid, $base: clock, $bit: bitValue });
463
+ await connection.exec('UPDATE g9_clock SET seq = seq + $n WHERE id = 1', { $n: numbered });
464
+ }
465
+ /** `OverlapsStoredRows`: whether any row of the file is already in the table - what separates an append from a merge. */
466
+ async function overlapsStoredRows(context, table, source) {
467
+ const key = quote(table.model.keyColumn);
468
+ return (await context.connection.scalar(`SELECT 1 FROM ${source} AS s WHERE EXISTS (SELECT 1 FROM main.${table.quoted} AS m WHERE m.${key} = s.${key}) LIMIT 1`)) !== null;
469
+ }
450
470
  /** `MergeSnapshotTable`: changed rows only; protected rows gain membership; unchanged rows keep their feed position. */
451
471
  async function mergeSnapshotTable(context, table, source, pairs, columns, bitValue, isProtected) {
452
472
  const connection = context.connection;