Skip to content

Commit b2f95d9

Browse files
Christiaan LandmanChristiaan Landman
Christiaan Landman
authored and
Christiaan Landman
committed
Merge branch 'main' into fix-temp-store
2 parents 0fb8b34 + 40c6dd0 commit b2f95d9

File tree

5 files changed

+23
-10
lines changed

5 files changed

+23
-10
lines changed

.changeset/breezy-cougars-hope.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@journeyapps/react-native-quick-sqlite': patch
3+
---
4+
5+
Fix race condition where table change notications would trigger before COMMIT had completed.

src/DBListenerManager.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,10 @@ export class DBListenerManagerInternal extends DBListenerManager {
5353
registerUpdateHook(this.options.dbName, (update) => this.handleTableUpdates(update));
5454
registerTransactionHook(this.options.dbName, (eventType) => {
5555
switch (eventType) {
56-
case TransactionEvent.COMMIT:
57-
this.flushUpdates();
58-
break;
56+
/**
57+
* COMMIT hooks occur before the commit is completed. This leads to race conditions.
58+
* Only use the rollback event to clear updates.
59+
*/
5960
case TransactionEvent.ROLLBACK:
6061
this.transactionReverted();
6162
break;

tests/ios/Podfile.lock

+4-4
Original file line numberDiff line numberDiff line change
@@ -930,7 +930,7 @@ PODS:
930930
- React-debug
931931
- react-native-get-random-values (1.9.0):
932932
- React-Core
933-
- react-native-quick-sqlite (1.1.3):
933+
- react-native-quick-sqlite (1.1.4):
934934
- powersync-sqlite-core (~> 0.1.6)
935935
- React
936936
- React-callinvoker
@@ -1321,7 +1321,7 @@ EXTERNAL SOURCES:
13211321

13221322
SPEC CHECKSUMS:
13231323
boost: d3f49c53809116a5d38da093a8aa78bf551aed09
1324-
DoubleConversion: fea03f2699887d960129cc54bba7e52542b6f953
1324+
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
13251325
EASClient: a42ee8bf36c93b3128352faf2ae49405ab4f80bd
13261326
EXConstants: 988aa430ca0f76b43cd46b66e7fae3287f9cc2fc
13271327
EXFont: f20669cb266ef48b004f1eb1f2b20db96cd1df9f
@@ -1338,7 +1338,7 @@ SPEC CHECKSUMS:
13381338
FBLazyVector: 84f6edbe225f38aebd9deaf1540a4160b1f087d7
13391339
FBReactNativeSpec: d0086a479be91c44ce4687a962956a352d2dc697
13401340
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
1341-
glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2
1341+
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
13421342
hermes-engine: b2669ce35fc4ac14f523b307aff8896799829fe2
13431343
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
13441344
powersync-sqlite-core: 4c38c8f470f6dca61346789fd5436a6826d1e3dd
@@ -1365,7 +1365,7 @@ SPEC CHECKSUMS:
13651365
React-logger: 0a57b68dd2aec7ff738195f081f0520724b35dab
13661366
React-Mapbuffer: 63913773ed7f96b814a2521e13e6d010282096ad
13671367
react-native-get-random-values: dee677497c6a740b71e5612e8dbd83e7539ed5bb
1368-
react-native-quick-sqlite: 2b663b5762b255d2047545fc95f58b0c246c265c
1368+
react-native-quick-sqlite: c4b0debdbfc2bcd282834f4268071e13a3c20cb4
13691369
react-native-safe-area-context: 0ee144a6170530ccc37a0fd9388e28d06f516a89
13701370
React-nativeconfig: d7af5bae6da70fa15ce44f045621cf99ed24087c
13711371
React-NativeModulesApple: 0123905d5699853ac68519607555a9a4f5c7b3ac

tests/tests/mocha/MochaRNAdapter.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import 'mocha';
22
import type * as MochaTypes from 'mocha';
33

44
export const rootSuite = new Mocha.Suite('') as MochaTypes.Suite;
5-
rootSuite.timeout(10 * 1000);
5+
rootSuite.timeout(60 * 1000);
66

77
let mochaContext = rootSuite;
88

tests/tests/sqlite/rawQueries.spec.ts

+9-2
Original file line numberDiff line numberDiff line change
@@ -566,15 +566,22 @@ export function registerBaseTests() {
566566
// Execute the read test whenever a table change ocurred
567567
db.registerTablesChangedHook((update) => readTriggerCallbacks.forEach((cb) => cb()));
568568

569+
// Needed for large volumes of data on older Android devices
570+
// https://github.com/margelo/react-native-quick-sqlite/pull/25
571+
await db.execute('PRAGMA temp_store = memory;')
572+
const numberOfUsers = 100_000;
569573
await db.writeLock(async (tx) => {
570574
await tx.execute('BEGIN');
571-
await createTestUser(tx);
575+
// Creates 100,000 Users
576+
for (let i = 0; i < numberOfUsers; i++) {
577+
await tx.execute('INSERT INTO User (id, name, age, networth) VALUES(?, ?, ?, ?)', [i, 'steven', i, 0])
578+
}
572579
await tx.execute('COMMIT');
573580
});
574581

575582
const resolved = await Promise.all(readerPromises);
576583
// The query result length for 1 item should be returned for all connections
577-
expect(resolved).to.deep.equal(readerPromises.map(() => 1));
584+
expect(resolved).to.deep.equal(readerPromises.map(() => numberOfUsers));
578585
});
579586

580587
it('Should attach DBs', async () => {

0 commit comments

Comments
 (0)