From e57b4e2520781946c70986f0b0e8d5ce3854e6e6 Mon Sep 17 00:00:00 2001 From: Jorge Sardina Date: Thu, 12 Sep 2024 13:24:41 +0200 Subject: [PATCH 1/8] WIP --- .DS_Store | Bin 0 -> 6148 bytes .../drift_sqlite_async/lib/src/connection.dart | 4 ++-- .../drift_sqlite_async/lib/src/executor.dart | 10 +++++----- .../lib/src/common/sqlite_database.dart | 2 ++ .../lib/src/impl/stub_sqlite_database.dart | 3 +++ .../lib/src/native/database/connection_pool.dart | 4 ++++ .../database/native_sqlite_connection_impl.dart | 1 + .../native/database/native_sqlite_database.dart | 3 +++ packages/sqlite_async/lib/src/web/database.dart | 3 +++ .../src/web/database/web_sqlite_database.dart | 3 +++ 10 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0{}; for (var tableName in event.tables) { diff --git a/packages/drift_sqlite_async/lib/src/executor.dart b/packages/drift_sqlite_async/lib/src/executor.dart index 91c6f7f..0b6b913 100644 --- a/packages/drift_sqlite_async/lib/src/executor.dart +++ b/packages/drift_sqlite_async/lib/src/executor.dart @@ -9,7 +9,9 @@ class _SqliteAsyncDelegate extends DatabaseDelegate { final SqliteConnection db; bool _closed = false; - _SqliteAsyncDelegate(this.db); + _SqliteAsyncDelegate( + this.db, + ); @override late final DbVersionDelegate versionDelegate = @@ -127,10 +129,8 @@ class _SqliteAsyncVersionDelegate extends DynamicVersionDelegate { /// Extnral update notifications from the [SqliteConnection] are _not_ forwarded /// automatically - use [SqliteAsyncDriftConnection] for that. class SqliteAsyncQueryExecutor extends DelegatedDatabase { - SqliteAsyncQueryExecutor(SqliteConnection db) - : super( - _SqliteAsyncDelegate(db), - ); + SqliteAsyncQueryExecutor(SqliteConnection db, {bool logStatements = false}) + : super(_SqliteAsyncDelegate(db), logStatements: logStatements); /// The underlying SqliteConnection used by drift to send queries. SqliteConnection get db { diff --git a/packages/sqlite_async/lib/src/common/sqlite_database.dart b/packages/sqlite_async/lib/src/common/sqlite_database.dart index f8e0be5..f7bc933 100644 --- a/packages/sqlite_async/lib/src/common/sqlite_database.dart +++ b/packages/sqlite_async/lib/src/common/sqlite_database.dart @@ -50,6 +50,8 @@ abstract class SqliteDatabase /// The maximum number of concurrent read transactions if not explicitly specified. static const int defaultMaxReaders = 5; + int get numConnections; + /// Open a SqliteDatabase. /// /// Only a single SqliteDatabase per [path] should be opened at a time. diff --git a/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart b/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart index 29db641..89b9967 100644 --- a/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart @@ -64,4 +64,7 @@ class SqliteDatabaseImpl Future getAutoCommit() { throw UnimplementedError(); } + + @override + int get numConnections => throw UnimplementedError(); } diff --git a/packages/sqlite_async/lib/src/native/database/connection_pool.dart b/packages/sqlite_async/lib/src/native/database/connection_pool.dart index 9521b34..475a90a 100644 --- a/packages/sqlite_async/lib/src/native/database/connection_pool.dart +++ b/packages/sqlite_async/lib/src/native/database/connection_pool.dart @@ -232,6 +232,10 @@ class SqliteConnectionPool with SqliteQueries implements SqliteConnection { await connection.refreshSchema(); } } + + getNumConnections() { + return _allReadConnections.length + (_writeConnection == null ? 0 : 1); + } } typedef ReadCallback = Future Function(SqliteReadContext tx); diff --git a/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart b/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart index b7ef76b..5b2f041 100644 --- a/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart +++ b/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart @@ -95,6 +95,7 @@ class SqliteConnectionImpl @override Future close() async { + print("Closing native sqlite Connection ${StackTrace.current}"); eventsPort?.close(); await _connectionMutex.lock(() async { if (readOnly) { diff --git a/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart b/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart index 5cb60f3..b47a614 100644 --- a/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart @@ -40,6 +40,9 @@ class SqliteDatabaseImpl late final SqliteConnectionImpl _internalConnection; late final SqliteConnectionPool _pool; + @override + int get numConnections => _pool.getNumConnections(); + final StreamController updatesController = StreamController.broadcast(); diff --git a/packages/sqlite_async/lib/src/web/database.dart b/packages/sqlite_async/lib/src/web/database.dart index b632aa7..03b8ec6 100644 --- a/packages/sqlite_async/lib/src/web/database.dart +++ b/packages/sqlite_async/lib/src/web/database.dart @@ -129,6 +129,9 @@ class WebDatabase } } } + + @override + int get numConnections => 0; } class _SharedContext implements SqliteReadContext { diff --git a/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart b/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart index 522b48e..90f0371 100644 --- a/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart @@ -139,4 +139,7 @@ class SqliteDatabaseImpl await isInitialized; return _connection.getAutoCommit(); } + + @override + int get numConnections => 0; } From 476a958912c44ba70e163575be46e9b545ac5146 Mon Sep 17 00:00:00 2001 From: David Martos Date: Mon, 23 Sep 2024 20:21:21 +0200 Subject: [PATCH 2/8] Support passing `logStatements` to drift --- packages/drift_sqlite_async/lib/src/connection.dart | 4 ++-- packages/drift_sqlite_async/lib/src/executor.dart | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/drift_sqlite_async/lib/src/connection.dart b/packages/drift_sqlite_async/lib/src/connection.dart index e375795..a1af55a 100644 --- a/packages/drift_sqlite_async/lib/src/connection.dart +++ b/packages/drift_sqlite_async/lib/src/connection.dart @@ -15,8 +15,8 @@ import 'package:sqlite_async/sqlite_async.dart'; class SqliteAsyncDriftConnection extends DatabaseConnection { late StreamSubscription _updateSubscription; - SqliteAsyncDriftConnection(SqliteConnection db) - : super(SqliteAsyncQueryExecutor(db)) { + SqliteAsyncDriftConnection(SqliteConnection db, {bool logStatements = false}) + : super(SqliteAsyncQueryExecutor(db, logStatements: logStatements)) { _updateSubscription = (db as SqliteQueries).updates!.listen((event) { var setUpdates = {}; for (var tableName in event.tables) { diff --git a/packages/drift_sqlite_async/lib/src/executor.dart b/packages/drift_sqlite_async/lib/src/executor.dart index 91c6f7f..b68e2e6 100644 --- a/packages/drift_sqlite_async/lib/src/executor.dart +++ b/packages/drift_sqlite_async/lib/src/executor.dart @@ -127,10 +127,8 @@ class _SqliteAsyncVersionDelegate extends DynamicVersionDelegate { /// Extnral update notifications from the [SqliteConnection] are _not_ forwarded /// automatically - use [SqliteAsyncDriftConnection] for that. class SqliteAsyncQueryExecutor extends DelegatedDatabase { - SqliteAsyncQueryExecutor(SqliteConnection db) - : super( - _SqliteAsyncDelegate(db), - ); + SqliteAsyncQueryExecutor(SqliteConnection db, {bool logStatements = false}) + : super(_SqliteAsyncDelegate(db), logStatements: logStatements); /// The underlying SqliteConnection used by drift to send queries. SqliteConnection get db { From a95b30c35a1c41efa3970a8b32b679ee1ce90367 Mon Sep 17 00:00:00 2001 From: Jorge Sardina Date: Tue, 24 Sep 2024 11:46:11 +0200 Subject: [PATCH 3/8] Get all connections --- .../common/connection/sync_sqlite_connection.dart | 5 +++++ .../lib/src/common/sqlite_database.dart | 1 + .../lib/src/impl/stub_sqlite_database.dart | 10 ++++++++++ .../lib/src/native/database/connection_pool.dart | 13 ++++++++++++- .../database/native_sqlite_connection_impl.dart | 5 +++++ .../src/native/database/native_sqlite_database.dart | 10 ++++++++++ .../sqlite_async/lib/src/sqlite_connection.dart | 2 ++ packages/sqlite_async/lib/src/web/database.dart | 10 ++++++++++ .../lib/src/web/database/web_sqlite_database.dart | 10 ++++++++++ 9 files changed, 65 insertions(+), 1 deletion(-) diff --git a/packages/sqlite_async/lib/src/common/connection/sync_sqlite_connection.dart b/packages/sqlite_async/lib/src/common/connection/sync_sqlite_connection.dart index f29520f..697d7eb 100644 --- a/packages/sqlite_async/lib/src/common/connection/sync_sqlite_connection.dart +++ b/packages/sqlite_async/lib/src/common/connection/sync_sqlite_connection.dart @@ -50,6 +50,11 @@ class SyncSqliteConnection extends SqliteConnection with SqliteQueries { Future getAutoCommit() async { return db.autocommit; } + + @override + int getNumConnections() { + return -1; + } } class SyncReadContext implements SqliteReadContext { diff --git a/packages/sqlite_async/lib/src/common/sqlite_database.dart b/packages/sqlite_async/lib/src/common/sqlite_database.dart index f7bc933..1a2dfe2 100644 --- a/packages/sqlite_async/lib/src/common/sqlite_database.dart +++ b/packages/sqlite_async/lib/src/common/sqlite_database.dart @@ -51,6 +51,7 @@ abstract class SqliteDatabase static const int defaultMaxReaders = 5; int get numConnections; + List getAllConnections(); /// Open a SqliteDatabase. /// diff --git a/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart b/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart index 89b9967..211f32b 100644 --- a/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart @@ -67,4 +67,14 @@ class SqliteDatabaseImpl @override int get numConnections => throw UnimplementedError(); + + @override + int getNumConnections() { + throw UnimplementedError(); + } + + @override + List getAllConnections() { + throw UnimplementedError(); + } } diff --git a/packages/sqlite_async/lib/src/native/database/connection_pool.dart b/packages/sqlite_async/lib/src/native/database/connection_pool.dart index 475a90a..50d2dd5 100644 --- a/packages/sqlite_async/lib/src/native/database/connection_pool.dart +++ b/packages/sqlite_async/lib/src/native/database/connection_pool.dart @@ -233,7 +233,18 @@ class SqliteConnectionPool with SqliteQueries implements SqliteConnection { } } - getNumConnections() { + List getAllConnections() { + final connections = []; + if (_writeConnection != null) { + connections.add(_writeConnection!); + } + connections.addAll(_allReadConnections); + return connections; + } + + int getNumConnections() { + print( + "TESTING READ: ${_allReadConnections.length} WRITE: ${_writeConnection == null ? 0 : 1}"); return _allReadConnections.length + (_writeConnection == null ? 0 : 1); } } diff --git a/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart b/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart index 5b2f041..1a15baa 100644 --- a/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart +++ b/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart @@ -159,6 +159,11 @@ class SqliteConnectionImpl }); }, timeout: lockTimeout); } + + @override + int getNumConnections() { + return -1; + } } int _nextCtxId = 1; diff --git a/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart b/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart index b47a614..365cc81 100644 --- a/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart @@ -174,4 +174,14 @@ class SqliteDatabaseImpl Future refreshSchema() { return _pool.refreshSchema(); } + + @override + int getNumConnections() { + return -1; + } + + @override + List getAllConnections() { + return _pool.getAllConnections(); + } } diff --git a/packages/sqlite_async/lib/src/sqlite_connection.dart b/packages/sqlite_async/lib/src/sqlite_connection.dart index f1b721a..e10136d 100644 --- a/packages/sqlite_async/lib/src/sqlite_connection.dart +++ b/packages/sqlite_async/lib/src/sqlite_connection.dart @@ -134,6 +134,8 @@ abstract class SqliteConnection extends SqliteWriteContext { /// Queries and watch calls can potentially use outdated schema information after a schema update. Future refreshSchema(); + int getNumConnections(); + /// Returns true if the connection is closed @override bool get closed; diff --git a/packages/sqlite_async/lib/src/web/database.dart b/packages/sqlite_async/lib/src/web/database.dart index 03b8ec6..cbbb31e 100644 --- a/packages/sqlite_async/lib/src/web/database.dart +++ b/packages/sqlite_async/lib/src/web/database.dart @@ -132,6 +132,16 @@ class WebDatabase @override int get numConnections => 0; + + @override + int getNumConnections() { + return -1; + } + + @override + List getAllConnections() { + throw UnimplementedError(); + } } class _SharedContext implements SqliteReadContext { diff --git a/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart b/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart index 90f0371..f1989b4 100644 --- a/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart @@ -142,4 +142,14 @@ class SqliteDatabaseImpl @override int get numConnections => 0; + + @override + int getNumConnections() { + return -1; + } + + @override + List getAllConnections() { + throw UnimplementedError(); + } } From c9f8fa25df6eb688ef87a1df886933b8a7e78248 Mon Sep 17 00:00:00 2001 From: David Martos Date: Fri, 4 Apr 2025 12:24:53 +0200 Subject: [PATCH 4/8] cleanup --- .DS_Store | Bin 6148 -> 0 bytes .../connection/sync_sqlite_connection.dart | 5 ----- .../lib/src/impl/single_connection_database.dart | 5 ----- .../lib/src/impl/stub_sqlite_database.dart | 5 ----- .../lib/src/native/database/connection_pool.dart | 4 ++-- .../database/native_sqlite_connection_impl.dart | 7 +------ .../native/database/native_sqlite_database.dart | 7 +------ .../sqlite_async/lib/src/sqlite_connection.dart | 2 -- packages/sqlite_async/lib/src/web/database.dart | 6 +----- .../src/web/database/web_sqlite_database.dart | 9 ++------- 10 files changed, 7 insertions(+), 43 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 getAutoCommit() async { return db.autocommit; } - - @override - int getNumConnections() { - return -1; - } } class SyncReadContext implements SqliteReadContext { diff --git a/packages/sqlite_async/lib/src/impl/single_connection_database.dart b/packages/sqlite_async/lib/src/impl/single_connection_database.dart index 2364102..5645f02 100644 --- a/packages/sqlite_async/lib/src/impl/single_connection_database.dart +++ b/packages/sqlite_async/lib/src/impl/single_connection_database.dart @@ -63,11 +63,6 @@ final class SingleConnectionDatabase return [connection]; } - @override - int getNumConnections() { - return 1; - } - @override int get numConnections => 1; } diff --git a/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart b/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart index 211f32b..0ea2312 100644 --- a/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart @@ -68,11 +68,6 @@ class SqliteDatabaseImpl @override int get numConnections => throw UnimplementedError(); - @override - int getNumConnections() { - throw UnimplementedError(); - } - @override List getAllConnections() { throw UnimplementedError(); diff --git a/packages/sqlite_async/lib/src/native/database/connection_pool.dart b/packages/sqlite_async/lib/src/native/database/connection_pool.dart index 50d2dd5..01fd1af 100644 --- a/packages/sqlite_async/lib/src/native/database/connection_pool.dart +++ b/packages/sqlite_async/lib/src/native/database/connection_pool.dart @@ -243,8 +243,8 @@ class SqliteConnectionPool with SqliteQueries implements SqliteConnection { } int getNumConnections() { - print( - "TESTING READ: ${_allReadConnections.length} WRITE: ${_writeConnection == null ? 0 : 1}"); + // print( + // "TESTING READ: ${_allReadConnections.length} WRITE: ${_writeConnection == null ? 0 : 1}"); return _allReadConnections.length + (_writeConnection == null ? 0 : 1); } } diff --git a/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart b/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart index 547a015..6249d52 100644 --- a/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart +++ b/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart @@ -95,7 +95,7 @@ class SqliteConnectionImpl @override Future close() async { - print("Closing native sqlite Connection ${StackTrace.current}"); + // print("Closing native sqlite Connection ${StackTrace.current}"); eventsPort?.close(); await _connectionMutex.lock(() async { if (readOnly) { @@ -159,11 +159,6 @@ class SqliteConnectionImpl }); }, timeout: lockTimeout); } - - @override - int getNumConnections() { - return -1; - } } int _nextCtxId = 1; diff --git a/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart b/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart index 365cc81..06d730c 100644 --- a/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart @@ -40,9 +40,6 @@ class SqliteDatabaseImpl late final SqliteConnectionImpl _internalConnection; late final SqliteConnectionPool _pool; - @override - int get numConnections => _pool.getNumConnections(); - final StreamController updatesController = StreamController.broadcast(); @@ -176,9 +173,7 @@ class SqliteDatabaseImpl } @override - int getNumConnections() { - return -1; - } + int get numConnections => _pool.getNumConnections(); @override List getAllConnections() { diff --git a/packages/sqlite_async/lib/src/sqlite_connection.dart b/packages/sqlite_async/lib/src/sqlite_connection.dart index 84d1233..15f4f6a 100644 --- a/packages/sqlite_async/lib/src/sqlite_connection.dart +++ b/packages/sqlite_async/lib/src/sqlite_connection.dart @@ -157,8 +157,6 @@ abstract class SqliteConnection extends SqliteWriteContext { /// Queries and watch calls can potentially use outdated schema information after a schema update. Future refreshSchema(); - int getNumConnections(); - /// Returns true if the connection is closed @override bool get closed; diff --git a/packages/sqlite_async/lib/src/web/database.dart b/packages/sqlite_async/lib/src/web/database.dart index dfe9120..1901510 100644 --- a/packages/sqlite_async/lib/src/web/database.dart +++ b/packages/sqlite_async/lib/src/web/database.dart @@ -170,12 +170,8 @@ class WebDatabase return _database.fileSystem.flush(); } @override - int get numConnections => 0; + int get numConnections => throw UnimplementedError(); - @override - int getNumConnections() { - return -1; - } @override List getAllConnections() { diff --git a/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart b/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart index fda8510..b3e7ec0 100644 --- a/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart @@ -181,16 +181,11 @@ class SqliteDatabaseImpl return await _connection.exposeEndpoint(); } @override - int get numConnections => 0; - - @override - int getNumConnections() { - return -1; - } + int get numConnections => 1; @override List getAllConnections() { - throw UnimplementedError(); + return [_connection]; } From 085caad8750724857c7f4e2f9654105ed4cc1973 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Thu, 22 May 2025 12:16:26 +0200 Subject: [PATCH 5/8] Prepare release of sqlite_async 0.11.5 --- CHANGELOG.md | 21 +++++++++++++++++++++ packages/sqlite_async/CHANGELOG.md | 5 ++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aba9311..d23d6d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,27 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2025-05-22 + +--- + +Packages with breaking changes: + + - There are no breaking changes in this release. + +Packages with other changes: + + - [`sqlite_async` - `v0.11.5`](#sqlite_async---v0115) + +--- + +#### `sqlite_async` - `v0.11.5` + +- Allow profiling queries. Queries are profiled by default in debug and profile builds, the runtime + for queries is added to profiling timelines under the `sqlite_async` tag. +- Fix cancelling `watch()` queries sometimes taking longer than necessary. +- Fix web databases not respecting lock timeouts. + ## 2024-11-06 ### Changes diff --git a/packages/sqlite_async/CHANGELOG.md b/packages/sqlite_async/CHANGELOG.md index 42a5531..bf1fc83 100644 --- a/packages/sqlite_async/CHANGELOG.md +++ b/packages/sqlite_async/CHANGELOG.md @@ -1,6 +1,9 @@ ## 0.11.5 - - Allow profiling queries. +- Allow profiling queries. Queries are profiled by default in debug and profile builds, the runtime + for queries is added to profiling timelines under the `sqlite_async` tag. +- Fix cancelling `watch()` queries sometimes taking longer than necessary. +- Fix web databases not respecting lock timeouts. ## 0.11.4 From e11f506d058d59790fb04128a477ae36cd89a1b7 Mon Sep 17 00:00:00 2001 From: David Martos Date: Wed, 18 Jun 2025 10:45:02 +0200 Subject: [PATCH 6/8] cleanup --- packages/sqlite_async/lib/src/common/sqlite_database.dart | 8 +++++--- .../lib/src/impl/single_connection_database.dart | 3 --- .../sqlite_async/lib/src/impl/stub_sqlite_database.dart | 3 --- .../lib/src/native/database/native_sqlite_database.dart | 5 +---- packages/sqlite_async/lib/src/web/database.dart | 6 +----- .../lib/src/web/database/web_sqlite_database.dart | 4 ---- 6 files changed, 7 insertions(+), 22 deletions(-) diff --git a/packages/sqlite_async/lib/src/common/sqlite_database.dart b/packages/sqlite_async/lib/src/common/sqlite_database.dart index 524b64a..49fe82d 100644 --- a/packages/sqlite_async/lib/src/common/sqlite_database.dart +++ b/packages/sqlite_async/lib/src/common/sqlite_database.dart @@ -51,9 +51,6 @@ abstract class SqliteDatabase /// The maximum number of concurrent read transactions if not explicitly specified. static const int defaultMaxReaders = 5; - int get numConnections; - List getAllConnections(); - /// Open a SqliteDatabase. /// /// Only a single SqliteDatabase per [path] should be opened at a time. @@ -106,4 +103,9 @@ abstract class SqliteDatabase factory SqliteDatabase.singleConnection(SqliteConnection connection) { return SingleConnectionDatabase(connection); } + + /// Returns a list of all the connections (read and write) managed by this database. + /// This can be useful to run the same statement on all connections. For instance, + /// ATTACHing a database, that is expected to be available in all connections. + List getAllConnections(); } diff --git a/packages/sqlite_async/lib/src/impl/single_connection_database.dart b/packages/sqlite_async/lib/src/impl/single_connection_database.dart index 5645f02..955b6d5 100644 --- a/packages/sqlite_async/lib/src/impl/single_connection_database.dart +++ b/packages/sqlite_async/lib/src/impl/single_connection_database.dart @@ -62,7 +62,4 @@ final class SingleConnectionDatabase List getAllConnections() { return [connection]; } - - @override - int get numConnections => 1; } diff --git a/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart b/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart index 0ea2312..264e85b 100644 --- a/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart @@ -65,9 +65,6 @@ class SqliteDatabaseImpl throw UnimplementedError(); } - @override - int get numConnections => throw UnimplementedError(); - @override List getAllConnections() { throw UnimplementedError(); diff --git a/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart b/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart index 06d730c..545dce7 100644 --- a/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart @@ -171,10 +171,7 @@ class SqliteDatabaseImpl Future refreshSchema() { return _pool.refreshSchema(); } - - @override - int get numConnections => _pool.getNumConnections(); - + @override List getAllConnections() { return _pool.getAllConnections(); diff --git a/packages/sqlite_async/lib/src/web/database.dart b/packages/sqlite_async/lib/src/web/database.dart index d9c0207..07f997c 100644 --- a/packages/sqlite_async/lib/src/web/database.dart +++ b/packages/sqlite_async/lib/src/web/database.dart @@ -177,15 +177,11 @@ class WebDatabase await isInitialized; return _database.fileSystem.flush(); } - @override - int get numConnections => throw UnimplementedError(); - @override List getAllConnections() { - throw UnimplementedError(); + return [this]; } - } class _SharedContext implements SqliteReadContext { diff --git a/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart b/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart index b3e7ec0..daa7a10 100644 --- a/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart @@ -180,13 +180,9 @@ class SqliteDatabaseImpl Future exposeEndpoint() async { return await _connection.exposeEndpoint(); } - @override - int get numConnections => 1; @override List getAllConnections() { return [_connection]; } - - } From a5c4f960e802e37867dd94fdf9cc8a8fd517b3c5 Mon Sep 17 00:00:00 2001 From: David Martos Date: Wed, 18 Jun 2025 10:59:24 +0200 Subject: [PATCH 7/8] cleanup --- .../lib/src/native/database/connection_pool.dart | 6 ------ .../src/native/database/native_sqlite_connection_impl.dart | 1 - 2 files changed, 7 deletions(-) diff --git a/packages/sqlite_async/lib/src/native/database/connection_pool.dart b/packages/sqlite_async/lib/src/native/database/connection_pool.dart index 01fd1af..963c008 100644 --- a/packages/sqlite_async/lib/src/native/database/connection_pool.dart +++ b/packages/sqlite_async/lib/src/native/database/connection_pool.dart @@ -241,12 +241,6 @@ class SqliteConnectionPool with SqliteQueries implements SqliteConnection { connections.addAll(_allReadConnections); return connections; } - - int getNumConnections() { - // print( - // "TESTING READ: ${_allReadConnections.length} WRITE: ${_writeConnection == null ? 0 : 1}"); - return _allReadConnections.length + (_writeConnection == null ? 0 : 1); - } } typedef ReadCallback = Future Function(SqliteReadContext tx); diff --git a/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart b/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart index 40299d9..e2df0f3 100644 --- a/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart +++ b/packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart @@ -108,7 +108,6 @@ class SqliteConnectionImpl @override Future close() async { - // print("Closing native sqlite Connection ${StackTrace.current}"); eventsPort?.close(); await _connectionMutex.lock(() async { if (_didOpenSuccessfully) { From 082e7722c6aa23623be67803a83167f9eeb31ecf Mon Sep 17 00:00:00 2001 From: David Martos Date: Wed, 18 Jun 2025 12:14:23 +0200 Subject: [PATCH 8/8] use getter --- packages/sqlite_async/lib/src/common/sqlite_database.dart | 2 +- .../sqlite_async/lib/src/impl/single_connection_database.dart | 2 +- packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart | 2 +- .../sqlite_async/lib/src/native/database/connection_pool.dart | 2 +- .../lib/src/native/database/native_sqlite_database.dart | 4 ++-- packages/sqlite_async/lib/src/web/database.dart | 2 +- .../lib/src/web/database/web_sqlite_database.dart | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/sqlite_async/lib/src/common/sqlite_database.dart b/packages/sqlite_async/lib/src/common/sqlite_database.dart index 49fe82d..1c66c6d 100644 --- a/packages/sqlite_async/lib/src/common/sqlite_database.dart +++ b/packages/sqlite_async/lib/src/common/sqlite_database.dart @@ -107,5 +107,5 @@ abstract class SqliteDatabase /// Returns a list of all the connections (read and write) managed by this database. /// This can be useful to run the same statement on all connections. For instance, /// ATTACHing a database, that is expected to be available in all connections. - List getAllConnections(); + List get allConnections; } diff --git a/packages/sqlite_async/lib/src/impl/single_connection_database.dart b/packages/sqlite_async/lib/src/impl/single_connection_database.dart index 955b6d5..cd04f3f 100644 --- a/packages/sqlite_async/lib/src/impl/single_connection_database.dart +++ b/packages/sqlite_async/lib/src/impl/single_connection_database.dart @@ -59,7 +59,7 @@ final class SingleConnectionDatabase } @override - List getAllConnections() { + List get allConnections { return [connection]; } } diff --git a/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart b/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart index 264e85b..15d395a 100644 --- a/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/impl/stub_sqlite_database.dart @@ -66,7 +66,7 @@ class SqliteDatabaseImpl } @override - List getAllConnections() { + List get allConnections { throw UnimplementedError(); } } diff --git a/packages/sqlite_async/lib/src/native/database/connection_pool.dart b/packages/sqlite_async/lib/src/native/database/connection_pool.dart index 963c008..859c4cf 100644 --- a/packages/sqlite_async/lib/src/native/database/connection_pool.dart +++ b/packages/sqlite_async/lib/src/native/database/connection_pool.dart @@ -233,7 +233,7 @@ class SqliteConnectionPool with SqliteQueries implements SqliteConnection { } } - List getAllConnections() { + List get allConnections { final connections = []; if (_writeConnection != null) { connections.add(_writeConnection!); diff --git a/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart b/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart index b718627..64974b3 100644 --- a/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/native/database/native_sqlite_database.dart @@ -173,7 +173,7 @@ class SqliteDatabaseImpl } @override - List getAllConnections() { - return _pool.getAllConnections(); + List get allConnections { + return _pool.allConnections; } } diff --git a/packages/sqlite_async/lib/src/web/database.dart b/packages/sqlite_async/lib/src/web/database.dart index 508aefb..b52a199 100644 --- a/packages/sqlite_async/lib/src/web/database.dart +++ b/packages/sqlite_async/lib/src/web/database.dart @@ -173,7 +173,7 @@ class WebDatabase } @override - List getAllConnections() { + List get allConnections { return [this]; } } diff --git a/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart b/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart index 78e1363..7e1c8f9 100644 --- a/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart +++ b/packages/sqlite_async/lib/src/web/database/web_sqlite_database.dart @@ -180,7 +180,7 @@ class SqliteDatabaseImpl } @override - List getAllConnections() { + List get allConnections { return [_connection]; } }