@@ -3,7 +3,8 @@ extern crate alloc;
33use alloc:: boxed:: Box ;
44use alloc:: string:: String ;
55use const_format:: formatcp;
6- use core:: ffi:: { c_char, c_int, c_void} ;
6+ use core:: ffi:: { c_char, c_int, c_void, CStr } ;
7+ use core:: ptr:: null_mut;
78
89use sqlite:: { Connection , ResultCode , Value } ;
910use sqlite_nostd as sqlite;
@@ -15,6 +16,9 @@ use crate::ext::SafeManagedStmt;
1516use crate :: schema:: TableInfoFlags ;
1617use crate :: vtab_util:: * ;
1718
19+ const MANUAL_NAME : & CStr = c"powersync_crud" ;
20+ const SIMPLE_NAME : & CStr = c"powersync_crud" ;
21+
1822// Structure:
1923// CREATE TABLE powersync_crud_(data TEXT, options INT HIDDEN);
2024//
@@ -36,15 +40,26 @@ struct VirtualTable {
3640extern "C" fn connect (
3741 db : * mut sqlite:: sqlite3 ,
3842 _aux : * mut c_void ,
39- _argc : c_int ,
40- _argv : * const * const c_char ,
43+ argc : c_int ,
44+ argv : * const * const c_char ,
4145 vtab : * mut * mut sqlite:: vtab ,
4246 _err : * mut * mut c_char ,
4347) -> c_int {
44- if let Err ( rc) = sqlite:: declare_vtab (
45- db,
46- "CREATE TABLE powersync_crud_(data TEXT, options INT HIDDEN);" ,
47- ) {
48+ let args = sqlite:: args!( argc, argv) ;
49+ let Some ( name) = args. get ( 0 ) else {
50+ return ResultCode :: MISUSE as c_int ;
51+ } ;
52+
53+ let name = unsafe { CStr :: from_ptr ( * name) } ;
54+ let is_simple = name == SIMPLE_NAME ;
55+
56+ let sql = if is_simple {
57+ "CREATE TABLE powersync_crud(op TEXT, id TEXT, data TEXT old_values TEXT, metadata TEXT);"
58+ } else {
59+ "CREATE TABLE powersync_crud_(data TEXT, options INT HIDDEN);"
60+ } ;
61+
62+ if let Err ( rc) = sqlite:: declare_vtab ( db, sql) {
4863 return rc as c_int ;
4964 }
5065
@@ -207,7 +222,20 @@ static MODULE: sqlite_nostd::module = sqlite_nostd::module {
207222} ;
208223
209224pub fn register ( db : * mut sqlite:: sqlite3 ) -> Result < ( ) , ResultCode > {
210- db. create_module_v2 ( "powersync_crud_" , & MODULE , None , None ) ?;
225+ sqlite:: convert_rc ( sqlite:: create_module_v2 (
226+ db,
227+ SIMPLE_NAME . as_ptr ( ) ,
228+ & MODULE ,
229+ null_mut ( ) ,
230+ None ,
231+ ) ) ?;
232+ sqlite:: convert_rc ( sqlite:: create_module_v2 (
233+ db,
234+ MANUAL_NAME . as_ptr ( ) ,
235+ & MODULE ,
236+ null_mut ( ) ,
237+ None ,
238+ ) ) ?;
211239
212240 Ok ( ( ) )
213241}
0 commit comments