Skip to content

Commit 70cf5e9

Browse files
committed
reset statement where needed
1 parent cffc266 commit 70cf5e9

File tree

2 files changed

+33
-38
lines changed

2 files changed

+33
-38
lines changed

core/rs/core/src/changes_vtab_write.rs

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,13 @@ fn did_cid_win(
4141
let col_vrsn_stmt_ref = tbl_info.get_col_version_stmt(db)?;
4242
let col_vrsn_stmt = col_vrsn_stmt_ref.as_ref().ok_or(ResultCode::ERROR)?;
4343

44-
let bind_result = col_vrsn_stmt.bind_int64(1, key);
44+
let bind_result = col_vrsn_stmt
45+
.bind_int64(1, key)
46+
.and_then(|_| col_vrsn_stmt.bind_text(2, col_name, sqlite::Destructor::STATIC));
4547
if let Err(rc) = bind_result {
4648
reset_cached_stmt(col_vrsn_stmt.stmt)?;
4749
return Err(rc);
4850
}
49-
if let Err(rc) = col_vrsn_stmt.bind_text(2, col_name, sqlite::Destructor::STATIC) {
50-
reset_cached_stmt(col_vrsn_stmt.stmt)?;
51-
return Err(rc);
52-
}
5351

5452
match col_vrsn_stmt.step() {
5553
Ok(ResultCode::ROW) => {
@@ -98,16 +96,13 @@ fn did_cid_win(
9896
let col_site_id_stmt_ref = tbl_info.get_col_site_id_stmt(db)?;
9997
let col_site_id_stmt = col_site_id_stmt_ref.as_ref().ok_or(ResultCode::ERROR)?;
10098

101-
let bind_result = col_site_id_stmt.bind_int64(1, key);
99+
let bind_result = col_site_id_stmt.bind_int64(1, key).and_then(|_| {
100+
col_site_id_stmt.bind_text(2, col_name, sqlite::Destructor::STATIC)
101+
});
102102
if let Err(rc) = bind_result {
103103
reset_cached_stmt(col_site_id_stmt.stmt)?;
104104
return Err(rc);
105105
}
106-
if let Err(rc) = col_site_id_stmt.bind_text(2, col_name, sqlite::Destructor::STATIC)
107-
{
108-
reset_cached_stmt(col_site_id_stmt.stmt)?;
109-
return Err(rc);
110-
}
111106

112107
match col_site_id_stmt.step() {
113108
Ok(ResultCode::ROW) => {
@@ -233,13 +228,9 @@ fn set_winner_clock(
233228
let set_stmt_ref = tbl_info.get_set_winner_clock_stmt(db)?;
234229
let set_stmt = set_stmt_ref.as_ref().ok_or(ResultCode::ERROR)?;
235230

236-
let bind_result = set_stmt.bind_int64(1, key);
237-
if let Err(rc) = bind_result {
238-
reset_cached_stmt(set_stmt.stmt)?;
239-
return Err(rc);
240-
}
241231
let bind_result = set_stmt
242-
.bind_text(2, insert_col_name, sqlite::Destructor::STATIC)
232+
.bind_int64(1, key)
233+
.and_then(|_| set_stmt.bind_text(2, insert_col_name, sqlite::Destructor::STATIC))
243234
.and_then(|_| set_stmt.bind_int64(3, insert_col_vrsn))
244235
.and_then(|_| set_stmt.bind_int64(4, insert_db_vrsn))
245236
.and_then(|_| set_stmt.bind_int64(5, insert_seq))
@@ -369,9 +360,7 @@ unsafe fn merge_delete(
369360
(*ext_data).pSetSyncBitStmt.reset()?;
370361
reset_cached_stmt(delete_stmt.stmt)?;
371362

372-
let sync_rc = (*ext_data)
373-
.pClearSyncBitStmt
374-
.step();
363+
let sync_rc = (*ext_data).pClearSyncBitStmt.step();
375364

376365
(*ext_data).pClearSyncBitStmt.reset()?;
377366
if let Err(sync_rc) = sync_rc {
@@ -428,12 +417,9 @@ fn get_local_cl(
428417
let local_cl_stmt_ref = tbl_info.get_local_cl_stmt(db)?;
429418
let local_cl_stmt = local_cl_stmt_ref.as_ref().ok_or(ResultCode::ERROR)?;
430419

431-
let rc = local_cl_stmt.bind_int64(1, key);
432-
if let Err(rc) = rc {
433-
reset_cached_stmt(local_cl_stmt.stmt)?;
434-
return Err(rc);
435-
}
436-
let rc = local_cl_stmt.bind_int64(2, key);
420+
let rc = local_cl_stmt
421+
.bind_int64(1, key)
422+
.and_then(|_| local_cl_stmt.bind_int64(2, key));
437423
if let Err(rc) = rc {
438424
reset_cached_stmt(local_cl_stmt.stmt)?;
439425
return Err(rc);

core/rs/core/src/tableinfo.rs

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,10 @@ impl TableInfo {
111111
let stmt_ref = self.get_select_key_stmt(db)?;
112112
let stmt = stmt_ref.as_ref().ok_or(ResultCode::ERROR)?;
113113
for (i, pk) in pks.iter().enumerate() {
114-
stmt.bind_value(i as i32 + 1, *pk)?;
114+
if let Err(rc) = stmt.bind_value(i as i32 + 1, *pk) {
115+
stmt.clear_bindings()?;
116+
return Err(rc);
117+
}
115118
}
116119
match stmt.step() {
117120
Ok(ResultCode::DONE) => {
@@ -141,7 +144,10 @@ impl TableInfo {
141144
let stmt_ref = self.get_insert_or_ignore_returning_key_stmt(db)?;
142145
let stmt = stmt_ref.as_ref().ok_or(ResultCode::ERROR)?;
143146
for (i, pk) in pks.iter().enumerate() {
144-
stmt.bind_value(i as i32 + 1, *pk)?;
147+
if let Err(rc) = stmt.bind_value(i as i32 + 1, *pk) {
148+
stmt.clear_bindings()?;
149+
return Err(rc);
150+
}
145151
}
146152
match stmt.step() {
147153
Ok(ResultCode::DONE) => {
@@ -208,7 +214,10 @@ impl TableInfo {
208214
let stmt_ref = self.get_insert_key_stmt(db)?;
209215
let stmt = stmt_ref.as_ref().ok_or(ResultCode::ERROR)?;
210216
for (i, pk) in pks.iter().enumerate() {
211-
stmt.bind_value(i as i32 + 1, *pk)?;
217+
if let Err(rc) = stmt.bind_value(i as i32 + 1, *pk) {
218+
stmt.clear_bindings()?;
219+
return Err(rc);
220+
}
212221
}
213222
match stmt.step() {
214223
Ok(ResultCode::ROW) => {
@@ -478,15 +487,15 @@ impl TableInfo {
478487
// from the old pk can override the ones from the new at a node
479488
// following our changes.
480489
let sql = format!(
481-
"UPDATE OR REPLACE \"{table_name}__crsql_clock\" SET
482-
key = ?,
483-
db_version = ?,
484-
seq = ?,
485-
col_version = col_version + 1,
486-
site_id = 0
487-
WHERE
488-
key = ? AND col_name = ?",
489-
table_name = crate::util::escape_ident(&self.tbl_name),
490+
"UPDATE OR REPLACE \"{table_name}__crsql_clock\" SET
491+
key = ?,
492+
db_version = ?,
493+
seq = ?,
494+
col_version = col_version + 1,
495+
site_id = 0
496+
WHERE
497+
key = ? AND col_name = ?",
498+
table_name = crate::util::escape_ident(&self.tbl_name),
490499
);
491500
let ret = db.prepare_v3(&sql, sqlite::PREPARE_PERSISTENT)?;
492501
*self.move_non_sentinels_stmt.try_borrow_mut()? = Some(ret);

0 commit comments

Comments
 (0)