Skip to content

Commit de3f744

Browse files
committed
use execute instead of prepareMultiple
1 parent 4586d87 commit de3f744

File tree

8 files changed

+24
-43
lines changed

8 files changed

+24
-43
lines changed

packages/sqlite_async/lib/src/common/connection/sync_sqlite_connection.dart

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -166,18 +166,10 @@ final class _UnsafeSyncContext extends UnscopedContext {
166166
}
167167

168168
@override
169-
Future<void> executeMultiple(String sql) async {
170-
task.timeSync('executeBatch', () {
171-
final statements = db.prepareMultiple(sql);
172-
try {
173-
for (var statement in statements) {
174-
task.timeSync('iteration', () => statement.execute());
175-
}
176-
} finally {
177-
for (var statement in statements) {
178-
statement.dispose();
179-
}
180-
}
169+
Future<void> executeMultiple(String sql,
170+
[List<Object?> parameters = const []]) async {
171+
task.timeSync('executeMultiple', () {
172+
db.execute(sql, parameters);
181173
}, sql: sql);
182174
}
183175
}

packages/sqlite_async/lib/src/impl/context.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import '../sqlite_connection.dart';
1212
abstract base class UnscopedContext implements SqliteReadContext {
1313
Future<ResultSet> execute(String sql, List<Object?> parameters);
1414
Future<void> executeBatch(String sql, List<List<Object?>> parameterSets);
15-
Future<void> executeMultiple(String sql);
15+
Future<void> executeMultiple(String sql, List<Object?> parameters);
1616

1717
/// Returns an [UnscopedContext] useful as the outermost transaction.
1818
///
@@ -145,9 +145,10 @@ final class ScopedWriteContext extends ScopedReadContext
145145
}
146146

147147
@override
148-
Future<void> executeMultiple(String sql) {
148+
Future<void> executeMultiple(String sql,
149+
[List<Object?> parameters = const []]) async {
149150
_checkNotLocked();
150-
return _context.executeMultiple(sql);
151+
return await _context.executeMultiple(sql, parameters);
151152
}
152153

153154
@override

packages/sqlite_async/lib/src/native/database/native_sqlite_connection_impl.dart

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -277,18 +277,11 @@ final class _UnsafeContext extends UnscopedContext {
277277
}
278278

279279
@override
280-
Future<void> executeMultiple(String sql) async {
280+
Future<void> executeMultiple(String sql,
281+
[List<Object?> parameters = const []]) async {
281282
return computeWithDatabase((db) async {
282-
final statements = db.prepareMultiple(sql);
283-
try {
284-
for (var statement in statements) {
285-
statement.execute();
286-
}
287-
} finally {
288-
for (var statement in statements) {
289-
statement.dispose();
290-
}
291-
}
283+
// execute allows multiple statements, but does not return results.
284+
db.execute(sql, parameters);
292285
});
293286
}
294287
}

packages/sqlite_async/lib/src/sqlite_connection.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,9 @@ abstract interface class SqliteWriteContext extends SqliteReadContext {
7676
/// parameter set.
7777
Future<void> executeBatch(String sql, List<List<Object?>> parameterSets);
7878

79-
// Execute multiple SQL statements from a single string, sequentially.
80-
Future<void> executeMultiple(String sql);
79+
// Execute a query that potentially contains multiple statements.
80+
Future<void> executeMultiple(String sql,
81+
[List<Object?> parameters = const []]);
8182

8283
/// Open a read-write transaction on this write context.
8384
///

packages/sqlite_async/lib/src/sqlite_queries.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,10 @@ mixin SqliteQueries implements SqliteWriteContext, SqliteConnection {
137137
}
138138

139139
@override
140-
Future<void> executeMultiple(String sql) {
140+
Future<void> executeMultiple(String sql,
141+
[List<Object?> parameters = const []]) {
141142
return writeTransaction((tx) async {
142-
return tx.executeMultiple(sql);
143+
return tx.executeMultiple(sql, parameters);
143144
});
144145
}
145146

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,11 +294,13 @@ final class _UnscopedContext extends UnscopedContext {
294294
}
295295

296296
@override
297-
Future<void> executeMultiple(String sql) {
297+
Future<void> executeMultiple(String sql,
298+
[List<Object?> parameters = const []]) {
298299
return _task.timeAsync('executeMultiple', sql: sql, () {
299300
return wrapSqliteException(() async {
300-
await _database._database.executeMultiple(
301+
await _database._database.execute(
301302
sql,
303+
parameters: parameters,
302304
token: _lock,
303305
checkInTransaction: _checkInTransaction,
304306
);

packages/sqlite_async/pubspec.yaml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,6 @@ repository: https://github.com/powersync-ja/sqlite_async.dart
55
environment:
66
sdk: ">=3.5.0 <4.0.0"
77

8-
# TODO : Remove this override when the changes are merged and published.
9-
dependency_overrides:
10-
sqlite3_web:
11-
git:
12-
url: https://github.com/stevenctl/sqlite3.dart
13-
ref: stevenctl/execute-multi-support
14-
path: sqlite3_web
15-
16-
178
topics:
189
- sqlite
1910
- async

packages/sqlite_async/test/basic_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,11 +331,11 @@ void main() {
331331
expect(result.rows[0][1], equals('test returning without params'));
332332
});
333333

334-
test('execute handles multiple statements', () async {
334+
test('executeMultiple handles multiple statements', () async {
335335
final db = await testUtils.setupDatabase(path: path);
336336
await createTables(db);
337337

338-
await db.execute('''
338+
await db.executeMultiple('''
339339
INSERT INTO test_data(description) VALUES('row1');
340340
INSERT INTO test_data(description) VALUES('row2');
341341
''');

0 commit comments

Comments
 (0)