@@ -10,12 +10,12 @@ use powersync_sqlite_nostd as sqlite;
1010use powersync_sqlite_nostd:: { Connection , Context } ;
1111use sqlite:: { ResultCode , Value } ;
1212
13+ use crate :: create_sqlite_text_fn;
1314use crate :: error:: { PSResult , PowerSyncError } ;
1415use crate :: migrations:: { LATEST_VERSION , powersync_migrate} ;
1516use crate :: schema:: inspection:: ExistingView ;
1617use crate :: state:: DatabaseState ;
17- use crate :: utils:: SqlBuffer ;
18- use crate :: { create_auto_tx_function, create_sqlite_text_fn} ;
18+ use crate :: utils:: { SqlBuffer , verify_in_transaction} ;
1919
2020// Used in old down migrations, do not remove.
2121extern "C" fn powersync_drop_view (
@@ -35,6 +35,8 @@ fn powersync_init_impl(
3535 ctx : * mut sqlite:: context ,
3636 _args : & [ * mut sqlite:: value ] ,
3737) -> Result < String , PowerSyncError > {
38+ let db = ctx. db_handle ( ) ;
39+ verify_in_transaction ( db) ?;
3840 powersync_migrate ( ctx, LATEST_VERSION ) ?;
3941
4042 // Register the powersync_internal_close vtab to implement a "pre-close hook".
@@ -45,23 +47,24 @@ fn powersync_init_impl(
4547 Ok ( String :: from ( "" ) )
4648}
4749
48- create_auto_tx_function ! ( powersync_init_tx, powersync_init_impl) ;
49- create_sqlite_text_fn ! ( powersync_init, powersync_init_tx, "powersync_init" ) ;
50+ create_sqlite_text_fn ! ( powersync_init, powersync_init_impl, "powersync_init" ) ;
5051
5152fn powersync_test_migration_impl (
5253 ctx : * mut sqlite:: context ,
5354 args : & [ * mut sqlite:: value ] ,
5455) -> Result < String , PowerSyncError > {
56+ let db = ctx. db_handle ( ) ;
57+ verify_in_transaction ( db) ?;
58+
5559 let target_version = args[ 0 ] . int ( ) ;
5660 powersync_migrate ( ctx, target_version) ?;
5761
5862 Ok ( String :: from ( "" ) )
5963}
6064
61- create_auto_tx_function ! ( powersync_test_migration_tx, powersync_test_migration_impl) ;
6265create_sqlite_text_fn ! (
6366 powersync_test_migration,
64- powersync_test_migration_tx ,
67+ powersync_test_migration_impl ,
6568 "powersync_test_migration"
6669) ;
6770
@@ -70,6 +73,7 @@ fn powersync_clear_impl(
7073 args : & [ * mut sqlite:: value ] ,
7174) -> Result < String , PowerSyncError > {
7275 let local_db = ctx. db_handle ( ) ;
76+ verify_in_transaction ( local_db) ?;
7377 let state = unsafe { DatabaseState :: from_context ( & ctx) } ;
7478
7579 let flags = PowerSyncClearFlags ( args[ 0 ] . int ( ) ) ;
@@ -176,6 +180,8 @@ fn powersync_trigger_resync_impl(
176180 args : & [ * mut sqlite:: value ] ,
177181) -> Result < String , PowerSyncError > {
178182 let local_db = ctx. db_handle ( ) ;
183+ verify_in_transaction ( local_db) ?;
184+
179185 let state = unsafe { DatabaseState :: from_context ( & ctx) } ;
180186 trigger_resync ( local_db, state) ?;
181187
@@ -187,10 +193,9 @@ fn powersync_trigger_resync_impl(
187193 Ok ( Default :: default ( ) )
188194}
189195
190- create_auto_tx_function ! ( powersync_trigger_resync_tx, powersync_trigger_resync_impl) ;
191196create_sqlite_text_fn ! (
192197 powersync_trigger_resync,
193- powersync_trigger_resync_tx ,
198+ powersync_trigger_resync_impl ,
194199 "powersync_trigger_resync"
195200) ;
196201
@@ -210,8 +215,7 @@ impl PowerSyncClearFlags {
210215 }
211216}
212217
213- create_auto_tx_function ! ( powersync_clear_tx, powersync_clear_impl) ;
214- create_sqlite_text_fn ! ( powersync_clear, powersync_clear_tx, "powersync_clear" ) ;
218+ create_sqlite_text_fn ! ( powersync_clear, powersync_clear_impl, "powersync_clear" ) ;
215219
216220pub fn register ( db : * mut sqlite:: sqlite3 , state : Rc < DatabaseState > ) -> Result < ( ) , ResultCode > {
217221 // This entire module is just making it easier to edit sqlite_master using queries.
0 commit comments