@@ -229,11 +229,15 @@ final class WasmSqliteBindings implements RawSqliteBindings {
229229final class WasmDatabase implements RawSqliteDatabase {
230230 final wasm.WasmBindings bindings;
231231 final Pointer db;
232+ final Object detach = Object ();
232233
233- WasmDatabase (this .bindings, this .db);
234+ WasmDatabase (this .bindings, this .db) {
235+ bindings.databaseFinalizer? .attach (this , db, detach: detach);
236+ }
234237
235238 @override
236239 int sqlite3_close_v2 () {
240+ bindings.databaseFinalizer? .detach (detach);
237241 return bindings.sqlite3_close_v2 (db);
238242 }
239243
@@ -448,8 +452,11 @@ final class WasmStatement implements RawSqliteStatement {
448452 final WasmDatabase database;
449453 final Pointer stmt;
450454 final WasmBindings bindings;
455+ final Object detach = Object ();
451456
452- WasmStatement (this .database, this .stmt) : bindings = database.bindings;
457+ WasmStatement (this .database, this .stmt) : bindings = database.bindings {
458+ bindings.statementFinalizer? .attach (this , stmt, detach: detach);
459+ }
453460
454461 @override
455462 int sqlite3_bind_blob64 (int index, List <int > value) {
@@ -576,6 +583,7 @@ final class WasmStatement implements RawSqliteStatement {
576583 @override
577584 void sqlite3_finalize () {
578585 bindings.sqlite3_finalize (stmt);
586+ bindings.statementFinalizer? .detach (detach);
579587 }
580588
581589 @override
@@ -770,18 +778,14 @@ class WasmValueList extends ListBase<WasmValue> {
770778}
771779
772780final class WasmSession implements RawSqliteSession {
773- static final Finalizer <(WasmBindings , int )> _finalizer = Finalizer ((args) {
774- args.$1.sqlite3session_delete (args.$2);
775- });
776-
777781 final WasmSqliteBindings bindings;
778782 final int pointer; // the sqlite3_session ptr
779783 final Object detach = Object ();
780784
781785 final WasmBindings _bindings;
782786
783787 WasmSession (this .bindings, this .pointer) : _bindings = bindings.bindings {
784- _finalizer. attach (this , (_bindings, pointer) , detach: detach);
788+ _bindings.sessionFinalizer ? . attach (this , pointer, detach: detach);
785789 }
786790
787791 @override
@@ -828,7 +832,7 @@ final class WasmSession implements RawSqliteSession {
828832
829833 @override
830834 void sqlite3session_delete () {
831- _finalizer .detach (this );
835+ _bindings.sessionFinalizer ? .detach (this );
832836 _bindings.sqlite3session_delete (pointer);
833837 }
834838
@@ -859,16 +863,6 @@ final class WasmSession implements RawSqliteSession {
859863}
860864
861865final class WasmChangesetIterator implements RawChangesetIterator {
862- static final Finalizer <(WasmBindings , int ?, int )> _finalizer = Finalizer ((
863- args,
864- ) {
865- if (args.$2 case final underlyingBytes? ) {
866- args.$1.free (underlyingBytes);
867- }
868-
869- args.$1.sqlite3changeset_finalize (args.$3);
870- });
871-
872866 final WasmSqliteBindings bindings;
873867
874868 /// If this iterator was created from an uint8list allocated when creating it,
@@ -886,28 +880,29 @@ final class WasmChangesetIterator implements RawChangesetIterator {
886880 bool owned = true ,
887881 }) : _bindings = bindings.bindings {
888882 if (owned) {
889- _finalizer.attach (this , (
890- _bindings,
891- dataPointer,
883+ bindings.bindings.changesetFinalizer? .attach (
884+ this ,
892885 pointer,
893- ), detach: detach);
886+ detach: detach,
887+ );
894888 }
895889 }
896890
897891 @override
898892 int sqlite3changeset_finalize () {
899- _finalizer.detach (detach);
893+ final rc = _bindings.sqlite3changeset_finalize (pointer);
894+ bindings.bindings.changesetFinalizer? .detach (detach);
900895 if (dataPointer case final data? ) {
901896 _bindings.free (data);
902897 }
903898
904- return _bindings. sqlite3changeset_finalize (pointer) ;
899+ return rc ;
905900 }
906901
907902 @override
908903 int sqlite3changeset_next () => _bindings.sqlite3changeset_next (pointer);
909904
910- SqliteResult <RawSqliteValue > _extractValue (
905+ SqliteResult <RawSqliteValue ? > _extractValue (
911906 int Function (Pointer , int , Pointer ) extract,
912907 int index,
913908 ) {
@@ -923,12 +918,12 @@ final class WasmChangesetIterator implements RawChangesetIterator {
923918 }
924919
925920 @override
926- SqliteResult <RawSqliteValue > sqlite3changeset_old (int columnNumber) {
921+ SqliteResult <RawSqliteValue ? > sqlite3changeset_old (int columnNumber) {
927922 return _extractValue (_bindings.sqlite3changeset_old, columnNumber);
928923 }
929924
930925 @override
931- SqliteResult <RawSqliteValue > sqlite3changeset_new (int columnNumber) {
926+ SqliteResult <RawSqliteValue ? > sqlite3changeset_new (int columnNumber) {
932927 return _extractValue (_bindings.sqlite3changeset_new, columnNumber);
933928 }
934929
0 commit comments