11use alloc:: { borrow:: Cow , format} ;
2+ use num_traits:: Zero ;
23use sqlite_nostd:: Connection ;
34use sqlite_nostd:: { self as sqlite, ResultCode } ;
45
@@ -8,6 +9,7 @@ use crate::{
89} ;
910
1011use super :: line:: OplogData ;
12+ use super :: Checksum ;
1113use super :: {
1214 line:: { DataLine , OpType } ,
1315 storage_adapter:: { BucketInfo , StorageAdapter } ,
@@ -51,8 +53,8 @@ INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES(?1, ?2)",
5153 ) ?;
5254
5355 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 ( ) ;
5658 let mut added_ops: i32 = 0 ;
5759
5860 for data in & line. data {
@@ -77,9 +79,9 @@ INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES(?1, ?2)",
7779
7880 while supersede_statement. step ( ) ? == ResultCode :: ROW {
7981 // 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;
8385
8486 // Superseded an operation, only skip if the bucket was empty
8587 // 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)",
9597 if data. op == OpType :: REMOVE {
9698 let should_skip_remove = !superseded;
9799
98- add_checksum = add_checksum . wrapping_add ( checksum) ;
100+ add_checksum += checksum;
99101
100102 if !should_skip_remove {
101103 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)",
144146 None => insert_statement. bind_null ( 6 ) ?,
145147 } ;
146148
147- insert_statement. bind_int ( 7 , checksum) ?;
149+ insert_statement. bind_int ( 7 , checksum. bitcast_i32 ( ) ) ?;
148150 insert_statement. exec ( ) ?;
149151
150- op_checksum = op_checksum . wrapping_add ( checksum) ;
152+ op_checksum += checksum;
151153 }
152154 OpType :: MOVE => {
153- add_checksum = add_checksum . wrapping_add ( checksum) ;
155+ add_checksum += checksum;
154156 }
155157 OpType :: CLEAR => {
156158 // Any remaining PUT operations should get an implicit REMOVE
@@ -179,12 +181,12 @@ WHERE bucket = ?1",
179181 "UPDATE ps_buckets SET last_applied_op = 0, add_checksum = ?1, op_checksum = 0 WHERE id = ?2" ,
180182 ) ?;
181183 clear_statement2. bind_int64 ( 2 , bucket_id) ?;
182- clear_statement2. bind_int ( 1 , checksum) ?;
184+ clear_statement2. bind_int ( 1 , checksum. bitcast_i32 ( ) ) ?;
183185 clear_statement2. exec ( ) ?;
184186
185- add_checksum = 0 ;
187+ add_checksum = Checksum :: zero ( ) ;
186188 is_empty = true ;
187- op_checksum = 0 ;
189+ op_checksum = Checksum :: zero ( ) ;
188190 }
189191 }
190192 }
@@ -201,8 +203,8 @@ WHERE bucket = ?1",
201203 ) ?;
202204 statement. bind_int64 ( 1 , bucket_id) ?;
203205 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 ( ) ) ?;
206208 statement. bind_int ( 5 , added_ops) ?;
207209
208210 statement. exec ( ) ?;
0 commit comments