Skip to content

Commit 188f14f

Browse files
get, getAll and getOptional should execute in a readLock
1 parent 7f7d857 commit 188f14f

File tree

1 file changed

+11
-1
lines changed
  • packages/powersync-sdk-react-native/src/db/adapters/react-native-quick-sqlite

1 file changed

+11
-1
lines changed

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

Lines changed: 11 additions & 1 deletion
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({ execute: this.baseDB.execute });
28+
const topLevelUtils = this.generateDBHelpers({ execute: this.readOnlyExecute });
2929
this.getAll = topLevelUtils.getAll;
3030
this.getOptional = topLevelUtils.getOptional;
3131
this.get = topLevelUtils.get;
@@ -55,6 +55,16 @@ export class RNQSDBAdapter extends BaseObserver<DBAdapterListener> implements DB
5555
return this.baseDB.execute(query, params);
5656
}
5757

58+
/**
59+
* This provides a top-level read only execute method which is executed inside a read lock.
60+
* This is necessary since the high level `execute` method uses a write-lock under
61+
* the hood. Helper methods such as `get`, `getAll` and `getOptional` are read only,
62+
* and should use this method.
63+
*/
64+
private readOnlyExecute(sql: string, params?: any[]) {
65+
return this.readLock(ctx => ctx.execute(sql, params));
66+
}
67+
5868
/**
5969
* Adds DB get utils to lock contexts and transaction contexts
6070
* @param tx

0 commit comments

Comments
 (0)