supastash 0.2.3 → 0.2.5
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/desktop/utils/sync/pullFromRemote/fetchOlderHelpers.d.ts.map +1 -1
- package/dist/desktop/utils/sync/pullFromRemote/fetchOlderHelpers.js +1 -4
- package/dist/desktop/utils/sync/pullFromRemote/updateLocalDb.d.ts.map +1 -1
- package/dist/desktop/utils/sync/pullFromRemote/updateLocalDb.js +26 -30
- package/dist/native/utils/sync/pullFromRemote/fetchOlderHelpers.d.ts.map +1 -1
- package/dist/native/utils/sync/pullFromRemote/fetchOlderHelpers.js +1 -4
- package/dist/native/utils/sync/pullFromRemote/updateLocalDb.d.ts.map +1 -1
- package/dist/native/utils/sync/pullFromRemote/updateLocalDb.js +26 -29
- package/dist/shared/db/adapters/rn_nitro.d.ts.map +1 -1
- package/dist/shared/db/adapters/rn_nitro.js +37 -55
- package/dist/shared/utils/query/builder/index.d.ts.map +1 -1
- package/dist/shared/utils/query/builder/index.js +6 -5
- package/dist/shared/utils/sync/pushLocal/deleteChunks.d.ts.map +1 -1
- package/dist/shared/utils/sync/pushLocal/deleteChunks.js +5 -7
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchOlderHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/desktop/utils/sync/pullFromRemote/fetchOlderHelpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AASvE,eAAO,MAAM,iBAAiB;sDAIzB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB;yCAmBE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;KAC7B;;;;gFA8BE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB;uBAqDkB,cAAc,GAAG;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,WAAW,EAAE,CAAC;KACrB;+BAagC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,EAAE,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"fetchOlderHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/desktop/utils/sync/pullFromRemote/fetchOlderHelpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AASvE,eAAO,MAAM,iBAAiB;sDAIzB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB;yCAmBE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;KAC7B;;;;gFA8BE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB;uBAqDkB,cAAc,GAAG;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,WAAW,EAAE,CAAC;KACrB;+BAagC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,EAAE,CAAA;KAAE;CAIxE,CAAC"}
|
|
@@ -96,9 +96,6 @@ export const FetchOlderHelpers = {
|
|
|
96
96
|
async storeToDb({ table, data }) {
|
|
97
97
|
if (data.length === 0)
|
|
98
98
|
return;
|
|
99
|
-
|
|
100
|
-
await db.withTransaction(async (tx) => {
|
|
101
|
-
await upsertChunkData({ tx, table, records: data });
|
|
102
|
-
});
|
|
99
|
+
await upsertChunkData({ table, records: data });
|
|
103
100
|
},
|
|
104
101
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateLocalDb.d.ts","sourceRoot":"","sources":["../../../../../src/desktop/utils/sync/pullFromRemote/updateLocalDb.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAiB7E;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,EAAE,EAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"updateLocalDb.d.ts","sourceRoot":"","sources":["../../../../../src/desktop/utils/sync/pullFromRemote/updateLocalDb.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAiB7E;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,EAAE,EAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,iBAmGhD;AAID;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,EAC/B,EAAE,EACF,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqElC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;EAyBE;AACF,wBAAsB,eAAe,CAAC,EACpC,EAAE,EACF,KAAK,EACL,OAAO,GACR,EAAE;IACD,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FhB"}
|
|
@@ -55,37 +55,34 @@ export async function updateLocalDb(table, filters, onReceiveData) {
|
|
|
55
55
|
});
|
|
56
56
|
refreshNeeded = !!data?.length || !!deletedIds?.length;
|
|
57
57
|
// Delete records that are no longer in the remote data
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
await tx.runAsync(`DELETE FROM ${table} WHERE id IN (${placeholders})`, slice);
|
|
65
|
-
}
|
|
58
|
+
if (deletedIds && deletedIds.length > 0) {
|
|
59
|
+
const ids = deletedIds;
|
|
60
|
+
for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
|
|
61
|
+
const slice = ids.slice(i, i + CHUNK_SIZE);
|
|
62
|
+
const placeholders = slice.map(() => "?").join(", ");
|
|
63
|
+
await db.runAsync(`DELETE FROM ${table} WHERE id IN (${placeholders})`, slice);
|
|
66
64
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
65
|
+
}
|
|
66
|
+
// Get the local stamp of the records
|
|
67
|
+
let localStamp = new Map();
|
|
68
|
+
if (data?.length) {
|
|
69
|
+
const ids = data.map((r) => r.id).filter(Boolean);
|
|
70
|
+
for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
|
|
71
|
+
const slice = ids.slice(i, i + CHUNK_SIZE);
|
|
72
|
+
const placeholders = slice.map(() => "?").join(", ");
|
|
73
|
+
const rows = await db.getAllAsync(`SELECT id, updated_at FROM ${table} WHERE id IN (${placeholders})`, slice);
|
|
74
|
+
for (const row of rows ?? []) {
|
|
75
|
+
localStamp.set(row.id, row.updated_at ?? null);
|
|
78
76
|
}
|
|
79
77
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
});
|
|
78
|
+
}
|
|
79
|
+
// Update local database with remote changes
|
|
80
|
+
if (data?.length) {
|
|
81
|
+
await upsertChunkData({
|
|
82
|
+
table,
|
|
83
|
+
records: data,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
89
86
|
if (timestamps) {
|
|
90
87
|
await setSupastashSyncStatus(table, filters, {
|
|
91
88
|
lastSyncedAt: timestamps.updatedMax,
|
|
@@ -214,7 +211,6 @@ export async function upsertChunkData({ tx, table, records, }) {
|
|
|
214
211
|
const slice = incomingIds.slice(i, i + CHUNK_SIZE);
|
|
215
212
|
const placeholders = slice.map(() => "?").join(", ");
|
|
216
213
|
const rows = await db.getAllAsync(`SELECT id, updated_at FROM ${table} WHERE id IN (${placeholders})`, slice);
|
|
217
|
-
console.log("rows", rows.length);
|
|
218
214
|
for (const row of rows ?? []) {
|
|
219
215
|
localStamp.set(row.id, row.updated_at ?? null);
|
|
220
216
|
}
|
|
@@ -231,7 +227,6 @@ export async function upsertChunkData({ tx, table, records, }) {
|
|
|
231
227
|
return true;
|
|
232
228
|
return new Date(remoteUpdated) > new Date(localUpdated);
|
|
233
229
|
});
|
|
234
|
-
console.log("toUpsert", toUpsert.length);
|
|
235
230
|
if (!toUpsert.length)
|
|
236
231
|
return;
|
|
237
232
|
// Step 3: Build INSERT … ON CONFLICT(id) DO UPDATE in param-limit-safe chunks
|
|
@@ -263,6 +258,7 @@ export async function upsertChunkData({ tx, table, records, }) {
|
|
|
263
258
|
}
|
|
264
259
|
catch (error) {
|
|
265
260
|
logError(`[Supastash] Error upserting chunk for ${table}`, error);
|
|
261
|
+
throw error;
|
|
266
262
|
}
|
|
267
263
|
}
|
|
268
264
|
if (successfulIds.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchOlderHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/native/utils/sync/pullFromRemote/fetchOlderHelpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AASvE,eAAO,MAAM,iBAAiB;sDAIzB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB;yCAmBE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;KAC7B;;;;gFA8BE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB;uBAqDkB,cAAc,GAAG;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,WAAW,EAAE,CAAC;KACrB;+BAagC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,EAAE,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"fetchOlderHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/native/utils/sync/pullFromRemote/fetchOlderHelpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AASvE,eAAO,MAAM,iBAAiB;sDAIzB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB;yCAmBE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;KAC7B;;;;gFA8BE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB;uBAqDkB,cAAc,GAAG;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,WAAW,EAAE,CAAC;KACrB;+BAagC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,EAAE,CAAA;KAAE;CAIxE,CAAC"}
|
|
@@ -96,9 +96,6 @@ export const FetchOlderHelpers = {
|
|
|
96
96
|
async storeToDb({ table, data }) {
|
|
97
97
|
if (data.length === 0)
|
|
98
98
|
return;
|
|
99
|
-
|
|
100
|
-
await db.withTransaction(async (tx) => {
|
|
101
|
-
await upsertChunkData({ tx, table, records: data });
|
|
102
|
-
});
|
|
99
|
+
await upsertChunkData({ table, records: data });
|
|
103
100
|
},
|
|
104
101
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateLocalDb.d.ts","sourceRoot":"","sources":["../../../../../src/native/utils/sync/pullFromRemote/updateLocalDb.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAiB7E;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,EAAE,EAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"updateLocalDb.d.ts","sourceRoot":"","sources":["../../../../../src/native/utils/sync/pullFromRemote/updateLocalDb.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAiB7E;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,EAAE,EAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,iBAkGhD;AAID;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,EAC/B,EAAE,EACF,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqElC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;EAyBE;AACF,wBAAsB,eAAe,CAAC,EACpC,EAAE,EACF,KAAK,EACL,OAAO,GACR,EAAE;IACD,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2FhB"}
|
|
@@ -42,7 +42,6 @@ export async function updateLocalDb(table, filters, onReceiveData) {
|
|
|
42
42
|
const data = dataResult?.data;
|
|
43
43
|
const timestamps = dataResult.timestamps;
|
|
44
44
|
const deletedIds = dataResult.deletedIds;
|
|
45
|
-
const deletedIdSet = new Set(deletedIds ?? []);
|
|
46
45
|
SyncInfoUpdater.setUnsyncedDataCount({
|
|
47
46
|
amount: data?.length ?? 0,
|
|
48
47
|
type: "pull",
|
|
@@ -55,37 +54,34 @@ export async function updateLocalDb(table, filters, onReceiveData) {
|
|
|
55
54
|
});
|
|
56
55
|
refreshNeeded = !!data?.length || !!deletedIds?.length;
|
|
57
56
|
// Delete records that are no longer in the remote data
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
await tx.runAsync(`DELETE FROM ${table} WHERE id IN (${placeholders})`, slice);
|
|
65
|
-
}
|
|
57
|
+
if (deletedIds && deletedIds.length > 0) {
|
|
58
|
+
const ids = deletedIds;
|
|
59
|
+
for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
|
|
60
|
+
const slice = ids.slice(i, i + CHUNK_SIZE);
|
|
61
|
+
const placeholders = slice.map(() => "?").join(", ");
|
|
62
|
+
await db.runAsync(`DELETE FROM ${table} WHERE id IN (${placeholders})`, slice);
|
|
66
63
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
64
|
+
}
|
|
65
|
+
// Get the local stamp of the records
|
|
66
|
+
let localStamp = new Map();
|
|
67
|
+
if (data?.length) {
|
|
68
|
+
const ids = data.map((r) => r.id).filter(Boolean);
|
|
69
|
+
for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
|
|
70
|
+
const slice = ids.slice(i, i + CHUNK_SIZE);
|
|
71
|
+
const placeholders = slice.map(() => "?").join(", ");
|
|
72
|
+
const rows = await db.getAllAsync(`SELECT id, updated_at FROM ${table} WHERE id IN (${placeholders})`, slice);
|
|
73
|
+
for (const row of rows ?? []) {
|
|
74
|
+
localStamp.set(row.id, row.updated_at ?? null);
|
|
78
75
|
}
|
|
79
76
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
});
|
|
77
|
+
}
|
|
78
|
+
// Update local database with remote changes
|
|
79
|
+
if (data?.length) {
|
|
80
|
+
await upsertChunkData({
|
|
81
|
+
table,
|
|
82
|
+
records: data,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
89
85
|
if (timestamps) {
|
|
90
86
|
await setSupastashSyncStatus(table, filters, {
|
|
91
87
|
lastSyncedAt: timestamps.updatedMax,
|
|
@@ -257,6 +253,7 @@ export async function upsertChunkData({ tx, table, records, }) {
|
|
|
257
253
|
}
|
|
258
254
|
catch (error) {
|
|
259
255
|
logError(`[Supastash] Error upserting chunk for ${table}`, error);
|
|
256
|
+
throw error;
|
|
260
257
|
}
|
|
261
258
|
}
|
|
262
259
|
if (successfulIds.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rn_nitro.d.ts","sourceRoot":"","sources":["../../../../src/shared/db/adapters/rn_nitro.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EAGvB,MAAM,mCAAmC,CAAC;AAI3C,eAAO,MAAM,kBAAkB,EAAE,sBAAsB,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"rn_nitro.d.ts","sourceRoot":"","sources":["../../../../src/shared/db/adapters/rn_nitro.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EAGvB,MAAM,mCAAmC,CAAC;AAI3C,eAAO,MAAM,kBAAkB,EAAE,sBAAsB,CAAC,mBAAmB,CA+I1E,CAAC"}
|
|
@@ -50,61 +50,43 @@ export const SQLiteAdapterNitro = {
|
|
|
50
50
|
await db.close?.();
|
|
51
51
|
},
|
|
52
52
|
withTransaction: async (fn) => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
enqueue(q, p ?? []);
|
|
91
|
-
return {};
|
|
92
|
-
},
|
|
93
|
-
};
|
|
94
|
-
await fn(txExecutor);
|
|
95
|
-
if (statements.length === 0)
|
|
96
|
-
return;
|
|
97
|
-
await db.executeAsync("BEGIN");
|
|
98
|
-
try {
|
|
99
|
-
for (const { sql, params } of statements) {
|
|
100
|
-
await db.executeAsync(sql, params);
|
|
101
|
-
}
|
|
102
|
-
await db.executeAsync("COMMIT");
|
|
103
|
-
}
|
|
104
|
-
catch (err) {
|
|
105
|
-
await db.executeAsync("ROLLBACK").catch(() => { });
|
|
106
|
-
throw err;
|
|
107
|
-
}
|
|
53
|
+
await db.transaction(async (tx) => {
|
|
54
|
+
const txExecutor = {
|
|
55
|
+
runAsync: async (sql, params) => await tx.executeAsync(sql, params ?? []),
|
|
56
|
+
execAsync: async (statement) => {
|
|
57
|
+
await tx.executeAsync(statement);
|
|
58
|
+
},
|
|
59
|
+
getAllAsync: async (sql, params) => {
|
|
60
|
+
const result = await tx.executeAsync(sql, params ?? []);
|
|
61
|
+
return result.rows?._array ?? [];
|
|
62
|
+
},
|
|
63
|
+
getFirstAsync: async (sql, params) => {
|
|
64
|
+
const result = await tx.executeAsync(sql, params ?? []);
|
|
65
|
+
return result.rows?._array?.[0] ?? null;
|
|
66
|
+
},
|
|
67
|
+
query: async (sql, params) => {
|
|
68
|
+
const { sql: q, params: p } = params
|
|
69
|
+
? namedToPositional(sql, params)
|
|
70
|
+
: { sql, params: [] };
|
|
71
|
+
const result = await tx.executeAsync(q, p ?? []);
|
|
72
|
+
return result.rows?._array ?? [];
|
|
73
|
+
},
|
|
74
|
+
queryOne: async (sql, params) => {
|
|
75
|
+
const { sql: q, params: p } = params
|
|
76
|
+
? namedToPositional(sql, params)
|
|
77
|
+
: { sql, params: [] };
|
|
78
|
+
const result = await tx.executeAsync(q, p ?? []);
|
|
79
|
+
return result.rows?._array?.[0] ?? null;
|
|
80
|
+
},
|
|
81
|
+
execute: async (sql, params) => {
|
|
82
|
+
const { sql: q, params: p } = params
|
|
83
|
+
? namedToPositional(sql, params)
|
|
84
|
+
: { sql, params: [] };
|
|
85
|
+
return await tx.executeAsync(q, p ?? []);
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
await fn(txExecutor);
|
|
89
|
+
});
|
|
108
90
|
},
|
|
109
91
|
};
|
|
110
92
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/query/builder/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EAEX,WAAW,EACX,cAAc,EAEf,MAAM,4BAA4B,CAAC;AAGpC,OAAO,oBAAoB,MAAM,QAAQ,CAAC;AAE1C;;;;GAIG;AACH,qBAAa,qBAAqB,CAChC,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,EACjB,CAAC;IAED,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD;;;OAGG;gBACS,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAI1C;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM;IAOlB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,eAAe,CACb,EAAE,EAAE,CAAC,EAAE,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EACxE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/query/builder/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EAEX,WAAW,EACX,cAAc,EAEf,MAAM,4BAA4B,CAAC;AAGpC,OAAO,oBAAoB,MAAM,QAAQ,CAAC;AAE1C;;;;GAIG;AACH,qBAAa,qBAAqB,CAChC,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,EACjB,CAAC;IAED,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD;;;OAGG;gBACS,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAI1C;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM;IAOlB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,eAAe,CACb,EAAE,EAAE,CAAC,EAAE,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EACxE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAAA;KAAE;CA0D3D;AAED,KAAK,6BAA6B,CAChC,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,EACjB,CAAC,IACC,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAE5D,MAAM,MAAM,0BAA0B,GAAG,6BAA6B,CACpE,WAAW,EACX,OAAO,EACP,WAAW,CACZ,CAAC;AACF,MAAM,MAAM,eAAe,GAAG,6BAA6B,CACzD,WAAW,EACX,OAAO,EACP,WAAW,CACZ,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,SAAS,kDAyBiC,CAAC"}
|
|
@@ -81,17 +81,18 @@ export class SupastashQueryBuilder {
|
|
|
81
81
|
type: "remoteOnly",
|
|
82
82
|
};
|
|
83
83
|
});
|
|
84
|
-
|
|
85
|
-
// wait for all (fail fast)
|
|
84
|
+
const queue = async () => {
|
|
86
85
|
for (const state of newStates) {
|
|
87
86
|
await queueRemoteCall(state);
|
|
88
87
|
}
|
|
88
|
+
};
|
|
89
|
+
if (options?.syncMode === "await-all") {
|
|
90
|
+
// wait for all (fail fast)
|
|
91
|
+
await queue();
|
|
89
92
|
}
|
|
90
93
|
else {
|
|
91
94
|
// fire and forget (default)
|
|
92
|
-
|
|
93
|
-
queueRemoteCall(state);
|
|
94
|
-
}
|
|
95
|
+
queue();
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteChunks.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/sync/pushLocal/deleteChunks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"deleteChunks.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/sync/pushLocal/deleteChunks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA2DzD;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,WAAW,EAAE,iBAc/B"}
|
|
@@ -12,13 +12,11 @@ const SQL_CHUNK = 999;
|
|
|
12
12
|
*/
|
|
13
13
|
async function permanentlyDeleteLocally(table, ids) {
|
|
14
14
|
const db = await getSupastashDb();
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
});
|
|
15
|
+
for (let i = 0; i < ids.length; i += SQL_CHUNK) {
|
|
16
|
+
const slice = ids.slice(i, i + SQL_CHUNK);
|
|
17
|
+
const placeholders = slice.map(() => "?").join(", ");
|
|
18
|
+
await db.runAsync(`DELETE FROM ${table} WHERE id IN (${placeholders})`, slice);
|
|
19
|
+
}
|
|
22
20
|
}
|
|
23
21
|
/**
|
|
24
22
|
* Deletes a chunk of data from the remote database
|