@syncular/server-dialect-sqlite 0.0.1-72 → 0.0.1-83
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.
- package/dist/index.d.ts +11 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -145
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.test.ts +149 -0
- package/src/index.ts +57 -218
package/dist/index.d.ts
CHANGED
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
* - REPEATABLE READ → no-op (SQLite uses serializable by default)
|
|
14
14
|
*/
|
|
15
15
|
import type { ScopeValues, StoredScopes, SyncOp } from '@syncular/core';
|
|
16
|
-
import type { DbExecutor
|
|
17
|
-
import
|
|
18
|
-
import type {
|
|
19
|
-
|
|
16
|
+
import type { DbExecutor } from '@syncular/server';
|
|
17
|
+
import { BaseServerSyncDialect } from '@syncular/server';
|
|
18
|
+
import type { SyncChangeRow, SyncCoreDb } from '@syncular/server/schema';
|
|
19
|
+
import type { Kysely, RawBuilder } from 'kysely';
|
|
20
|
+
export declare class SqliteServerSyncDialect extends BaseServerSyncDialect {
|
|
20
21
|
readonly name: "sqlite";
|
|
21
22
|
readonly supportsForUpdate = false;
|
|
22
23
|
readonly supportsSavepoints: boolean;
|
|
@@ -24,31 +25,18 @@ export declare class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
24
25
|
constructor(options?: {
|
|
25
26
|
supportsTransactions?: boolean;
|
|
26
27
|
});
|
|
28
|
+
protected buildNumberListFilter(values: number[]): RawBuilder<unknown>;
|
|
29
|
+
protected buildStringListFilter(values: string[]): RawBuilder<unknown>;
|
|
27
30
|
ensureSyncSchema<DB extends SyncCoreDb>(db: Kysely<DB>): Promise<void>;
|
|
28
31
|
executeInTransaction<DB extends SyncCoreDb, T>(db: Kysely<DB>, fn: (executor: DbExecutor<DB>) => Promise<T>): Promise<T>;
|
|
29
32
|
setRepeatableRead<DB extends SyncCoreDb>(_trx: DbExecutor<DB>): Promise<void>;
|
|
30
|
-
|
|
31
|
-
partitionId?: string;
|
|
32
|
-
}): Promise<number>;
|
|
33
|
-
readMinCommitSeq<DB extends SyncCoreDb>(db: Kysely<DB> | Transaction<DB>, options?: {
|
|
34
|
-
partitionId?: string;
|
|
35
|
-
}): Promise<number>;
|
|
36
|
-
readCommitSeqsForPull<DB extends SyncCoreDb>(db: Kysely<DB> | Transaction<DB>, args: {
|
|
37
|
-
cursor: number;
|
|
38
|
-
limitCommits: number;
|
|
39
|
-
tables: string[];
|
|
40
|
-
partitionId?: string;
|
|
41
|
-
}): Promise<number[]>;
|
|
42
|
-
readCommits<DB extends SyncCoreDb>(db: Kysely<DB> | Transaction<DB>, commitSeqs: number[], options?: {
|
|
43
|
-
partitionId?: string;
|
|
44
|
-
}): Promise<SyncCommitRow[]>;
|
|
45
|
-
readChangesForCommits<DB extends SyncCoreDb>(db: Kysely<DB> | Transaction<DB>, args: {
|
|
33
|
+
readChangesForCommits<DB extends SyncCoreDb>(db: DbExecutor<DB>, args: {
|
|
46
34
|
commitSeqs: number[];
|
|
47
35
|
table: string;
|
|
48
36
|
scopes: ScopeValues;
|
|
49
37
|
partitionId?: string;
|
|
50
38
|
}): Promise<SyncChangeRow[]>;
|
|
51
|
-
readIncrementalPullRows<DB extends SyncCoreDb>(db:
|
|
39
|
+
readIncrementalPullRows<DB extends SyncCoreDb>(db: DbExecutor<DB>, args: {
|
|
52
40
|
table: string;
|
|
53
41
|
scopes: ScopeValues;
|
|
54
42
|
cursor: number;
|
|
@@ -70,7 +58,7 @@ export declare class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
70
58
|
* Streaming version of incremental pull for large result sets.
|
|
71
59
|
* Yields changes one at a time instead of loading all into memory.
|
|
72
60
|
*/
|
|
73
|
-
streamIncrementalPullRows<DB extends SyncCoreDb>(db:
|
|
61
|
+
streamIncrementalPullRows<DB extends SyncCoreDb>(db: DbExecutor<DB>, args: {
|
|
74
62
|
table: string;
|
|
75
63
|
scopes: ScopeValues;
|
|
76
64
|
cursor: number;
|
|
@@ -88,23 +76,12 @@ export declare class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
88
76
|
row_version: number | null;
|
|
89
77
|
scopes: StoredScopes;
|
|
90
78
|
}>;
|
|
91
|
-
compactChanges<DB extends SyncCoreDb>(db:
|
|
79
|
+
compactChanges<DB extends SyncCoreDb>(db: DbExecutor<DB>, args: {
|
|
92
80
|
fullHistoryHours: number;
|
|
93
81
|
}): Promise<number>;
|
|
94
|
-
recordClientCursor<DB extends SyncCoreDb>(db: Kysely<DB> | Transaction<DB>, args: {
|
|
95
|
-
partitionId?: string;
|
|
96
|
-
clientId: string;
|
|
97
|
-
actorId: string;
|
|
98
|
-
cursor: number;
|
|
99
|
-
effectiveScopes: ScopeValues;
|
|
100
|
-
}): Promise<void>;
|
|
101
82
|
scopesToDb(scopes: StoredScopes): string;
|
|
102
|
-
dbToScopes(value: unknown): StoredScopes;
|
|
103
83
|
dbToArray(value: unknown): string[];
|
|
104
84
|
arrayToDb(values: string[]): string;
|
|
105
|
-
readAffectedTablesFromChanges<DB extends SyncCoreDb>(db: Kysely<DB> | Transaction<DB>, commitSeq: number, options?: {
|
|
106
|
-
partitionId?: string;
|
|
107
|
-
}): Promise<string[]>;
|
|
108
85
|
ensureConsoleSchema<DB extends SyncCoreDb>(db: Kysely<DB>): Promise<void>;
|
|
109
86
|
}
|
|
110
87
|
export declare function createSqliteServerDialect(options?: {
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -12,27 +12,8 @@
|
|
|
12
12
|
* - No GIN index → regular index + manual filtering
|
|
13
13
|
* - REPEATABLE READ → no-op (SQLite uses serializable by default)
|
|
14
14
|
*/
|
|
15
|
+
import { BaseServerSyncDialect, coerceIsoString, coerceNumber, parseScopes, } from '@syncular/server';
|
|
15
16
|
import { sql } from 'kysely';
|
|
16
|
-
function coerceNumber(value) {
|
|
17
|
-
if (value === null || value === undefined)
|
|
18
|
-
return null;
|
|
19
|
-
if (typeof value === 'number')
|
|
20
|
-
return Number.isFinite(value) ? value : null;
|
|
21
|
-
if (typeof value === 'bigint')
|
|
22
|
-
return Number.isFinite(Number(value)) ? Number(value) : null;
|
|
23
|
-
if (typeof value === 'string') {
|
|
24
|
-
const n = Number(value);
|
|
25
|
-
return Number.isFinite(n) ? n : null;
|
|
26
|
-
}
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
function coerceIsoString(value) {
|
|
30
|
-
if (typeof value === 'string')
|
|
31
|
-
return value;
|
|
32
|
-
if (value instanceof Date)
|
|
33
|
-
return value.toISOString();
|
|
34
|
-
return String(value);
|
|
35
|
-
}
|
|
36
17
|
function parseJsonValue(value) {
|
|
37
18
|
if (value === null || value === undefined)
|
|
38
19
|
return null;
|
|
@@ -48,39 +29,6 @@ function parseJsonValue(value) {
|
|
|
48
29
|
}
|
|
49
30
|
return value;
|
|
50
31
|
}
|
|
51
|
-
function parseScopes(value) {
|
|
52
|
-
if (value === null || value === undefined)
|
|
53
|
-
return {};
|
|
54
|
-
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
55
|
-
const result = {};
|
|
56
|
-
for (const [k, v] of Object.entries(value)) {
|
|
57
|
-
if (typeof v === 'string') {
|
|
58
|
-
result[k] = v;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return result;
|
|
62
|
-
}
|
|
63
|
-
if (typeof value === 'string') {
|
|
64
|
-
try {
|
|
65
|
-
const parsed = JSON.parse(value);
|
|
66
|
-
if (typeof parsed === 'object' &&
|
|
67
|
-
parsed !== null &&
|
|
68
|
-
!Array.isArray(parsed)) {
|
|
69
|
-
const result = {};
|
|
70
|
-
for (const [k, v] of Object.entries(parsed)) {
|
|
71
|
-
if (typeof v === 'string') {
|
|
72
|
-
result[k] = v;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return result;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
// ignore
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return {};
|
|
83
|
-
}
|
|
84
32
|
function toStringArray(value) {
|
|
85
33
|
if (Array.isArray(value)) {
|
|
86
34
|
return value.filter((k) => typeof k === 'string');
|
|
@@ -128,16 +76,38 @@ async function ensurePartitionColumn(db, table) {
|
|
|
128
76
|
// Ignore when column already exists (or table is immutable in the current backend).
|
|
129
77
|
}
|
|
130
78
|
}
|
|
131
|
-
|
|
79
|
+
async function ensureTransportPathColumn(db) {
|
|
80
|
+
try {
|
|
81
|
+
await sql
|
|
82
|
+
.raw("ALTER TABLE sync_request_events ADD COLUMN transport_path TEXT NOT NULL DEFAULT 'direct'")
|
|
83
|
+
.execute(db);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Ignore when column already exists (or table is immutable in the current backend).
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export class SqliteServerSyncDialect extends BaseServerSyncDialect {
|
|
132
90
|
name = 'sqlite';
|
|
133
91
|
supportsForUpdate = false;
|
|
134
92
|
supportsSavepoints;
|
|
135
93
|
_supportsTransactions;
|
|
136
94
|
constructor(options) {
|
|
95
|
+
super();
|
|
137
96
|
this._supportsTransactions = options?.supportsTransactions ?? true;
|
|
138
97
|
this.supportsSavepoints = this._supportsTransactions;
|
|
139
98
|
}
|
|
140
99
|
// ===========================================================================
|
|
100
|
+
// SQL Fragment Hooks
|
|
101
|
+
// ===========================================================================
|
|
102
|
+
buildNumberListFilter(values) {
|
|
103
|
+
const list = sql.join(values.map((v) => sql `${v}`), sql `, `);
|
|
104
|
+
return sql `IN (${list})`;
|
|
105
|
+
}
|
|
106
|
+
buildStringListFilter(values) {
|
|
107
|
+
const list = sql.join(values.map((v) => sql `${v}`), sql `, `);
|
|
108
|
+
return sql `IN (${list})`;
|
|
109
|
+
}
|
|
110
|
+
// ===========================================================================
|
|
141
111
|
// Schema Setup
|
|
142
112
|
// ===========================================================================
|
|
143
113
|
async ensureSyncSchema(db) {
|
|
@@ -271,63 +241,8 @@ export class SqliteServerSyncDialect {
|
|
|
271
241
|
// SQLite uses serializable isolation by default in WAL mode.
|
|
272
242
|
}
|
|
273
243
|
// ===========================================================================
|
|
274
|
-
// Commit/Change Log Queries
|
|
244
|
+
// Commit/Change Log Queries (dialect-specific)
|
|
275
245
|
// ===========================================================================
|
|
276
|
-
async readMaxCommitSeq(db, options) {
|
|
277
|
-
const partitionId = options?.partitionId ?? 'default';
|
|
278
|
-
const res = await sql `
|
|
279
|
-
SELECT max(commit_seq) as max_seq
|
|
280
|
-
FROM sync_commits
|
|
281
|
-
WHERE partition_id = ${partitionId}
|
|
282
|
-
`.execute(db);
|
|
283
|
-
return coerceNumber(res.rows[0]?.max_seq) ?? 0;
|
|
284
|
-
}
|
|
285
|
-
async readMinCommitSeq(db, options) {
|
|
286
|
-
const partitionId = options?.partitionId ?? 'default';
|
|
287
|
-
const res = await sql `
|
|
288
|
-
SELECT min(commit_seq) as min_seq
|
|
289
|
-
FROM sync_commits
|
|
290
|
-
WHERE partition_id = ${partitionId}
|
|
291
|
-
`.execute(db);
|
|
292
|
-
return coerceNumber(res.rows[0]?.min_seq) ?? 0;
|
|
293
|
-
}
|
|
294
|
-
async readCommitSeqsForPull(db, args) {
|
|
295
|
-
const partitionId = args.partitionId ?? 'default';
|
|
296
|
-
if (args.tables.length === 0)
|
|
297
|
-
return [];
|
|
298
|
-
const tablesIn = sql.join(args.tables.map((t) => sql `${t}`), sql `, `);
|
|
299
|
-
const res = await sql `
|
|
300
|
-
SELECT DISTINCT commit_seq
|
|
301
|
-
FROM sync_table_commits
|
|
302
|
-
WHERE partition_id = ${partitionId}
|
|
303
|
-
AND "table" IN (${tablesIn})
|
|
304
|
-
AND commit_seq > ${args.cursor}
|
|
305
|
-
ORDER BY commit_seq ASC
|
|
306
|
-
LIMIT ${args.limitCommits}
|
|
307
|
-
`.execute(db);
|
|
308
|
-
return res.rows
|
|
309
|
-
.map((r) => coerceNumber(r.commit_seq))
|
|
310
|
-
.filter((n) => typeof n === 'number' && Number.isFinite(n) && n > args.cursor);
|
|
311
|
-
}
|
|
312
|
-
async readCommits(db, commitSeqs, options) {
|
|
313
|
-
const partitionId = options?.partitionId ?? 'default';
|
|
314
|
-
if (commitSeqs.length === 0)
|
|
315
|
-
return [];
|
|
316
|
-
const commitSeqsIn = sql.join(commitSeqs.map((seq) => sql `${seq}`), sql `, `);
|
|
317
|
-
const res = await sql `
|
|
318
|
-
SELECT commit_seq, actor_id, created_at, result_json
|
|
319
|
-
FROM sync_commits
|
|
320
|
-
WHERE commit_seq IN (${commitSeqsIn})
|
|
321
|
-
AND partition_id = ${partitionId}
|
|
322
|
-
ORDER BY commit_seq ASC
|
|
323
|
-
`.execute(db);
|
|
324
|
-
return res.rows.map((row) => ({
|
|
325
|
-
commit_seq: coerceNumber(row.commit_seq) ?? 0,
|
|
326
|
-
actor_id: row.actor_id,
|
|
327
|
-
created_at: coerceIsoString(row.created_at),
|
|
328
|
-
result_json: row.result_json ?? null,
|
|
329
|
-
}));
|
|
330
|
-
}
|
|
331
246
|
async readChangesForCommits(db, args) {
|
|
332
247
|
const partitionId = args.partitionId ?? 'default';
|
|
333
248
|
if (args.commitSeqs.length === 0)
|
|
@@ -535,10 +450,10 @@ export class SqliteServerSyncDialect {
|
|
|
535
450
|
if (toDelete.length === 0)
|
|
536
451
|
return 0;
|
|
537
452
|
// Delete in batches
|
|
538
|
-
const
|
|
453
|
+
const deleteBatchSize = 500;
|
|
539
454
|
let deleted = 0;
|
|
540
|
-
for (let i = 0; i < toDelete.length; i +=
|
|
541
|
-
const batch = toDelete.slice(i, i +
|
|
455
|
+
for (let i = 0; i < toDelete.length; i += deleteBatchSize) {
|
|
456
|
+
const batch = toDelete.slice(i, i + deleteBatchSize);
|
|
542
457
|
const batchIn = sql.join(batch.map((id) => sql `${id}`), sql `, `);
|
|
543
458
|
const res = await sql `
|
|
544
459
|
DELETE FROM sync_changes
|
|
@@ -566,49 +481,17 @@ export class SqliteServerSyncDialect {
|
|
|
566
481
|
return deleted;
|
|
567
482
|
}
|
|
568
483
|
// ===========================================================================
|
|
569
|
-
// Client Cursor Recording
|
|
570
|
-
// ===========================================================================
|
|
571
|
-
async recordClientCursor(db, args) {
|
|
572
|
-
const partitionId = args.partitionId ?? 'default';
|
|
573
|
-
const now = new Date().toISOString();
|
|
574
|
-
const scopesJson = JSON.stringify(args.effectiveScopes);
|
|
575
|
-
await sql `
|
|
576
|
-
INSERT INTO sync_client_cursors (partition_id, client_id, actor_id, cursor, effective_scopes, updated_at)
|
|
577
|
-
VALUES (${partitionId}, ${args.clientId}, ${args.actorId}, ${args.cursor}, ${scopesJson}, ${now})
|
|
578
|
-
ON CONFLICT(partition_id, client_id) DO UPDATE SET
|
|
579
|
-
actor_id = ${args.actorId},
|
|
580
|
-
cursor = ${args.cursor},
|
|
581
|
-
effective_scopes = ${scopesJson},
|
|
582
|
-
updated_at = ${now}
|
|
583
|
-
`.execute(db);
|
|
584
|
-
}
|
|
585
|
-
// ===========================================================================
|
|
586
484
|
// Scope Conversion Helpers
|
|
587
485
|
// ===========================================================================
|
|
588
486
|
scopesToDb(scopes) {
|
|
589
487
|
return JSON.stringify(scopes);
|
|
590
488
|
}
|
|
591
|
-
dbToScopes(value) {
|
|
592
|
-
return parseScopes(value);
|
|
593
|
-
}
|
|
594
489
|
dbToArray(value) {
|
|
595
490
|
return toStringArray(value);
|
|
596
491
|
}
|
|
597
492
|
arrayToDb(values) {
|
|
598
493
|
return JSON.stringify(values.filter((v) => v.length > 0));
|
|
599
494
|
}
|
|
600
|
-
async readAffectedTablesFromChanges(db, commitSeq, options) {
|
|
601
|
-
const partitionId = options?.partitionId ?? 'default';
|
|
602
|
-
const res = await sql `
|
|
603
|
-
SELECT DISTINCT "table"
|
|
604
|
-
FROM sync_changes
|
|
605
|
-
WHERE commit_seq = ${commitSeq}
|
|
606
|
-
AND partition_id = ${partitionId}
|
|
607
|
-
`.execute(db);
|
|
608
|
-
return res.rows
|
|
609
|
-
.map((r) => r.table)
|
|
610
|
-
.filter((t) => typeof t === 'string' && t.length > 0);
|
|
611
|
-
}
|
|
612
495
|
// ===========================================================================
|
|
613
496
|
// Console Schema (Request Events)
|
|
614
497
|
// ===========================================================================
|
|
@@ -629,8 +512,10 @@ export class SqliteServerSyncDialect {
|
|
|
629
512
|
.addColumn('row_count', 'integer')
|
|
630
513
|
.addColumn('tables', 'text', (col) => col.notNull().defaultTo('[]'))
|
|
631
514
|
.addColumn('error_message', 'text')
|
|
515
|
+
.addColumn('transport_path', 'text', (col) => col.notNull().defaultTo('direct'))
|
|
632
516
|
.addColumn('created_at', 'text', (col) => col.notNull().defaultTo(nowIso))
|
|
633
517
|
.execute();
|
|
518
|
+
await ensureTransportPathColumn(db);
|
|
634
519
|
await sql `CREATE INDEX IF NOT EXISTS idx_sync_request_events_created_at
|
|
635
520
|
ON sync_request_events(created_at DESC)`.execute(db);
|
|
636
521
|
await sql `CREATE INDEX IF NOT EXISTS idx_sync_request_events_event_type
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import Database from 'bun:sqlite';
|
|
2
|
+
import { afterEach, describe, expect, it } from 'bun:test';
|
|
3
|
+
import type { SyncCoreDb } from '@syncular/server/schema';
|
|
4
|
+
import type { Dialect, QueryResult } from 'kysely';
|
|
5
|
+
import {
|
|
6
|
+
Kysely,
|
|
7
|
+
SqliteAdapter,
|
|
8
|
+
SqliteIntrospector,
|
|
9
|
+
SqliteQueryCompiler,
|
|
10
|
+
sql,
|
|
11
|
+
} from 'kysely';
|
|
12
|
+
import { createSqliteServerDialect } from './index';
|
|
13
|
+
|
|
14
|
+
describe('SqliteServerSyncDialect.ensureConsoleSchema', () => {
|
|
15
|
+
let db: Kysely<SyncCoreDb>;
|
|
16
|
+
|
|
17
|
+
function createTestDb(): Kysely<SyncCoreDb> {
|
|
18
|
+
const sqlite = new Database(':memory:');
|
|
19
|
+
const dialect: Dialect = {
|
|
20
|
+
createAdapter: () => new SqliteAdapter(),
|
|
21
|
+
createDriver: () => ({
|
|
22
|
+
init: async () => {},
|
|
23
|
+
acquireConnection: async () => ({
|
|
24
|
+
executeQuery: async <R>(compiledQuery: {
|
|
25
|
+
sql: string;
|
|
26
|
+
parameters: readonly unknown[];
|
|
27
|
+
}): Promise<QueryResult<R>> => {
|
|
28
|
+
const normalizedSql = compiledQuery.sql.trimStart().toLowerCase();
|
|
29
|
+
if (
|
|
30
|
+
normalizedSql.startsWith('select') ||
|
|
31
|
+
normalizedSql.startsWith('with') ||
|
|
32
|
+
normalizedSql.startsWith('pragma')
|
|
33
|
+
) {
|
|
34
|
+
const rows = sqlite
|
|
35
|
+
.prepare(compiledQuery.sql)
|
|
36
|
+
.all(...(compiledQuery.parameters ?? [])) as R[];
|
|
37
|
+
return { rows };
|
|
38
|
+
}
|
|
39
|
+
const result = sqlite
|
|
40
|
+
.prepare(compiledQuery.sql)
|
|
41
|
+
.run(...(compiledQuery.parameters ?? []));
|
|
42
|
+
return {
|
|
43
|
+
rows: [] as R[],
|
|
44
|
+
numAffectedRows: BigInt(result.changes),
|
|
45
|
+
insertId:
|
|
46
|
+
result.lastInsertRowid != null
|
|
47
|
+
? BigInt(result.lastInsertRowid)
|
|
48
|
+
: undefined,
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
streamQuery: <R>(): AsyncIterableIterator<QueryResult<R>> => {
|
|
52
|
+
throw new Error('Not implemented in test driver');
|
|
53
|
+
},
|
|
54
|
+
}),
|
|
55
|
+
beginTransaction: async () => {},
|
|
56
|
+
commitTransaction: async () => {},
|
|
57
|
+
rollbackTransaction: async () => {},
|
|
58
|
+
releaseConnection: async () => {},
|
|
59
|
+
destroy: async () => {
|
|
60
|
+
sqlite.close();
|
|
61
|
+
},
|
|
62
|
+
}),
|
|
63
|
+
createIntrospector: (innerDb) => new SqliteIntrospector(innerDb),
|
|
64
|
+
createQueryCompiler: () => new SqliteQueryCompiler(),
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
return new Kysely<SyncCoreDb>({ dialect });
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
afterEach(async () => {
|
|
71
|
+
if (db) {
|
|
72
|
+
await db.destroy();
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('creates sync_request_events with transport_path on new databases', async () => {
|
|
77
|
+
db = createTestDb();
|
|
78
|
+
const dialect = createSqliteServerDialect();
|
|
79
|
+
|
|
80
|
+
await dialect.ensureConsoleSchema(db);
|
|
81
|
+
|
|
82
|
+
const columns = await sql<{ name: string }>`
|
|
83
|
+
PRAGMA table_info(sync_request_events)
|
|
84
|
+
`.execute(db);
|
|
85
|
+
|
|
86
|
+
expect(columns.rows.map((row) => row.name)).toContain('transport_path');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('adds transport_path when upgrading an existing sync_request_events table', async () => {
|
|
90
|
+
db = createTestDb();
|
|
91
|
+
const dialect = createSqliteServerDialect();
|
|
92
|
+
|
|
93
|
+
await db.schema
|
|
94
|
+
.createTable('sync_request_events')
|
|
95
|
+
.addColumn('event_id', 'integer', (col) => col.primaryKey())
|
|
96
|
+
.addColumn('event_type', 'text', (col) => col.notNull())
|
|
97
|
+
.addColumn('actor_id', 'text', (col) => col.notNull())
|
|
98
|
+
.addColumn('client_id', 'text', (col) => col.notNull())
|
|
99
|
+
.addColumn('status_code', 'integer', (col) => col.notNull())
|
|
100
|
+
.addColumn('outcome', 'text', (col) => col.notNull())
|
|
101
|
+
.addColumn('duration_ms', 'integer', (col) => col.notNull())
|
|
102
|
+
.addColumn('commit_seq', 'integer')
|
|
103
|
+
.addColumn('operation_count', 'integer')
|
|
104
|
+
.addColumn('row_count', 'integer')
|
|
105
|
+
.addColumn('tables', 'text', (col) => col.notNull().defaultTo('[]'))
|
|
106
|
+
.addColumn('error_message', 'text')
|
|
107
|
+
.addColumn('created_at', 'text', (col) => col.notNull())
|
|
108
|
+
.execute();
|
|
109
|
+
|
|
110
|
+
await dialect.ensureConsoleSchema(db);
|
|
111
|
+
|
|
112
|
+
const columns = await sql<{ name: string }>`
|
|
113
|
+
PRAGMA table_info(sync_request_events)
|
|
114
|
+
`.execute(db);
|
|
115
|
+
expect(columns.rows.map((row) => row.name)).toContain('transport_path');
|
|
116
|
+
|
|
117
|
+
await sql`
|
|
118
|
+
INSERT INTO sync_request_events (
|
|
119
|
+
event_type,
|
|
120
|
+
actor_id,
|
|
121
|
+
client_id,
|
|
122
|
+
status_code,
|
|
123
|
+
outcome,
|
|
124
|
+
duration_ms,
|
|
125
|
+
tables,
|
|
126
|
+
transport_path,
|
|
127
|
+
created_at
|
|
128
|
+
) VALUES (
|
|
129
|
+
${'pull'},
|
|
130
|
+
${'actor-1'},
|
|
131
|
+
${'client-1'},
|
|
132
|
+
${200},
|
|
133
|
+
${'ok'},
|
|
134
|
+
${12},
|
|
135
|
+
${'[]'},
|
|
136
|
+
${'direct'},
|
|
137
|
+
${'2026-02-12T00:00:00.000Z'}
|
|
138
|
+
)
|
|
139
|
+
`.execute(db);
|
|
140
|
+
|
|
141
|
+
const inserted = await sql<{ count: number }>`
|
|
142
|
+
SELECT COUNT(*) as count
|
|
143
|
+
FROM sync_request_events
|
|
144
|
+
WHERE transport_path = ${'direct'}
|
|
145
|
+
`.execute(db);
|
|
146
|
+
|
|
147
|
+
expect(inserted.rows[0]?.count ?? 0).toBe(1);
|
|
148
|
+
});
|
|
149
|
+
});
|
package/src/index.ts
CHANGED
|
@@ -14,33 +14,17 @@
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
import type { ScopeValues, StoredScopes, SyncOp } from '@syncular/core';
|
|
17
|
-
import type { DbExecutor
|
|
18
|
-
import
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
import type { DbExecutor } from '@syncular/server';
|
|
18
|
+
import {
|
|
19
|
+
BaseServerSyncDialect,
|
|
20
|
+
coerceIsoString,
|
|
21
|
+
coerceNumber,
|
|
22
|
+
parseScopes,
|
|
23
|
+
} from '@syncular/server';
|
|
24
|
+
import type { SyncChangeRow, SyncCoreDb } from '@syncular/server/schema';
|
|
25
|
+
import type { Kysely, RawBuilder } from 'kysely';
|
|
24
26
|
import { sql } from 'kysely';
|
|
25
27
|
|
|
26
|
-
function coerceNumber(value: unknown): number | null {
|
|
27
|
-
if (value === null || value === undefined) return null;
|
|
28
|
-
if (typeof value === 'number') return Number.isFinite(value) ? value : null;
|
|
29
|
-
if (typeof value === 'bigint')
|
|
30
|
-
return Number.isFinite(Number(value)) ? Number(value) : null;
|
|
31
|
-
if (typeof value === 'string') {
|
|
32
|
-
const n = Number(value);
|
|
33
|
-
return Number.isFinite(n) ? n : null;
|
|
34
|
-
}
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function coerceIsoString(value: unknown): string {
|
|
39
|
-
if (typeof value === 'string') return value;
|
|
40
|
-
if (value instanceof Date) return value.toISOString();
|
|
41
|
-
return String(value);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
28
|
function parseJsonValue(value: unknown): unknown {
|
|
45
29
|
if (value === null || value === undefined) return null;
|
|
46
30
|
if (typeof value === 'object') return value;
|
|
@@ -54,42 +38,6 @@ function parseJsonValue(value: unknown): unknown {
|
|
|
54
38
|
return value;
|
|
55
39
|
}
|
|
56
40
|
|
|
57
|
-
function parseScopes(value: unknown): StoredScopes {
|
|
58
|
-
if (value === null || value === undefined) return {};
|
|
59
|
-
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
60
|
-
const result: StoredScopes = {};
|
|
61
|
-
for (const [k, v] of Object.entries(value as Record<string, unknown>)) {
|
|
62
|
-
if (typeof v === 'string') {
|
|
63
|
-
result[k] = v;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return result;
|
|
67
|
-
}
|
|
68
|
-
if (typeof value === 'string') {
|
|
69
|
-
try {
|
|
70
|
-
const parsed = JSON.parse(value);
|
|
71
|
-
if (
|
|
72
|
-
typeof parsed === 'object' &&
|
|
73
|
-
parsed !== null &&
|
|
74
|
-
!Array.isArray(parsed)
|
|
75
|
-
) {
|
|
76
|
-
const result: StoredScopes = {};
|
|
77
|
-
for (const [k, v] of Object.entries(
|
|
78
|
-
parsed as Record<string, unknown>
|
|
79
|
-
)) {
|
|
80
|
-
if (typeof v === 'string') {
|
|
81
|
-
result[k] = v;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return result;
|
|
85
|
-
}
|
|
86
|
-
} catch {
|
|
87
|
-
// ignore
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return {};
|
|
91
|
-
}
|
|
92
|
-
|
|
93
41
|
function toStringArray(value: unknown): string[] {
|
|
94
42
|
if (Array.isArray(value)) {
|
|
95
43
|
return value.filter((k: unknown): k is string => typeof k === 'string');
|
|
@@ -141,17 +89,52 @@ async function ensurePartitionColumn<DB extends SyncCoreDb>(
|
|
|
141
89
|
}
|
|
142
90
|
}
|
|
143
91
|
|
|
144
|
-
|
|
92
|
+
async function ensureTransportPathColumn<DB extends SyncCoreDb>(
|
|
93
|
+
db: Kysely<DB>
|
|
94
|
+
): Promise<void> {
|
|
95
|
+
try {
|
|
96
|
+
await sql
|
|
97
|
+
.raw(
|
|
98
|
+
"ALTER TABLE sync_request_events ADD COLUMN transport_path TEXT NOT NULL DEFAULT 'direct'"
|
|
99
|
+
)
|
|
100
|
+
.execute(db);
|
|
101
|
+
} catch {
|
|
102
|
+
// Ignore when column already exists (or table is immutable in the current backend).
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export class SqliteServerSyncDialect extends BaseServerSyncDialect {
|
|
145
107
|
readonly name = 'sqlite' as const;
|
|
146
108
|
readonly supportsForUpdate = false;
|
|
147
109
|
readonly supportsSavepoints: boolean;
|
|
148
110
|
private readonly _supportsTransactions: boolean;
|
|
149
111
|
|
|
150
112
|
constructor(options?: { supportsTransactions?: boolean }) {
|
|
113
|
+
super();
|
|
151
114
|
this._supportsTransactions = options?.supportsTransactions ?? true;
|
|
152
115
|
this.supportsSavepoints = this._supportsTransactions;
|
|
153
116
|
}
|
|
154
117
|
|
|
118
|
+
// ===========================================================================
|
|
119
|
+
// SQL Fragment Hooks
|
|
120
|
+
// ===========================================================================
|
|
121
|
+
|
|
122
|
+
protected buildNumberListFilter(values: number[]): RawBuilder<unknown> {
|
|
123
|
+
const list = sql.join(
|
|
124
|
+
values.map((v) => sql`${v}`),
|
|
125
|
+
sql`, `
|
|
126
|
+
);
|
|
127
|
+
return sql`IN (${list})`;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
protected buildStringListFilter(values: string[]): RawBuilder<unknown> {
|
|
131
|
+
const list = sql.join(
|
|
132
|
+
values.map((v) => sql`${v}`),
|
|
133
|
+
sql`, `
|
|
134
|
+
);
|
|
135
|
+
return sql`IN (${list})`;
|
|
136
|
+
}
|
|
137
|
+
|
|
155
138
|
// ===========================================================================
|
|
156
139
|
// Schema Setup
|
|
157
140
|
// ===========================================================================
|
|
@@ -336,108 +319,11 @@ export class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
336
319
|
}
|
|
337
320
|
|
|
338
321
|
// ===========================================================================
|
|
339
|
-
// Commit/Change Log Queries
|
|
322
|
+
// Commit/Change Log Queries (dialect-specific)
|
|
340
323
|
// ===========================================================================
|
|
341
324
|
|
|
342
|
-
async readMaxCommitSeq<DB extends SyncCoreDb>(
|
|
343
|
-
db: Kysely<DB> | Transaction<DB>,
|
|
344
|
-
options?: { partitionId?: string }
|
|
345
|
-
): Promise<number> {
|
|
346
|
-
const partitionId = options?.partitionId ?? 'default';
|
|
347
|
-
const res = await sql<{ max_seq: unknown }>`
|
|
348
|
-
SELECT max(commit_seq) as max_seq
|
|
349
|
-
FROM sync_commits
|
|
350
|
-
WHERE partition_id = ${partitionId}
|
|
351
|
-
`.execute(db);
|
|
352
|
-
|
|
353
|
-
return coerceNumber(res.rows[0]?.max_seq) ?? 0;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
async readMinCommitSeq<DB extends SyncCoreDb>(
|
|
357
|
-
db: Kysely<DB> | Transaction<DB>,
|
|
358
|
-
options?: { partitionId?: string }
|
|
359
|
-
): Promise<number> {
|
|
360
|
-
const partitionId = options?.partitionId ?? 'default';
|
|
361
|
-
const res = await sql<{ min_seq: unknown }>`
|
|
362
|
-
SELECT min(commit_seq) as min_seq
|
|
363
|
-
FROM sync_commits
|
|
364
|
-
WHERE partition_id = ${partitionId}
|
|
365
|
-
`.execute(db);
|
|
366
|
-
|
|
367
|
-
return coerceNumber(res.rows[0]?.min_seq) ?? 0;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
async readCommitSeqsForPull<DB extends SyncCoreDb>(
|
|
371
|
-
db: Kysely<DB> | Transaction<DB>,
|
|
372
|
-
args: {
|
|
373
|
-
cursor: number;
|
|
374
|
-
limitCommits: number;
|
|
375
|
-
tables: string[];
|
|
376
|
-
partitionId?: string;
|
|
377
|
-
}
|
|
378
|
-
): Promise<number[]> {
|
|
379
|
-
const partitionId = args.partitionId ?? 'default';
|
|
380
|
-
if (args.tables.length === 0) return [];
|
|
381
|
-
|
|
382
|
-
const tablesIn = sql.join(
|
|
383
|
-
args.tables.map((t) => sql`${t}`),
|
|
384
|
-
sql`, `
|
|
385
|
-
);
|
|
386
|
-
|
|
387
|
-
const res = await sql<{ commit_seq: unknown }>`
|
|
388
|
-
SELECT DISTINCT commit_seq
|
|
389
|
-
FROM sync_table_commits
|
|
390
|
-
WHERE partition_id = ${partitionId}
|
|
391
|
-
AND "table" IN (${tablesIn})
|
|
392
|
-
AND commit_seq > ${args.cursor}
|
|
393
|
-
ORDER BY commit_seq ASC
|
|
394
|
-
LIMIT ${args.limitCommits}
|
|
395
|
-
`.execute(db);
|
|
396
|
-
|
|
397
|
-
return res.rows
|
|
398
|
-
.map((r) => coerceNumber(r.commit_seq))
|
|
399
|
-
.filter(
|
|
400
|
-
(n): n is number =>
|
|
401
|
-
typeof n === 'number' && Number.isFinite(n) && n > args.cursor
|
|
402
|
-
);
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
async readCommits<DB extends SyncCoreDb>(
|
|
406
|
-
db: Kysely<DB> | Transaction<DB>,
|
|
407
|
-
commitSeqs: number[],
|
|
408
|
-
options?: { partitionId?: string }
|
|
409
|
-
): Promise<SyncCommitRow[]> {
|
|
410
|
-
const partitionId = options?.partitionId ?? 'default';
|
|
411
|
-
if (commitSeqs.length === 0) return [];
|
|
412
|
-
|
|
413
|
-
const commitSeqsIn = sql.join(
|
|
414
|
-
commitSeqs.map((seq) => sql`${seq}`),
|
|
415
|
-
sql`, `
|
|
416
|
-
);
|
|
417
|
-
|
|
418
|
-
const res = await sql<{
|
|
419
|
-
commit_seq: unknown;
|
|
420
|
-
actor_id: string;
|
|
421
|
-
created_at: unknown;
|
|
422
|
-
result_json: unknown | null;
|
|
423
|
-
}>`
|
|
424
|
-
SELECT commit_seq, actor_id, created_at, result_json
|
|
425
|
-
FROM sync_commits
|
|
426
|
-
WHERE commit_seq IN (${commitSeqsIn})
|
|
427
|
-
AND partition_id = ${partitionId}
|
|
428
|
-
ORDER BY commit_seq ASC
|
|
429
|
-
`.execute(db);
|
|
430
|
-
|
|
431
|
-
return res.rows.map((row) => ({
|
|
432
|
-
commit_seq: coerceNumber(row.commit_seq) ?? 0,
|
|
433
|
-
actor_id: row.actor_id,
|
|
434
|
-
created_at: coerceIsoString(row.created_at),
|
|
435
|
-
result_json: row.result_json ?? null,
|
|
436
|
-
}));
|
|
437
|
-
}
|
|
438
|
-
|
|
439
325
|
async readChangesForCommits<DB extends SyncCoreDb>(
|
|
440
|
-
db:
|
|
326
|
+
db: DbExecutor<DB>,
|
|
441
327
|
args: {
|
|
442
328
|
commitSeqs: number[];
|
|
443
329
|
table: string;
|
|
@@ -489,7 +375,7 @@ export class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
489
375
|
}
|
|
490
376
|
|
|
491
377
|
async readIncrementalPullRows<DB extends SyncCoreDb>(
|
|
492
|
-
db:
|
|
378
|
+
db: DbExecutor<DB>,
|
|
493
379
|
args: {
|
|
494
380
|
table: string;
|
|
495
381
|
scopes: ScopeValues;
|
|
@@ -600,7 +486,7 @@ export class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
600
486
|
* Yields changes one at a time instead of loading all into memory.
|
|
601
487
|
*/
|
|
602
488
|
async *streamIncrementalPullRows<DB extends SyncCoreDb>(
|
|
603
|
-
db:
|
|
489
|
+
db: DbExecutor<DB>,
|
|
604
490
|
args: {
|
|
605
491
|
table: string;
|
|
606
492
|
scopes: ScopeValues;
|
|
@@ -709,7 +595,7 @@ export class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
709
595
|
}
|
|
710
596
|
|
|
711
597
|
async compactChanges<DB extends SyncCoreDb>(
|
|
712
|
-
db:
|
|
598
|
+
db: DbExecutor<DB>,
|
|
713
599
|
args: { fullHistoryHours: number }
|
|
714
600
|
): Promise<number> {
|
|
715
601
|
const cutoffIso = new Date(
|
|
@@ -767,11 +653,11 @@ export class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
767
653
|
if (toDelete.length === 0) return 0;
|
|
768
654
|
|
|
769
655
|
// Delete in batches
|
|
770
|
-
const
|
|
656
|
+
const deleteBatchSize = 500;
|
|
771
657
|
let deleted = 0;
|
|
772
658
|
|
|
773
|
-
for (let i = 0; i < toDelete.length; i +=
|
|
774
|
-
const batch = toDelete.slice(i, i +
|
|
659
|
+
for (let i = 0; i < toDelete.length; i += deleteBatchSize) {
|
|
660
|
+
const batch = toDelete.slice(i, i + deleteBatchSize);
|
|
775
661
|
const batchIn = sql.join(
|
|
776
662
|
batch.map((id) => sql`${id}`),
|
|
777
663
|
sql`, `
|
|
@@ -806,35 +692,6 @@ export class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
806
692
|
return deleted;
|
|
807
693
|
}
|
|
808
694
|
|
|
809
|
-
// ===========================================================================
|
|
810
|
-
// Client Cursor Recording
|
|
811
|
-
// ===========================================================================
|
|
812
|
-
|
|
813
|
-
async recordClientCursor<DB extends SyncCoreDb>(
|
|
814
|
-
db: Kysely<DB> | Transaction<DB>,
|
|
815
|
-
args: {
|
|
816
|
-
partitionId?: string;
|
|
817
|
-
clientId: string;
|
|
818
|
-
actorId: string;
|
|
819
|
-
cursor: number;
|
|
820
|
-
effectiveScopes: ScopeValues;
|
|
821
|
-
}
|
|
822
|
-
): Promise<void> {
|
|
823
|
-
const partitionId = args.partitionId ?? 'default';
|
|
824
|
-
const now = new Date().toISOString();
|
|
825
|
-
const scopesJson = JSON.stringify(args.effectiveScopes);
|
|
826
|
-
|
|
827
|
-
await sql`
|
|
828
|
-
INSERT INTO sync_client_cursors (partition_id, client_id, actor_id, cursor, effective_scopes, updated_at)
|
|
829
|
-
VALUES (${partitionId}, ${args.clientId}, ${args.actorId}, ${args.cursor}, ${scopesJson}, ${now})
|
|
830
|
-
ON CONFLICT(partition_id, client_id) DO UPDATE SET
|
|
831
|
-
actor_id = ${args.actorId},
|
|
832
|
-
cursor = ${args.cursor},
|
|
833
|
-
effective_scopes = ${scopesJson},
|
|
834
|
-
updated_at = ${now}
|
|
835
|
-
`.execute(db);
|
|
836
|
-
}
|
|
837
|
-
|
|
838
695
|
// ===========================================================================
|
|
839
696
|
// Scope Conversion Helpers
|
|
840
697
|
// ===========================================================================
|
|
@@ -843,10 +700,6 @@ export class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
843
700
|
return JSON.stringify(scopes);
|
|
844
701
|
}
|
|
845
702
|
|
|
846
|
-
dbToScopes(value: unknown): StoredScopes {
|
|
847
|
-
return parseScopes(value);
|
|
848
|
-
}
|
|
849
|
-
|
|
850
703
|
dbToArray(value: unknown): string[] {
|
|
851
704
|
return toStringArray(value);
|
|
852
705
|
}
|
|
@@ -855,24 +708,6 @@ export class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
855
708
|
return JSON.stringify(values.filter((v) => v.length > 0));
|
|
856
709
|
}
|
|
857
710
|
|
|
858
|
-
async readAffectedTablesFromChanges<DB extends SyncCoreDb>(
|
|
859
|
-
db: Kysely<DB> | Transaction<DB>,
|
|
860
|
-
commitSeq: number,
|
|
861
|
-
options?: { partitionId?: string }
|
|
862
|
-
): Promise<string[]> {
|
|
863
|
-
const partitionId = options?.partitionId ?? 'default';
|
|
864
|
-
const res = await sql<{ table: string }>`
|
|
865
|
-
SELECT DISTINCT "table"
|
|
866
|
-
FROM sync_changes
|
|
867
|
-
WHERE commit_seq = ${commitSeq}
|
|
868
|
-
AND partition_id = ${partitionId}
|
|
869
|
-
`.execute(db);
|
|
870
|
-
|
|
871
|
-
return res.rows
|
|
872
|
-
.map((r) => r.table)
|
|
873
|
-
.filter((t): t is string => typeof t === 'string' && t.length > 0);
|
|
874
|
-
}
|
|
875
|
-
|
|
876
711
|
// ===========================================================================
|
|
877
712
|
// Console Schema (Request Events)
|
|
878
713
|
// ===========================================================================
|
|
@@ -899,8 +734,12 @@ export class SqliteServerSyncDialect implements ServerSyncDialect {
|
|
|
899
734
|
.addColumn('row_count', 'integer')
|
|
900
735
|
.addColumn('tables', 'text', (col) => col.notNull().defaultTo('[]'))
|
|
901
736
|
.addColumn('error_message', 'text')
|
|
737
|
+
.addColumn('transport_path', 'text', (col) =>
|
|
738
|
+
col.notNull().defaultTo('direct')
|
|
739
|
+
)
|
|
902
740
|
.addColumn('created_at', 'text', (col) => col.notNull().defaultTo(nowIso))
|
|
903
741
|
.execute();
|
|
742
|
+
await ensureTransportPathColumn(db);
|
|
904
743
|
|
|
905
744
|
await sql`CREATE INDEX IF NOT EXISTS idx_sync_request_events_created_at
|
|
906
745
|
ON sync_request_events(created_at DESC)`.execute(db);
|