1
1
use alloc:: { borrow:: Cow , format} ;
2
+ use num_traits:: Zero ;
2
3
use sqlite_nostd:: Connection ;
3
4
use sqlite_nostd:: { self as sqlite, ResultCode } ;
4
5
@@ -8,6 +9,7 @@ use crate::{
8
9
} ;
9
10
10
11
use super :: line:: OplogData ;
12
+ use super :: Checksum ;
11
13
use super :: {
12
14
line:: { DataLine , OpType } ,
13
15
storage_adapter:: { BucketInfo , StorageAdapter } ,
@@ -51,8 +53,8 @@ INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES(?1, ?2)",
51
53
) ?;
52
54
53
55
let mut last_op: Option < i64 > = None ;
54
- let mut add_checksum: i32 = 0 ;
55
- let mut op_checksum: i32 = 0 ;
56
+ let mut add_checksum = Checksum :: zero ( ) ;
57
+ let mut op_checksum = Checksum :: zero ( ) ;
56
58
let mut added_ops: i32 = 0 ;
57
59
58
60
for data in & line. data {
@@ -77,9 +79,9 @@ INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES(?1, ?2)",
77
79
78
80
while supersede_statement. step ( ) ? == ResultCode :: ROW {
79
81
// Superseded (deleted) a previous operation, add the checksum
80
- let supersede_checksum = supersede_statement. column_int ( 1 ) ;
81
- add_checksum = add_checksum . wrapping_add ( supersede_checksum) ;
82
- op_checksum = op_checksum . wrapping_sub ( supersede_checksum) ;
82
+ let supersede_checksum = Checksum :: from_i32 ( supersede_statement. column_int ( 1 ) ) ;
83
+ add_checksum += supersede_checksum;
84
+ op_checksum += supersede_checksum;
83
85
84
86
// Superseded an operation, only skip if the bucket was empty
85
87
// Previously this checked "superseded_op <= last_applied_op".
@@ -95,7 +97,7 @@ INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES(?1, ?2)",
95
97
if data. op == OpType :: REMOVE {
96
98
let should_skip_remove = !superseded;
97
99
98
- add_checksum = add_checksum . wrapping_add ( checksum) ;
100
+ add_checksum += checksum;
99
101
100
102
if !should_skip_remove {
101
103
if let ( Some ( object_type) , Some ( object_id) ) =
@@ -144,13 +146,13 @@ INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES(?1, ?2)",
144
146
None => insert_statement. bind_null ( 6 ) ?,
145
147
} ;
146
148
147
- insert_statement. bind_int ( 7 , checksum) ?;
149
+ insert_statement. bind_int ( 7 , checksum. bitcast_i32 ( ) ) ?;
148
150
insert_statement. exec ( ) ?;
149
151
150
- op_checksum = op_checksum . wrapping_add ( checksum) ;
152
+ op_checksum += checksum;
151
153
}
152
154
OpType :: MOVE => {
153
- add_checksum = add_checksum . wrapping_add ( checksum) ;
155
+ add_checksum += checksum;
154
156
}
155
157
OpType :: CLEAR => {
156
158
// Any remaining PUT operations should get an implicit REMOVE
@@ -179,12 +181,12 @@ WHERE bucket = ?1",
179
181
"UPDATE ps_buckets SET last_applied_op = 0, add_checksum = ?1, op_checksum = 0 WHERE id = ?2" ,
180
182
) ?;
181
183
clear_statement2. bind_int64 ( 2 , bucket_id) ?;
182
- clear_statement2. bind_int ( 1 , checksum) ?;
184
+ clear_statement2. bind_int ( 1 , checksum. bitcast_i32 ( ) ) ?;
183
185
clear_statement2. exec ( ) ?;
184
186
185
- add_checksum = 0 ;
187
+ add_checksum = Checksum :: zero ( ) ;
186
188
is_empty = true ;
187
- op_checksum = 0 ;
189
+ op_checksum = Checksum :: zero ( ) ;
188
190
}
189
191
}
190
192
}
@@ -201,8 +203,8 @@ WHERE bucket = ?1",
201
203
) ?;
202
204
statement. bind_int64 ( 1 , bucket_id) ?;
203
205
statement. bind_int64 ( 2 , last_op) ?;
204
- statement. bind_int ( 3 , add_checksum) ?;
205
- statement. bind_int ( 4 , op_checksum) ?;
206
+ statement. bind_int ( 3 , add_checksum. bitcast_i32 ( ) ) ?;
207
+ statement. bind_int ( 4 , op_checksum. bitcast_i32 ( ) ) ?;
206
208
statement. bind_int ( 5 , added_ops) ?;
207
209
208
210
statement. exec ( ) ?;
0 commit comments