Skip to content

Commit dffdf1e

Browse files
update API to async execute methods
1 parent ca458d3 commit dffdf1e

File tree

9 files changed

+61
-63
lines changed

9 files changed

+61
-63
lines changed

packages/powersync-sdk-common/src/client/AbstractPowerSyncDatabase.ts

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -149,19 +149,19 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
149149

150150
// TODO DB name, verify this is necessary with extension
151151
await this.database.writeTransaction(async (tx) => {
152-
await tx.executeAsync('DELETE FROM ps_oplog WHERE 1');
153-
await tx.executeAsync('DELETE FROM ps_crud WHERE 1');
154-
await tx.executeAsync('DELETE FROM ps_buckets WHERE 1');
152+
await tx.execute('DELETE FROM ps_oplog WHERE 1');
153+
await tx.execute('DELETE FROM ps_crud WHERE 1');
154+
await tx.execute('DELETE FROM ps_buckets WHERE 1');
155155

156-
const existingTableRows = await tx.executeAsync(
156+
const existingTableRows = await tx.execute(
157157
"SELECT name FROM sqlite_master WHERE type='table' AND name GLOB 'ps_data_*'"
158158
);
159159

160160
if (!existingTableRows.rows.length) {
161161
return;
162162
}
163163
for (const row of existingTableRows.rows._array) {
164-
await tx.executeAsync(`DELETE FROM ${row.name} WHERE 1`);
164+
await tx.execute(`DELETE FROM ${row.name} WHERE 1`);
165165
}
166166
});
167167
}
@@ -187,14 +187,12 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
187187
async getUploadQueueStats(includeSize?: boolean): Promise<UploadQueueStats> {
188188
return this.readTransaction(async (tx) => {
189189
if (includeSize) {
190-
const result = await tx.executeAsync(
191-
'SELECT SUM(cast(data as blob) + 20) as size, count(*) as count FROM ps_crud'
192-
);
190+
const result = await tx.execute('SELECT SUM(cast(data as blob) + 20) as size, count(*) as count FROM ps_crud');
193191

194192
const row = result.rows.item(0);
195193
return new UploadQueueStats(row?.count ?? 0, row?.size ?? 0);
196194
} else {
197-
const result = await tx.executeAsync('SELECT count(*) as count FROM ps_crud');
195+
const result = await tx.execute('SELECT count(*) as count FROM ps_crud');
198196
const row = result.rows.item(0);
199197
return new UploadQueueStats(row?.count ?? 0);
200198
}
@@ -237,11 +235,11 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
237235
const last = all[all.length - 1];
238236
return new CrudBatch(all, haveMore, async (writeCheckpoint?: string) => {
239237
await this.writeTransaction(async (tx) => {
240-
await tx.executeAsync('DELETE FROM ps_crud WHERE id <= ?', [last.clientId]);
241-
if (writeCheckpoint != null && (await tx.executeAsync('SELECT 1 FROM ps_crud LIMIT 1')) == null) {
242-
await tx.executeAsync("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [writeCheckpoint]);
238+
await tx.execute('DELETE FROM ps_crud WHERE id <= ?', [last.clientId]);
239+
if (writeCheckpoint != null && (await tx.execute('SELECT 1 FROM ps_crud LIMIT 1')) == null) {
240+
await tx.execute("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [writeCheckpoint]);
243241
} else {
244-
await tx.executeAsync("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [
242+
await tx.execute("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [
245243
this.bucketStorageAdapter.getMaxOpId()
246244
]);
247245
}
@@ -264,7 +262,7 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
264262
*/
265263
async getNextCrudTransaction(): Promise<CrudTransaction> {
266264
return await this.readTransaction(async (tx) => {
267-
const first = await tx.executeAsync('SELECT id, tx_id, data FROM ps_crud ORDER BY id ASC LIMIT 1');
265+
const first = await tx.execute('SELECT id, tx_id, data FROM ps_crud ORDER BY id ASC LIMIT 1');
268266

269267
if (!first.rows.length) {
270268
return null;
@@ -275,9 +273,7 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
275273
if (!txId) {
276274
all = [CrudEntry.fromRow(first.rows.item(0))];
277275
} else {
278-
const result = await tx.executeAsync('SELECT id, tx_id, data FROM ps_crud WHERE tx_id = ? ORDER BY id ASC', [
279-
txId
280-
]);
276+
const result = await tx.execute('SELECT id, tx_id, data FROM ps_crud WHERE tx_id = ? ORDER BY id ASC', [txId]);
281277
all = result.rows._array.map((row) => CrudEntry.fromRow(row));
282278
}
283279

@@ -287,14 +283,14 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
287283
all,
288284
async (writeCheckpoint?: string) => {
289285
await this.writeTransaction(async (tx) => {
290-
await tx.executeAsync('DELETE FROM ps_crud WHERE id <= ?', [last.clientId]);
286+
await tx.execute('DELETE FROM ps_crud WHERE id <= ?', [last.clientId]);
291287
if (writeCheckpoint) {
292-
const check = await tx.executeAsync('SELECT 1 FROM ps_crud LIMIT 1');
288+
const check = await tx.execute('SELECT 1 FROM ps_crud LIMIT 1');
293289
if (!check.rows?.length) {
294-
await tx.executeAsync("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [writeCheckpoint]);
290+
await tx.execute("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [writeCheckpoint]);
295291
}
296292
} else {
297-
await tx.executeAsync("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [
293+
await tx.execute("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [
298294
this.bucketStorageAdapter.getMaxOpId()
299295
]);
300296
}
@@ -368,7 +364,7 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
368364
return this.database.readTransaction(
369365
async (tx) => {
370366
const res = await callback({ ...tx });
371-
await tx.rollbackAsync();
367+
await tx.rollback();
372368
return res;
373369
},
374370
{ timeoutMs: lockTimeout }
@@ -383,7 +379,7 @@ export abstract class AbstractPowerSyncDatabase extends BaseObserver<PowerSyncDB
383379
return this.database.writeTransaction(
384380
async (tx) => {
385381
const res = await callback(tx);
386-
await tx.commitAsync();
382+
await tx.commit();
387383
_.defer(() => this.syncStreamImplementation?.triggerCrudUpload());
388384
return res;
389385
},

packages/powersync-sdk-common/src/client/sync/bucket/SqliteBucketStorage.ts

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export class SqliteBucketStorage implements BucketStorageAdapter {
6161
await this.writeTransaction(async (tx) => {
6262
let count = 0;
6363
for (let b of batch.buckets) {
64-
const result = await tx.executeAsync('INSERT INTO powersync_operations(op, data) VALUES(?, ?)', [
64+
const result = await tx.execute('INSERT INTO powersync_operations(op, data) VALUES(?, ?)', [
6565
'save',
6666
JSON.stringify({ buckets: [b.toJSON()] })
6767
]);
@@ -92,14 +92,14 @@ export class SqliteBucketStorage implements BucketStorageAdapter {
9292
this.logger.debug('Deleting bucket', bucket);
9393
// This
9494
await this.writeTransaction(async (tx) => {
95-
await tx.executeAsync(
95+
await tx.execute(
9696
`UPDATE ps_oplog SET op=${OpTypeEnum.REMOVE}, data=NULL WHERE op=${OpTypeEnum.PUT} AND superseded=0 AND bucket=?`,
9797
[bucket]
9898
);
9999
// Rename bucket
100-
await tx.executeAsync('UPDATE ps_oplog SET bucket=? WHERE bucket=?', [newName, bucket]);
101-
await tx.executeAsync('DELETE FROM ps_buckets WHERE name = ?', [bucket]);
102-
await tx.executeAsync(
100+
await tx.execute('UPDATE ps_oplog SET bucket=? WHERE bucket=?', [newName, bucket]);
101+
await tx.execute('DELETE FROM ps_buckets WHERE name = ?', [bucket]);
102+
await tx.execute(
103103
'INSERT INTO ps_buckets(name, pending_delete, last_op) SELECT ?, 1, IFNULL(MAX(op_id), 0) FROM ps_oplog WHERE bucket = ?',
104104
[newName, newName]
105105
);
@@ -132,13 +132,13 @@ export class SqliteBucketStorage implements BucketStorageAdapter {
132132

133133
const bucketNames = checkpoint.buckets.map((b) => b.bucket);
134134
await this.writeTransaction(async (tx) => {
135-
await tx.executeAsync(
136-
`UPDATE ps_buckets SET last_op = ? WHERE name IN (SELECT json_each.value FROM json_each(?))`,
137-
[checkpoint.last_op_id, JSON.stringify(bucketNames)]
138-
);
135+
await tx.execute(`UPDATE ps_buckets SET last_op = ? WHERE name IN (SELECT json_each.value FROM json_each(?))`, [
136+
checkpoint.last_op_id,
137+
JSON.stringify(bucketNames)
138+
]);
139139

140140
if (checkpoint.write_checkpoint) {
141-
await tx.executeAsync("UPDATE ps_buckets SET last_op = ? WHERE name = '$local'", [checkpoint.write_checkpoint]);
141+
await tx.execute("UPDATE ps_buckets SET last_op = ? WHERE name = '$local'", [checkpoint.write_checkpoint]);
142142
}
143143
});
144144

@@ -167,7 +167,7 @@ export class SqliteBucketStorage implements BucketStorageAdapter {
167167
* It's best to execute this on the same thread
168168
* https://github.com/journeyapps/powersync-sqlite-core/blob/40554dc0e71864fe74a0cb00f1e8ca4e328ff411/crates/sqlite/sqlite/sqlite3.h#L2578
169169
*/
170-
const { insertId: result } = await tx.executeAsync('INSERT INTO powersync_operations(op, data) VALUES(?, ?)', [
170+
const { insertId: result } = await tx.execute('INSERT INTO powersync_operations(op, data) VALUES(?, ?)', [
171171
'sync_local',
172172
''
173173
]);
@@ -219,10 +219,10 @@ export class SqliteBucketStorage implements BucketStorageAdapter {
219219
private async deletePendingBuckets() {
220220
if (this.pendingBucketDeletes !== false) {
221221
await this.writeTransaction(async (tx) => {
222-
await tx.executeAsync(
222+
await tx.execute(
223223
'DELETE FROM ps_oplog WHERE bucket IN (SELECT name FROM ps_buckets WHERE pending_delete = 1 AND last_applied_op = last_op AND last_op >= target_op)'
224224
);
225-
await tx.executeAsync(
225+
await tx.execute(
226226
'DELETE FROM ps_buckets WHERE pending_delete = 1 AND last_applied_op = last_op AND last_op >= target_op'
227227
);
228228
});
@@ -237,7 +237,7 @@ export class SqliteBucketStorage implements BucketStorageAdapter {
237237
}
238238

239239
await this.writeTransaction(async (tx) => {
240-
await tx.executeAsync('INSERT INTO powersync_operations(op, data) VALUES (?, ?)', ['clear_remove_ops', '']);
240+
await tx.execute('INSERT INTO powersync_operations(op, data) VALUES (?, ?)', ['clear_remove_ops', '']);
241241
});
242242
this.compactCounter = 0;
243243
}
@@ -262,14 +262,14 @@ export class SqliteBucketStorage implements BucketStorageAdapter {
262262
this.logger.debug(`[updateLocalTarget] Updating target to checkpoint ${opId}`);
263263

264264
return this.writeTransaction(async (tx) => {
265-
const anyData = await tx.executeAsync('SELECT 1 FROM ps_crud LIMIT 1');
265+
const anyData = await tx.execute('SELECT 1 FROM ps_crud LIMIT 1');
266266
if (!!anyData.rows?.length) {
267267
// if isNotEmpty
268268
this.logger.debug('updateLocalTarget', 'ps crud is not empty');
269269
return false;
270270
}
271271

272-
const rs = await tx.executeAsync("SELECT seq FROM sqlite_sequence WHERE name = 'ps_crud'");
272+
const rs = await tx.execute("SELECT seq FROM sqlite_sequence WHERE name = 'ps_crud'");
273273
if (!rs.rows?.length) {
274274
// assert isNotEmpty
275275
throw new Error('SQlite Sequence should not be empty');
@@ -283,7 +283,7 @@ export class SqliteBucketStorage implements BucketStorageAdapter {
283283
return false;
284284
}
285285

286-
const response = await tx.executeAsync("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [opId]);
286+
const response = await tx.execute("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [opId]);
287287
this.logger.debug(['[updateLocalTarget] Response from updating target_op ', JSON.stringify(response)]);
288288
return true;
289289
});
@@ -320,14 +320,14 @@ export class SqliteBucketStorage implements BucketStorageAdapter {
320320
haveMore: true,
321321
complete: async (writeCheckpoint?: string) => {
322322
return this.writeTransaction(async (tx) => {
323-
await tx.executeAsync('DELETE FROM ps_crud WHERE id <= ?', [last.clientId]);
323+
await tx.execute('DELETE FROM ps_crud WHERE id <= ?', [last.clientId]);
324324
if (writeCheckpoint) {
325-
const crudResult = await tx.executeAsync('SELECT 1 FROM ps_crud LIMIT 1');
325+
const crudResult = await tx.execute('SELECT 1 FROM ps_crud LIMIT 1');
326326
if (crudResult.rows?.length) {
327-
await tx.executeAsync("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [writeCheckpoint]);
327+
await tx.execute("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [writeCheckpoint]);
328328
}
329329
} else {
330-
await tx.executeAsync("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [this.getMaxOpId()]);
330+
await tx.execute("UPDATE ps_buckets SET target_op = ? WHERE name='$local'", [this.getMaxOpId()]);
331331
}
332332
});
333333
}

packages/powersync-sdk-common/src/client/sync/stream/AbstractStreamingSyncImplementation.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,14 +269,17 @@ export abstract class AbstractStreamingSyncImplementation extends BaseObserver<S
269269
}
270270

271271
async *streamingSyncRequest(req: StreamingSyncRequest, signal: AbortSignal): AsyncGenerator<StreamingSyncLine> {
272+
console.log('sending request');
272273
const body = await this.options.remote.postStreaming('/sync/stream', req, {}, signal);
274+
console.log('[streamingSyncRequest]', body);
273275
const stream = ndjsonStream(body);
274276
const reader = stream.getReader();
275277

276278
try {
277279
while (true) {
278280
// Read from the stream
279281
const { done, value } = await reader.read();
282+
console.log('value', value);
280283
// Exit if we're done
281284
if (done) return;
282285
// Else yield the chunk

packages/powersync-sdk-common/src/db/DBAdapter.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,12 @@ export interface DBGetUtils {
3838
}
3939

4040
export interface LockContext extends DBGetUtils {
41-
execute: (query: string, params?: any[] | undefined) => QueryResult;
42-
executeAsync: (query: string, params?: any[] | undefined) => Promise<QueryResult>;
41+
execute: (query: string, params?: any[] | undefined) => Promise<QueryResult>;
4342
}
4443

4544
export interface Transaction extends LockContext {
46-
commit: () => QueryResult;
47-
commitAsync: () => Promise<QueryResult>;
48-
rollback: () => QueryResult;
49-
rollbackAsync: () => Promise<QueryResult>;
45+
commit: () => Promise<QueryResult>;
46+
rollback: () => Promise<QueryResult>;
5047
}
5148

5249
/**

packages/powersync-sdk-react-native/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,9 +427,9 @@ export const ListsWidget = () => {
427427
try {
428428
await PowerSync.writeTransaction(async (tx) => {
429429
// Delete the main list
430-
await tx.executeAsync(`DELETE FROM lists WHERE id = ?`, [item.id]);
430+
await tx.execute(`DELETE FROM lists WHERE id = ?`, [item.id]);
431431
// Delete any children of the list
432-
await tx.executeAsync(`DELETE FROM todos WHERE list_id = ?`, [item.id]);
432+
await tx.execute(`DELETE FROM todos WHERE list_id = ?`, [item.id]);
433433

434434
// Transactions are automatically committed at the end of execution
435435
// Transactions are automatically rolled back if an exception ocurred

packages/powersync-sdk-react-native/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
},
2525
"homepage": "https://docs.powersync.co/",
2626
"peerDependencies": {
27-
"@journeyapps/react-native-quick-sqlite": "0.0.0-dev-20231024112335",
27+
"@journeyapps/react-native-quick-sqlite": "0.0.0-dev-20231026145554",
2828
"base-64": "^1.0.0",
2929
"react": "*",
3030
"react-native-fetch-api": "^3.0.0",
@@ -40,7 +40,7 @@
4040
"async-lock": "^1.4.0"
4141
},
4242
"devDependencies": {
43-
"@journeyapps/react-native-quick-sqlite": "0.0.0-dev-20231024112335",
43+
"@journeyapps/react-native-quick-sqlite": "0.0.0-dev-20231026145554",
4444
"@types/async-lock": "^1.4.0",
4545
"react": "18.2.0",
4646
"typescript": "^4.1.3"

packages/powersync-sdk-react-native/src/db/adapters/react-native-quick-sqlite/RNQSDBAdapter.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class RNQSDBAdapter extends BaseObserver<DBAdapterListener> implements DB
2525
this.iterateListeners((cb) => cb.tablesUpdated?.(update));
2626
});
2727

28-
const topLevelUtils = this.generateDBHelpers({ executeAsync: this.baseDB.execute });
28+
const topLevelUtils = this.generateDBHelpers({ execute: this.baseDB.execute });
2929
this.getAll = topLevelUtils.getAll;
3030
this.getOptional = topLevelUtils.getOptional;
3131
this.get = topLevelUtils.get;
@@ -60,7 +60,7 @@ export class RNQSDBAdapter extends BaseObserver<DBAdapterListener> implements DB
6060
* @param tx
6161
* @returns
6262
*/
63-
private generateDBHelpers<T extends { executeAsync: (sql: string, params?: any[]) => Promise<QueryResult> }>(
63+
private generateDBHelpers<T extends { execute: (sql: string, params?: any[]) => Promise<QueryResult> }>(
6464
tx: T
6565
): T & DBGetUtils {
6666
return {
@@ -69,23 +69,23 @@ export class RNQSDBAdapter extends BaseObserver<DBAdapterListener> implements DB
6969
* Execute a read-only query and return results
7070
*/
7171
async getAll<T>(sql: string, parameters?: any[]): Promise<T[]> {
72-
const res = await tx.executeAsync(sql, parameters);
72+
const res = await tx.execute(sql, parameters);
7373
return res.rows?._array ?? [];
7474
},
7575

7676
/**
7777
* Execute a read-only query and return the first result, or null if the ResultSet is empty.
7878
*/
7979
async getOptional<T>(sql: string, parameters?: any[]): Promise<T | null> {
80-
const res = await tx.executeAsync(sql, parameters);
80+
const res = await tx.execute(sql, parameters);
8181
return res.rows?.item(0) ?? null;
8282
},
8383

8484
/**
8585
* Execute a read-only query and return the first result, error if the ResultSet is empty.
8686
*/
8787
async get<T>(sql: string, parameters?: any[]): Promise<T> {
88-
const res = await tx.executeAsync(sql, parameters);
88+
const res = await tx.execute(sql, parameters);
8989
const first = res.rows?.item(0);
9090
if (!first) {
9191
throw new Error('Result set is empty');

packages/powersync-sdk-react-native/src/sync/stream/ReactNativeRemote.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ export class ReactNativeRemote extends AbstractRemote {
7070
error.status = res.status;
7171
throw error;
7272
}
73+
74+
console.log(res.body);
7375
return res.body;
7476
}
7577
}

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2134,10 +2134,10 @@
21342134
"@types/yargs" "^17.0.8"
21352135
chalk "^4.0.0"
21362136

2137-
"@journeyapps/react-native-quick-sqlite@0.0.0-dev-20231024112335":
2138-
version "0.0.0-dev-20231024112335"
2139-
resolved "https://registry.npmjs.org/@journeyapps/react-native-quick-sqlite/-/react-native-quick-sqlite-0.0.0-dev-20231024112335.tgz#a386b718baef17cb1d51eebaa0487cc5cf19a864"
2140-
integrity sha512-Jpn+OSQ39xyJ6rnw06XPPHo1YrnCDOrZPaYGvVUEvUgjcMFYfmJ5YH0StM+/KnUcatKxksXYWyPiBqWO/Gg+hA==
2137+
"@journeyapps/react-native-quick-sqlite@0.0.0-dev-20231026145554":
2138+
version "0.0.0-dev-20231026145554"
2139+
resolved "https://registry.npmjs.org/@journeyapps/react-native-quick-sqlite/-/react-native-quick-sqlite-0.0.0-dev-20231026145554.tgz#bb2169f270d58b03fd7a8e3a81a956563010e45a"
2140+
integrity sha512-0JCfOsgfynOKCPoP7YijpGamBBG0AQi/3Ai01WV6mbJylGGHCPeWo3ErM0x02eL5sIiy64ZIFUsTNhxt/Z5dIg==
21412141
dependencies:
21422142
lodash "^4.17.21"
21432143

0 commit comments

Comments
 (0)