@@ -5,7 +5,7 @@ use serde::Serialize;
5
5
use sqlite_nostd:: { self as sqlite, Connection , ManagedStmt , ResultCode } ;
6
6
7
7
use crate :: {
8
- error:: PowerSyncError ,
8
+ error:: { PSResult , PowerSyncError } ,
9
9
ext:: SafeManagedStmt ,
10
10
operations:: delete_bucket,
11
11
schema:: Schema ,
@@ -31,10 +31,11 @@ pub struct StorageAdapter {
31
31
}
32
32
33
33
impl StorageAdapter {
34
- pub fn new ( db : * mut sqlite:: sqlite3 ) -> Result < Self , ResultCode > {
34
+ pub fn new ( db : * mut sqlite:: sqlite3 ) -> Result < Self , PowerSyncError > {
35
35
// language=SQLite
36
- let progress =
37
- db. prepare_v2 ( "SELECT name, count_at_last, count_since_last FROM ps_buckets" ) ?;
36
+ let progress = db
37
+ . prepare_v2 ( "SELECT name, count_at_last, count_since_last FROM ps_buckets" )
38
+ . into_db_result ( db) ?;
38
39
39
40
// language=SQLite
40
41
let time = db. prepare_v2 ( "SELECT unixepoch()" ) ?;
@@ -46,11 +47,11 @@ impl StorageAdapter {
46
47
} )
47
48
}
48
49
49
- pub fn collect_bucket_requests ( & self ) -> Result < Vec < BucketRequest > , ResultCode > {
50
+ pub fn collect_bucket_requests ( & self ) -> Result < Vec < BucketRequest > , PowerSyncError > {
50
51
// language=SQLite
51
52
let statement = self . db . prepare_v2 (
52
53
"SELECT name, last_op FROM ps_buckets WHERE pending_delete = 0 AND name != '$local'" ,
53
- ) ?;
54
+ ) . into_db_result ( self . db ) ?;
54
55
55
56
let mut requests = Vec :: < BucketRequest > :: new ( ) ;
56
57
@@ -97,23 +98,27 @@ impl StorageAdapter {
97
98
}
98
99
}
99
100
100
- pub fn reset_progress ( & self ) -> Result < ( ) , ResultCode > {
101
+ pub fn reset_progress ( & self ) -> Result < ( ) , PowerSyncError > {
101
102
self . db
102
- . exec_safe ( "UPDATE ps_buckets SET count_since_last = 0, count_at_last = 0;" ) ?;
103
+ . exec_safe ( "UPDATE ps_buckets SET count_since_last = 0, count_at_last = 0;" )
104
+ . into_db_result ( self . db ) ?;
103
105
Ok ( ( ) )
104
106
}
105
107
106
- pub fn lookup_bucket ( & self , bucket : & str ) -> Result < BucketInfo , ResultCode > {
108
+ pub fn lookup_bucket ( & self , bucket : & str ) -> Result < BucketInfo , PowerSyncError > {
107
109
// We do an ON CONFLICT UPDATE simply so that the RETURNING bit works for existing rows.
108
110
// We can consider splitting this into separate SELECT and INSERT statements.
109
111
// language=SQLite
110
- let bucket_statement = self . db . prepare_v2 (
111
- "INSERT INTO ps_buckets(name)
112
+ let bucket_statement = self
113
+ . db
114
+ . prepare_v2 (
115
+ "INSERT INTO ps_buckets(name)
112
116
VALUES(?)
113
117
ON CONFLICT DO UPDATE
114
118
SET last_applied_op = last_applied_op
115
119
RETURNING id, last_applied_op" ,
116
- ) ?;
120
+ )
121
+ . into_db_result ( self . db ) ?;
117
122
bucket_statement. bind_text ( 1 , bucket, sqlite:: Destructor :: STATIC ) ?;
118
123
let res = bucket_statement. step ( ) ?;
119
124
debug_assert_matches ! ( res, ResultCode :: ROW ) ;
@@ -147,7 +152,8 @@ impl StorageAdapter {
147
152
148
153
let update_bucket = self
149
154
. db
150
- . prepare_v2 ( "UPDATE ps_buckets SET last_op = ? WHERE name = ?" ) ?;
155
+ . prepare_v2 ( "UPDATE ps_buckets SET last_op = ? WHERE name = ?" )
156
+ . into_db_result ( self . db ) ?;
151
157
152
158
for bucket in checkpoint. buckets . values ( ) {
153
159
if bucket. is_in_priority ( priority) {
@@ -214,7 +220,7 @@ impl StorageAdapter {
214
220
// partial completions.
215
221
let update = self . db . prepare_v2 (
216
222
"UPDATE ps_buckets SET count_since_last = 0, count_at_last = ? WHERE name = ?" ,
217
- ) ?;
223
+ ) . into_db_result ( self . db ) ?;
218
224
219
225
for bucket in checkpoint. buckets . values ( ) {
220
226
if let Some ( count) = bucket. count {
0 commit comments