Skip to content

Commit 4d8f18d

Browse files
committed
More web improvements
1 parent 4c4f6cc commit 4d8f18d

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

packages/sqlite_async/lib/src/web/database.dart

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import 'dart:async';
2+
import 'dart:developer';
23
import 'dart:js_interop';
34
import 'dart:js_interop_unsafe';
45

56
import 'package:sqlite3/common.dart';
67
import 'package:sqlite3_web/sqlite3_web.dart';
78
import 'package:sqlite3_web/protocol_utils.dart' as proto;
89
import 'package:sqlite_async/sqlite_async.dart';
10+
import 'package:sqlite_async/src/utils/profiler.dart';
911
import 'package:sqlite_async/src/utils/shared_utils.dart';
1012
import 'package:sqlite_async/src/web/database/broadcast_updates.dart';
1113
import 'package:sqlite_async/web.dart';
@@ -17,6 +19,7 @@ class WebDatabase
1719
implements SqliteDatabase, WebSqliteConnection {
1820
final Database _database;
1921
final Mutex? _mutex;
22+
final bool profileQueries;
2023

2124
/// For persistent databases that aren't backed by a shared worker, we use
2225
/// web broadcast channels to forward local update events to other tabs.
@@ -25,7 +28,12 @@ class WebDatabase
2528
@override
2629
bool closed = false;
2730

28-
WebDatabase(this._database, this._mutex, {this.broadcastUpdates});
31+
WebDatabase(
32+
this._database,
33+
this._mutex, {
34+
required this.profileQueries,
35+
this.broadcastUpdates,
36+
});
2937

3038
@override
3139
Future<void> close() async {
@@ -175,7 +183,10 @@ class _SharedContext implements SqliteReadContext {
175183
final WebDatabase _database;
176184
bool _contextClosed = false;
177185

178-
_SharedContext(this._database);
186+
final TimelineTask? _task;
187+
188+
_SharedContext(this._database)
189+
: _task = _database.profileQueries ? TimelineTask() : null;
179190

180191
@override
181192
bool get closed => _contextClosed || _database.closed;
@@ -196,8 +207,13 @@ class _SharedContext implements SqliteReadContext {
196207
@override
197208
Future<ResultSet> getAll(String sql,
198209
[List<Object?> parameters = const []]) async {
199-
return await wrapSqliteException(
200-
() => _database._database.select(sql, parameters));
210+
try {
211+
_task?.start('getAll', arguments: timelineArgs(sql, parameters));
212+
return await wrapSqliteException(
213+
() => _database._database.select(sql, parameters));
214+
} finally {
215+
_task?.finish();
216+
}
201217
}
202218

203219
@override
@@ -248,9 +264,8 @@ class _ExclusiveTransactionContext extends _ExclusiveContext {
248264
@override
249265
bool get closed => baseContext.closed;
250266

251-
@override
252-
Future<ResultSet> execute(String sql,
253-
[List<Object?> parameters = const []]) async {
267+
Future<ResultSet> _executeInternal(
268+
String sql, List<Object?> parameters) async {
254269
// Operations inside transactions are executed with custom requests
255270
// in order to verify that the connection does not have autocommit enabled.
256271
// The worker will check if autocommit = true before executing the SQL.
@@ -294,6 +309,17 @@ class _ExclusiveTransactionContext extends _ExclusiveContext {
294309
});
295310
}
296311

312+
@override
313+
Future<ResultSet> execute(String sql,
314+
[List<Object?> parameters = const []]) async {
315+
try {
316+
_task?.start('execute', arguments: timelineArgs(sql, parameters));
317+
return await _executeInternal(sql, parameters);
318+
} finally {
319+
_task?.finish();
320+
}
321+
}
322+
297323
@override
298324
Future<void> executeBatch(
299325
String sql, List<List<Object?>> parameterSets) async {

packages/sqlite_async/lib/src/web/web_sqlite_open_factory.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ class DefaultSqliteOpenFactory
8989
}
9090

9191
return WebDatabase(connection.database, options.mutex ?? mutex,
92-
broadcastUpdates: updates);
92+
broadcastUpdates: updates,
93+
profileQueries: sqliteOptions.profileQueries);
9394
}
9495

9596
@override

packages/sqlite_async/lib/web.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ abstract class WebSqliteConnection implements SqliteConnection {
9494
var lock? => Mutex(identifier: lock),
9595
null => null,
9696
},
97+
profileQueries: false,
9798
);
9899
return database;
99100
}

0 commit comments

Comments
 (0)