@@ -2,7 +2,7 @@ use alloc::format;
22
33use sqlite:: { Connection , Context } ;
44use sqlite_nostd as sqlite;
5- use sqlite_nostd:: { ResultCode , Value } ;
5+ use sqlite_nostd:: { ManagedStmt , ResultCode , Value } ;
66
77use crate :: c:: crsql_ExtData;
88
@@ -33,7 +33,7 @@ pub extern "C" fn crsql_config_set(
3333
3434 let db = ctx. db_handle ( ) ;
3535 match insert_config_setting ( db, name, value) {
36- Ok ( value) => {
36+ Ok ( ( _stmt , value) ) => {
3737 ctx. result_value ( value) ;
3838 }
3939 Err ( rc) => {
@@ -48,15 +48,18 @@ fn insert_config_setting(
4848 db : * mut sqlite_nostd:: sqlite3 ,
4949 name : & str ,
5050 value : * mut sqlite:: value ,
51- ) -> Result < * mut sqlite:: value , ResultCode > {
51+ ) -> Result < ( ManagedStmt , * mut sqlite:: value ) , ResultCode > {
5252 let stmt =
5353 db. prepare_v2 ( "INSERT OR REPLACE INTO crsql_master VALUES (?, ?) RETURNING value" ) ?;
5454
5555 stmt. bind_text ( 1 , & format ! ( "config.{name}" ) , sqlite:: Destructor :: TRANSIENT ) ?;
5656 stmt. bind_value ( 2 , value) ?;
5757
5858 if let ResultCode :: ROW = stmt. step ( ) ? {
59- stmt. column_value ( 0 )
59+ let res = stmt. column_value ( 0 ) ?;
60+ // Res will get invalidated when stmt gets dropped
61+ // The lifetime of res is not currently checked by the compiler
62+ Ok ( ( stmt, res) )
6063 } else {
6164 Err ( ResultCode :: ERROR )
6265 }
0 commit comments