diff --git a/sqlite3/CHANGELOG.md b/sqlite3/CHANGELOG.md index c37c6fe2..bc806eda 100644 --- a/sqlite3/CHANGELOG.md +++ b/sqlite3/CHANGELOG.md @@ -1,6 +1,7 @@ -## 1.9.3-dev +## 1.9.3 - Provide more information about the source of sqlite exceptions. +- Fix prepared statements without parameters not being reused properly. ## 1.9.2 diff --git a/sqlite3/lib/src/wasm/statement.dart b/sqlite3/lib/src/wasm/statement.dart index c38d835d..e3d7ba01 100644 --- a/sqlite3/lib/src/wasm/statement.dart +++ b/sqlite3/lib/src/wasm/statement.dart @@ -13,7 +13,7 @@ class WasmFinalizableStatement extends FinalizablePart { final WasmBindings bindings; final List _allocatedWhileBinding = []; - var _variablesBound = false; + var _inResetState = true; var _closed = false; WasmFinalizableStatement(this.statement, this.bindings); @@ -28,9 +28,9 @@ class WasmFinalizableStatement extends FinalizablePart { } void _reset() { - if (_variablesBound) { + if (!_inResetState) { bindings.sqlite3_reset(statement); - _variablesBound = false; + _inResetState = true; } for (final pointer in _allocatedWhileBinding) { @@ -85,6 +85,7 @@ class WasmStatement extends CommonPreparedStatement { void _execute() { int result; + finalizable._inResetState = false; // Users should be able to execute statements returning rows, so we should // call _step() to skip past rows. do { @@ -152,7 +153,6 @@ class WasmStatement extends CommonPreparedStatement { } _latestArguments = params; - finalizable._variablesBound = true; } void _bindMapParams(Map params) { @@ -193,7 +193,6 @@ class WasmStatement extends CommonPreparedStatement { } _latestArguments = paramsAsList; - finalizable._variablesBound = true; } void _bindParam(Object? param, int i) { @@ -306,6 +305,7 @@ class WasmStatement extends CommonPreparedStatement { final names = _columnNames; final columnCount = names.length; final rows = >[]; + finalizable._inResetState = false; int resultCode; while ((resultCode = _step()) == SqlError.SQLITE_ROW) { @@ -341,7 +341,9 @@ class _ActiveCursorIterator extends IteratingCursor { List columnNames, List? tableNames, ) : columnCount = columnNames.length, - super(columnNames, tableNames); + super(columnNames, tableNames) { + statement.finalizable._inResetState = false; + } @override bool moveNext() { diff --git a/sqlite3/pubspec.yaml b/sqlite3/pubspec.yaml index 22f33f59..131b358c 100644 --- a/sqlite3/pubspec.yaml +++ b/sqlite3/pubspec.yaml @@ -1,6 +1,6 @@ name: sqlite3 description: Provides lightweight yet convenient bindings to SQLite by using dart:ffi -version: 1.9.3-dev +version: 1.9.3 homepage: https://github.com/simolus3/sqlite3.dart/tree/main/sqlite3 issue_tracker: https://github.com/simolus3/sqlite3.dart/issues