@@ -3,7 +3,6 @@ extern crate alloc;
3
3
use alloc:: boxed:: Box ;
4
4
use alloc:: string:: String ;
5
5
use core:: ffi:: { c_char, c_int, c_void} ;
6
- use core:: slice;
7
6
8
7
use sqlite:: { Connection , ResultCode , Value } ;
9
8
use sqlite_nostd as sqlite;
@@ -29,7 +28,7 @@ struct VirtualTable {
29
28
base : sqlite:: vtab ,
30
29
db : * mut sqlite:: sqlite3 ,
31
30
current_tx : Option < i64 > ,
32
- insert_statement : Option < ManagedStmt >
31
+ insert_statement : Option < ManagedStmt > ,
33
32
}
34
33
35
34
extern "C" fn connect (
@@ -40,8 +39,7 @@ extern "C" fn connect(
40
39
vtab : * mut * mut sqlite:: vtab ,
41
40
_err : * mut * mut c_char ,
42
41
) -> c_int {
43
- if let Err ( rc) = sqlite:: declare_vtab ( db, "CREATE TABLE powersync_crud_(data TEXT);" )
44
- {
42
+ if let Err ( rc) = sqlite:: declare_vtab ( db, "CREATE TABLE powersync_crud_(data TEXT);" ) {
45
43
return rc as c_int ;
46
44
}
47
45
@@ -54,7 +52,7 @@ extern "C" fn connect(
54
52
} ,
55
53
db,
56
54
current_tx : None ,
57
- insert_statement : None
55
+ insert_statement : None ,
58
56
} ) ) ;
59
57
* vtab = tab. cast :: < sqlite:: vtab > ( ) ;
60
58
let _ = sqlite:: vtab_config ( db, 0 ) ;
@@ -69,17 +67,17 @@ extern "C" fn disconnect(vtab: *mut sqlite::vtab) -> c_int {
69
67
ResultCode :: OK as c_int
70
68
}
71
69
72
-
73
70
fn begin_impl ( tab : & mut VirtualTable ) -> Result < ( ) , SQLiteError > {
74
71
let db = tab. db ;
75
72
76
73
let insert_statement = db. prepare_v3 ( "INSERT INTO ps_crud(tx_id, data) VALUES (?1, ?2)" , 0 ) ?;
77
74
tab. insert_statement = Some ( insert_statement) ;
78
75
79
76
// language=SQLite
80
- let statement = db. prepare_v2 ( "UPDATE ps_tx SET next_tx = next_tx + 1 WHERE id = 1 RETURNING next_tx" ) ?;
77
+ let statement =
78
+ db. prepare_v2 ( "UPDATE ps_tx SET next_tx = next_tx + 1 WHERE id = 1 RETURNING next_tx" ) ?;
81
79
if statement. step ( ) ? == ResultCode :: ROW {
82
- let tx_id = statement. column_int64 ( 0 ) ? - 1 ;
80
+ let tx_id = statement. column_int64 ( 0 ) - 1 ;
83
81
tab. current_tx = Some ( tx_id) ;
84
82
} else {
85
83
return Err ( SQLiteError :: from ( ResultCode :: ABORT ) ) ;
@@ -109,23 +107,27 @@ extern "C" fn rollback(vtab: *mut sqlite::vtab) -> c_int {
109
107
ResultCode :: OK as c_int
110
108
}
111
109
112
- fn insert_operation (
113
- vtab : * mut sqlite:: vtab , data : & str ) -> Result < ( ) , SQLiteError > {
110
+ fn insert_operation ( vtab : * mut sqlite:: vtab , data : & str ) -> Result < ( ) , SQLiteError > {
114
111
let tab = unsafe { & mut * ( vtab. cast :: < VirtualTable > ( ) ) } ;
115
112
if tab. current_tx . is_none ( ) {
116
- return Err ( SQLiteError ( ResultCode :: MISUSE , Some ( String :: from ( "No tx_id" ) ) ) ) ;
113
+ return Err ( SQLiteError (
114
+ ResultCode :: MISUSE ,
115
+ Some ( String :: from ( "No tx_id" ) ) ,
116
+ ) ) ;
117
117
}
118
118
let current_tx = tab. current_tx . unwrap ( ) ;
119
119
// language=SQLite
120
- let statement = tab. insert_statement . as_ref ( ) . ok_or ( SQLiteError :: from ( NULL ) ) ?;
120
+ let statement = tab
121
+ . insert_statement
122
+ . as_ref ( )
123
+ . ok_or ( SQLiteError :: from ( NULL ) ) ?;
121
124
statement. bind_int64 ( 1 , current_tx) ?;
122
125
statement. bind_text ( 2 , data, sqlite:: Destructor :: STATIC ) ?;
123
126
statement. exec ( ) ?;
124
127
125
128
Ok ( ( ) )
126
129
}
127
130
128
-
129
131
extern "C" fn update (
130
132
vtab : * mut sqlite:: vtab ,
131
133
argc : c_int ,
@@ -178,6 +180,7 @@ static MODULE: sqlite_nostd::module = sqlite_nostd::module {
178
180
xRelease : None ,
179
181
xRollbackTo : None ,
180
182
xShadowName : None ,
183
+ xIntegrity : None ,
181
184
} ;
182
185
183
186
pub fn register ( db : * mut sqlite:: sqlite3 ) -> Result < ( ) , ResultCode > {
0 commit comments