Skip to content

Commit

Permalink
Add experimental sqlite web
Browse files Browse the repository at this point in the history
  • Loading branch information
cachapa committed Apr 2, 2023
1 parent 7c4cd1b commit 9cb4418
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 15 deletions.
18 changes: 12 additions & 6 deletions sqlite_crdt/lib/sqlite_crdt.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,12 @@ import 'package:sqflite_common/sqlite_api.dart';
// ignore: implementation_imports
import 'package:sqflite_common/src/open_options.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:sqflite_common_ffi_web/sqflite_ffi_web.dart';
import 'package:sql_crdt/sql_crdt.dart';
import 'package:sqlite_crdt/src/sqlite_api.dart';

import 'src/is_web_locator.dart';

export 'package:sqflite_common/sqlite_api.dart';
export 'package:sql_crdt/sql_crdt.dart';

Expand Down Expand Up @@ -42,15 +45,18 @@ class SqliteCrdt {
FutureOr<void> Function(BaseCrdt crdt, int version)? onCreate,
FutureOr<void> Function(BaseCrdt crdt, int from, int to)? onUpgrade,
) async {
assert((path != null) ^ inMemory);
if (sqliteCrdtIsWeb && !inMemory && path!.contains('/')) {
path = path.substring(path.lastIndexOf('/') + 1);
}
assert(inMemory || path!.isNotEmpty);
final databaseFactory =
sqliteCrdtIsWeb ? databaseFactoryFfiWeb : databaseFactoryFfi;

// Initialize FFI
sqfliteFfiInit();
if (Platform.isLinux) {
await databaseFactoryFfi.setDatabasesPath('.');
if (!sqliteCrdtIsWeb && Platform.isLinux) {
await databaseFactory.setDatabasesPath('.');
}

final db = await databaseFactoryFfi.openDatabase(
final db = await databaseFactory.openDatabase(
inMemory ? inMemoryDatabasePath : path!,
options: SqfliteOpenDatabaseOptions(
singleInstance: singleInstance,
Expand Down
1 change: 1 addition & 0 deletions sqlite_crdt/lib/src/is_web_io.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
const sqliteCrdtIsWeb = false;
3 changes: 3 additions & 0 deletions sqlite_crdt/lib/src/is_web_locator.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import 'is_web_io.dart' if (dart.library.html) 'is_web_web.dart' as test;

bool get sqliteCrdtIsWeb => test.sqliteCrdtIsWeb;
1 change: 1 addition & 0 deletions sqlite_crdt/lib/src/is_web_web.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
const sqliteCrdtIsWeb = true;
1 change: 1 addition & 0 deletions sqlite_crdt/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ dependencies:
sqflite_common: ^2.4.3
sqflite_common_ffi: ^2.2.2
sql_crdt: ^0.0.8+1
sqflite_common_ffi_web: ^0.3.3+2

dev_dependencies:
lints: any
Expand Down
18 changes: 9 additions & 9 deletions sqlite_crdt/test/sqlite_crdt_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -280,22 +280,22 @@ void main() {

Future<void> _insertUser(TimestampedCrdt crdt, int id, String name) =>
crdt.execute('''
INSERT INTO users (id, name)
VALUES (?1, ?2)
''', [id, name]);
INSERT INTO users (id, name)
VALUES (?1, ?2)
''', [id, name]);

Future<void> _updateUser(TimestampedCrdt crdt, int id, String name) =>
crdt.execute('''
UPDATE users SET name = ?2
WHERE id = ?1
''', [id, name]);
UPDATE users SET name = ?2
WHERE id = ?1
''', [id, name]);

Future<void> _deleteUser(TimestampedCrdt crdt, int id) =>
crdt.execute('DELETE FROM users WHERE id = ?1', [id]);

Future<void> _insertPurchase(
TimestampedCrdt crdt, int id, int userId, double price) =>
crdt.execute('''
INSERT INTO purchases (id, user_id, price)
VALUES (?1, ?2, ?3)
''', [id, userId, price]);
INSERT INTO purchases (id, user_id, price)
VALUES (?1, ?2, ?3)
''', [id, userId, price]);

0 comments on commit 9cb4418

Please sign in to comment.