Skip to content

Commit cc09578

Browse files
committed
web: Fix finding preferrable implementation
1 parent 8456ca6 commit cc09578

File tree

4 files changed

+39
-5
lines changed

4 files changed

+39
-5
lines changed

sqlite3_web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.1.2-wip
2+
3+
- Fix preferred databases not being sorted correctly.
4+
15
## 0.1.1-wip
26

37
- Fix remote error after closing databases.

sqlite3_web/lib/src/client.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ final class DatabaseClient implements WebSqlite {
365365

366366
// Enum values are ordered by preferrability, so just pick the best option
367367
// left.
368-
availableImplementations.sort(_preferrableMode);
368+
availableImplementations.sort(preferrableMode);
369369

370370
final (storage, access) = availableImplementations.firstOrNull ??
371371
(StorageMode.inMemory, AccessMode.inCurrentContext);
@@ -384,17 +384,17 @@ final class DatabaseClient implements WebSqlite {
384384
///
385385
/// Returns negative values if `a` is more preferrable than `b` and positive
386386
/// values if `b` is more preferrable than `a`.
387-
static int _preferrableMode(
387+
static int preferrableMode(
388388
(StorageMode, AccessMode) a, (StorageMode, AccessMode) b) {
389389
// First, prefer OPFS (an actual file system API) over IndexedDB, a custom
390390
// file system implementation.
391391
if (a.$1 != b.$1) {
392-
return a.$1.index.compareTo(b.$2.index);
392+
return a.$1.index.compareTo(b.$1.index);
393393
}
394394

395395
// In a storage API, prefer shared workers which cause less contention
396396
// because we can actually share database resources between tabs.
397-
return a.$2.index.compareTo(a.$2.index);
397+
return a.$2.index.compareTo(b.$2.index);
398398
}
399399
}
400400

sqlite3_web/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: sqlite3_web
22
description: Utilities to simplify accessing sqlite3 on the web, with automated feature detection.
3-
version: 0.1.1-wip
3+
version: 0.1.2-wip
44
homepage: https://github.com/simolus3/sqlite3.dart/tree/main/sqlite3_web
55
repository: https://github.com/simolus3/sqlite3.dart
66

sqlite3_web/test/client_test.dart

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
@TestOn('browser')
2+
library;
3+
4+
import 'package:sqlite3_web/sqlite3_web.dart';
5+
import 'package:sqlite3_web/src/client.dart';
6+
import 'package:test/test.dart';
7+
8+
void main() {
9+
test('finds preferrable implementations', () {
10+
final all = [
11+
for (final storage in StorageMode.values)
12+
for (final access in AccessMode.values) (storage, access)
13+
];
14+
15+
all.shuffle();
16+
all.sort(DatabaseClient.preferrableMode);
17+
18+
expect(all, [
19+
(StorageMode.opfs, AccessMode.throughSharedWorker),
20+
(StorageMode.opfs, AccessMode.throughDedicatedWorker),
21+
(StorageMode.opfs, AccessMode.inCurrentContext),
22+
(StorageMode.indexedDb, AccessMode.throughSharedWorker),
23+
(StorageMode.indexedDb, AccessMode.throughDedicatedWorker),
24+
(StorageMode.indexedDb, AccessMode.inCurrentContext),
25+
(StorageMode.inMemory, AccessMode.throughSharedWorker),
26+
(StorageMode.inMemory, AccessMode.throughDedicatedWorker),
27+
(StorageMode.inMemory, AccessMode.inCurrentContext),
28+
]);
29+
});
30+
}

0 commit comments

Comments
 (0)