diff --git a/core/incremental/compiler.rs b/core/incremental/compiler.rs index 80163f5e9..972d6797b 100644 --- a/core/incremental/compiler.rs +++ b/core/incremental/compiler.rs @@ -21,7 +21,6 @@ use crate::Pager; use crate::{return_and_restore_if_io, return_if_io, LimboError, Result}; use std::collections::HashMap; use std::fmt::{self, Display, Formatter}; -use std::rc::Rc; use std::sync::Arc; // The state table has 5 columns: operator_id, zset_id, element_id, value, weight @@ -435,7 +434,7 @@ impl DbspCircuit { pub fn run_circuit( &mut self, execute_state: &mut ExecuteState, - pager: &Rc, + pager: &Arc, state_cursors: &mut DbspStateCursors, commit_operators: bool, ) -> Result> { @@ -462,7 +461,7 @@ impl DbspCircuit { /// * `execute_state` - State machine containing input deltas and tracking execution progress pub fn execute( &mut self, - pager: Rc, + pager: Arc, execute_state: &mut ExecuteState, ) -> Result> { if let Some(root_id) = self.root { @@ -499,7 +498,7 @@ impl DbspCircuit { pub fn commit( &mut self, input_data: HashMap, - pager: Rc, + pager: Arc, ) -> Result> { // No root means nothing to commit if self.root.is_none() { @@ -643,7 +642,7 @@ impl DbspCircuit { fn execute_node( &mut self, node_id: usize, - pager: Rc, + pager: Arc, execute_state: &mut ExecuteState, commit_operators: bool, cursors: &mut DbspStateCursors, @@ -1320,7 +1319,6 @@ mod tests { use crate::translate::logical::LogicalSchema; use crate::util::IOExt; use crate::{Database, MemoryIO, Pager, IO}; - use std::rc::Rc; use std::sync::Arc; use turso_parser::ast; use turso_parser::parser::Parser; @@ -1416,7 +1414,7 @@ mod tests { }}; } - fn setup_btree_for_circuit() -> (Rc, usize, usize, usize) { + fn setup_btree_for_circuit() -> (Arc, usize, usize, usize) { let io: Arc = Arc::new(MemoryIO::new()); let db = Database::open_file(io.clone(), ":memory:", false, false).unwrap(); let conn = db.connect().unwrap(); @@ -1579,7 +1577,7 @@ mod tests { fn test_execute( circuit: &mut DbspCircuit, inputs: HashMap, - pager: Rc, + pager: Arc, ) -> Result { let mut execute_state = ExecuteState::Init { input_data: DeltaSet::from_map(inputs), @@ -1593,7 +1591,7 @@ mod tests { // Helper to get the committed BTree state from main_data_root // This reads the actual persisted data from the BTree #[cfg(test)] - fn get_current_state(pager: Rc, circuit: &DbspCircuit) -> Result { + fn get_current_state(pager: Arc, circuit: &DbspCircuit) -> Result { let mut delta = Delta::new(); let main_data_root = circuit.main_data_root; diff --git a/core/incremental/cursor.rs b/core/incremental/cursor.rs index 99355c131..9de35df70 100644 --- a/core/incremental/cursor.rs +++ b/core/incremental/cursor.rs @@ -38,7 +38,7 @@ pub struct MaterializedViewCursor { // Core components btree_cursor: Box, view: Arc>, - pager: Rc, + pager: Arc, // Current changes that are uncommitted uncommitted: RowKeyZSet, @@ -65,7 +65,7 @@ impl MaterializedViewCursor { pub fn new( btree_cursor: Box, view: Arc>, - pager: Rc, + pager: Arc, tx_state: Rc, ) -> Result { Ok(Self { @@ -302,7 +302,6 @@ mod tests { use super::*; use crate::util::IOExt; use crate::{Connection, Database, OpenFlags}; - use std::rc::Rc; use std::sync::Arc; /// Helper to create a test connection with a table and materialized view @@ -335,7 +334,7 @@ mod tests { /// Helper to create a test cursor for the materialized view fn create_test_cursor( conn: &Arc, - ) -> Result<(MaterializedViewCursor, Rc, Rc)> { + ) -> Result<(MaterializedViewCursor, Rc, Arc)> { // Get the schema and view let view_mutex = conn .schema diff --git a/core/incremental/expr_compiler.rs b/core/incremental/expr_compiler.rs index f94d72a2a..152bb9c99 100644 --- a/core/incremental/expr_compiler.rs +++ b/core/incremental/expr_compiler.rs @@ -12,7 +12,6 @@ use crate::vdbe::insn::Insn; use crate::vdbe::{Program, ProgramState, Register}; use crate::SymbolTable; use crate::{CaptureDataChangesMode, Connection, QueryMode, Result, Value}; -use std::rc::Rc; use std::sync::Arc; use turso_parser::ast::{Expr, Literal, Operator}; @@ -386,7 +385,7 @@ impl CompiledExpression { } /// Execute the compiled expression with the given input values - pub fn execute(&self, values: &[Value], pager: Rc) -> Result { + pub fn execute(&self, values: &[Value], pager: Arc) -> Result { match &self.executor { ExpressionExecutor::Trivial(trivial) => { // Fast path: evaluate trivial expression inline diff --git a/core/incremental/operator.rs b/core/incremental/operator.rs index 8d0abe284..677d26aa4 100644 --- a/core/incremental/operator.rs +++ b/core/incremental/operator.rs @@ -2239,7 +2239,7 @@ mod tests { use std::sync::{Arc, Mutex}; /// Create a test pager for operator tests with both table and index - fn create_test_pager() -> (std::rc::Rc, usize, usize) { + fn create_test_pager() -> (std::sync::Arc, usize, usize) { let io: Arc = Arc::new(MemoryIO::new()); let db = Database::open_file(io.clone(), ":memory:", false, false).unwrap(); let conn = db.connect().unwrap(); @@ -2270,7 +2270,7 @@ mod tests { /// Returns a Delta with all the current aggregate values fn get_current_state_from_btree( agg: &AggregateOperator, - pager: &std::rc::Rc, + pager: &std::sync::Arc, cursors: &mut DbspStateCursors, ) -> Delta { let mut result = Delta::new(); diff --git a/core/incremental/view.rs b/core/incremental/view.rs index 591e95e38..325977e18 100644 --- a/core/incremental/view.rs +++ b/core/incremental/view.rs @@ -384,7 +384,7 @@ impl IncrementalView { pub fn execute_with_uncommitted( &mut self, uncommitted: DeltaSet, - pager: Rc, + pager: Arc, execute_state: &mut crate::incremental::compiler::ExecuteState, ) -> crate::Result> { // Initialize execute_state with the input data @@ -560,7 +560,7 @@ impl IncrementalView { pub fn populate_from_table( &mut self, conn: &std::sync::Arc, - pager: &std::rc::Rc, + pager: &std::sync::Arc, _btree_cursor: &mut BTreeCursor, ) -> crate::Result> { // If already populated, return immediately @@ -835,7 +835,7 @@ impl IncrementalView { pub fn merge_delta( &mut self, delta_set: DeltaSet, - pager: std::rc::Rc, + pager: std::sync::Arc, ) -> crate::Result> { // Early return if all deltas are empty if delta_set.is_empty() { diff --git a/core/lib.rs b/core/lib.rs index 00ff043c4..07d989990 100644 --- a/core/lib.rs +++ b/core/lib.rs @@ -489,7 +489,7 @@ impl Database { .get(); let conn = Arc::new(Connection { _db: self.clone(), - pager: RefCell::new(Rc::new(pager)), + pager: RefCell::new(Arc::new(pager)), schema: RefCell::new( self.schema .lock() @@ -867,7 +867,7 @@ impl CaptureDataChangesMode { struct DatabaseCatalog { name_to_index: HashMap, allocated: Vec, - index_to_data: HashMap, Rc)>, + index_to_data: HashMap, Arc)>, } #[allow(unused)] @@ -896,7 +896,7 @@ impl DatabaseCatalog { } } - fn get_pager_by_index(&self, idx: &usize) -> Rc { + fn get_pager_by_index(&self, idx: &usize) -> Arc { let (_db, pager) = self .index_to_data .get(idx) @@ -912,7 +912,7 @@ impl DatabaseCatalog { index } - fn insert(&mut self, s: &str, data: (Arc, Rc)) -> usize { + fn insert(&mut self, s: &str, data: (Arc, Arc)) -> usize { let idx = self.add(s); self.index_to_data.insert(idx, data); idx @@ -972,7 +972,7 @@ impl DatabaseCatalog { pub struct Connection { _db: Arc, - pager: RefCell>, + pager: RefCell>, schema: RefCell>, /// Per-database schema cache (database_index -> schema) /// Loaded lazily to avoid copying all schemas on connection open @@ -1743,7 +1743,7 @@ impl Connection { } self.pager.borrow_mut().clear_page_cache(); let pager = self._db.init_pager(Some(size.get() as usize))?; - self.pager.replace(Rc::new(pager)); + self.pager.replace(Arc::new(pager)); self.pager.borrow().set_initial_page_size(size); Ok(()) @@ -1877,7 +1877,7 @@ impl Connection { self._db.db_state.is_initialized() } - fn get_pager_from_database_index(&self, index: &usize) -> Rc { + fn get_pager_from_database_index(&self, index: &usize) -> Arc { if *index < 2 { self.pager.borrow().clone() } else { @@ -1937,7 +1937,7 @@ impl Connection { .with_views(use_views) .with_strict(use_strict); let db = Self::from_uri_attached(path, db_opts, self._db.io.clone())?; - let pager = Rc::new(db.init_pager(None)?); + let pager = Arc::new(db.init_pager(None)?); self.attached_databases .borrow_mut() @@ -2092,7 +2092,7 @@ impl Connection { databases } - pub fn get_pager(&self) -> Rc { + pub fn get_pager(&self) -> Arc { self.pager.borrow().clone() } @@ -2242,7 +2242,7 @@ pub struct Statement { program: vdbe::Program, state: vdbe::ProgramState, mv_store: Option>, - pager: Rc, + pager: Arc, /// Whether the statement accesses the database. /// Used to determine whether we need to check for schema changes when /// starting a transaction. @@ -2259,7 +2259,7 @@ impl Statement { pub fn new( program: vdbe::Program, mv_store: Option>, - pager: Rc, + pager: Arc, query_mode: QueryMode, ) -> Self { let accesses_db = program.accesses_db; diff --git a/core/mvcc/cursor.rs b/core/mvcc/cursor.rs index 6ffade31a..9622b1c6d 100644 --- a/core/mvcc/cursor.rs +++ b/core/mvcc/cursor.rs @@ -5,7 +5,6 @@ use crate::Result; use crate::{Pager, Value}; use std::fmt::Debug; use std::ops::Bound; -use std::rc::Rc; use std::sync::Arc; #[derive(Debug, Copy, Clone)] @@ -30,7 +29,7 @@ impl MvccLazyCursor { db: Arc>, tx_id: u64, table_id: u64, - pager: Rc, + pager: Arc, ) -> Result> { db.maybe_initialize_table(table_id, pager)?; let cursor = Self { diff --git a/core/mvcc/database/mod.rs b/core/mvcc/database/mod.rs index 62a7a3b11..8ebcc9a22 100644 --- a/core/mvcc/database/mod.rs +++ b/core/mvcc/database/mod.rs @@ -25,7 +25,6 @@ use std::collections::HashSet; use std::fmt::Debug; use std::marker::PhantomData; use std::ops::Bound; -use std::rc::Rc; use std::sync::atomic::{AtomicU64, Ordering}; use std::sync::Arc; use tracing::instrument; @@ -303,7 +302,7 @@ struct CommitCoordinator { pub struct CommitStateMachine { state: CommitState, is_finalized: bool, - pager: Rc, + pager: Arc, tx_id: TxID, connection: Arc, /// Write set sorted by table id and row id @@ -351,7 +350,7 @@ pub struct DeleteRowStateMachine { impl CommitStateMachine { fn new( state: CommitState, - pager: Rc, + pager: Arc, tx_id: TxID, connection: Arc, commit_coordinator: Arc, @@ -1306,7 +1305,7 @@ impl MvStore { /// to ensure exclusive write access as per SQLite semantics. pub fn begin_exclusive_tx( &self, - pager: Rc, + pager: Arc, maybe_existing_tx_id: Option, ) -> Result> { self._begin_exclusive_tx(pager, false, maybe_existing_tx_id) @@ -1318,7 +1317,7 @@ impl MvStore { /// to ensure exclusive write access as per SQLite semantics. pub fn upgrade_to_exclusive_tx( &self, - pager: Rc, + pager: Arc, maybe_existing_tx_id: Option, ) -> Result> { self._begin_exclusive_tx(pager, true, maybe_existing_tx_id) @@ -1331,7 +1330,7 @@ impl MvStore { #[instrument(skip_all, level = Level::DEBUG)] fn _begin_exclusive_tx( &self, - pager: Rc, + pager: Arc, is_upgrade_from_read: bool, maybe_existing_tx_id: Option, ) -> Result> { @@ -1390,7 +1389,7 @@ impl MvStore { /// This function starts a new transaction in the database and returns a `TxID` value /// that you can use to perform operations within the transaction. All changes made within the /// transaction are isolated from other transactions until you commit the transaction. - pub fn begin_tx(&self, pager: Rc) -> Result { + pub fn begin_tx(&self, pager: Arc) -> Result { let tx_id = self.get_tx_id(); let begin_ts = self.get_timestamp(); let tx = Transaction::new(tx_id, begin_ts); @@ -1418,7 +1417,7 @@ impl MvStore { pub fn commit_tx( &self, tx_id: TxID, - pager: Rc, + pager: Arc, connection: &Arc, ) -> Result>> { let state_machine: StateMachine> = @@ -1444,7 +1443,7 @@ impl MvStore { pub fn rollback_tx( &self, tx_id: TxID, - pager: Rc, + pager: Arc, connection: &Connection, ) -> Result<()> { let tx_unlocked = self.txs.get(&tx_id).unwrap(); @@ -1679,7 +1678,7 @@ impl MvStore { /// /// # Arguments /// - pub fn maybe_initialize_table(&self, table_id: u64, pager: Rc) -> Result<()> { + pub fn maybe_initialize_table(&self, table_id: u64, pager: Arc) -> Result<()> { tracing::trace!("scan_row_ids_for_table(table_id={})", table_id); // First, check if the table is already loaded. @@ -1698,7 +1697,7 @@ impl MvStore { /// Scans the table and inserts the rows into the database. /// /// This is initialization step for a table, where we still don't have any rows so we need to insert them if there are. - fn scan_load_table(&self, table_id: u64, pager: Rc) -> Result<()> { + fn scan_load_table(&self, table_id: u64, pager: Arc) -> Result<()> { let root_page = table_id as usize; let mut cursor = BTreeCursor::new_table( None, // No MVCC cursor for scanning diff --git a/core/schema.rs b/core/schema.rs index cb2817d77..97d8ef3d6 100644 --- a/core/schema.rs +++ b/core/schema.rs @@ -295,10 +295,10 @@ impl Schema { pub fn make_from_btree( &mut self, mv_cursor: Option>>, - pager: Rc, + pager: Arc, syms: &SymbolTable, ) -> Result<()> { - let mut cursor = BTreeCursor::new_table(mv_cursor, pager.clone(), 1, 10); + let mut cursor = BTreeCursor::new_table(mv_cursor, Arc::clone(&pager), 1, 10); let mut from_sql_indexes = Vec::with_capacity(10); let mut automatic_indices: HashMap> = diff --git a/core/storage/btree.rs b/core/storage/btree.rs index a625baa57..398e7092a 100644 --- a/core/storage/btree.rs +++ b/core/storage/btree.rs @@ -481,7 +481,7 @@ pub struct BTreeCursor { /// The multi-version cursor that is used to read and write to the database file. mv_cursor: Option>>, /// The pager that is used to read and write to the database file. - pub pager: Rc, + pub pager: Arc, /// Cached value of the usable space of a BTree page, since it is very expensive to call in a hot loop via pager.usable_space(). /// This is OK to cache because both 'PRAGMA page_size' and '.filectrl reserve_bytes' only have an effect on: /// 1. an uninitialized database, @@ -584,7 +584,7 @@ impl BTreeNodeState { impl BTreeCursor { pub fn new( mv_cursor: Option>>, - pager: Rc, + pager: Arc, root_page: usize, num_columns: usize, ) -> Self { @@ -635,7 +635,7 @@ impl BTreeCursor { pub fn new_table( mv_cursor: Option>>, - pager: Rc, + pager: Arc, root_page: usize, num_columns: usize, ) -> Self { @@ -644,7 +644,7 @@ impl BTreeCursor { pub fn new_index( mv_cursor: Option>>, - pager: Rc, + pager: Arc, root_page: usize, index: &Index, num_columns: usize, @@ -5832,7 +5832,7 @@ impl std::fmt::Debug for IntegrityCheckState { pub fn integrity_check( state: &mut IntegrityCheckState, errors: &mut Vec, - pager: &Rc, + pager: &Arc, ) -> Result> { loop { let Some(IntegrityCheckPageEntry { @@ -6108,7 +6108,7 @@ pub fn integrity_check( } pub fn btree_read_page( - pager: &Rc, + pager: &Arc, page_idx: usize, ) -> Result<(Arc, Option)> { pager.read_page(page_idx) @@ -7476,7 +7476,7 @@ fn fill_cell_payload( cell_idx: usize, record: &ImmutableRecord, usable_space: usize, - pager: Rc, + pager: Arc, fill_cell_payload_state: &mut FillCellPayloadState, ) -> Result> { let overflow_page_pointer_size = 4; @@ -7801,7 +7801,7 @@ mod tests { fn insert_record( cursor: &mut BTreeCursor, - pager: &Rc, + pager: &Arc, rowid: i64, val: Value, ) -> Result<(), LimboError> { @@ -7888,7 +7888,7 @@ mod tests { } } - fn validate_btree(pager: Rc, page_idx: usize) -> (usize, bool) { + fn validate_btree(pager: Arc, page_idx: usize) -> (usize, bool) { let num_columns = 5; let cursor = BTreeCursor::new_table(None, pager.clone(), page_idx, num_columns); let (page, _c) = cursor.read_page(page_idx).unwrap(); @@ -7998,7 +7998,7 @@ mod tests { (depth.unwrap(), valid) } - fn format_btree(pager: Rc, page_idx: usize, depth: usize) -> String { + fn format_btree(pager: Arc, page_idx: usize, depth: usize) -> String { let num_columns = 5; let cursor = BTreeCursor::new_table(None, pager.clone(), page_idx, num_columns); @@ -8056,7 +8056,7 @@ mod tests { } } - fn empty_btree() -> (Rc, usize, Arc, Arc) { + fn empty_btree() -> (Arc, usize, Arc, Arc) { #[allow(clippy::arc_with_non_send_sync)] let io: Arc = Arc::new(MemoryIO::new()); let db = Database::open_file(io.clone(), ":memory:", false, false).unwrap(); @@ -8739,7 +8739,7 @@ mod tests { } fn validate_expected_keys( - pager: &Rc, + pager: &Arc, cursor: &mut BTreeCursor, expected_keys: &[Vec], seed: u64, @@ -8967,7 +8967,7 @@ mod tests { } #[allow(clippy::arc_with_non_send_sync)] - fn setup_test_env(database_size: u32) -> Rc { + fn setup_test_env(database_size: u32) -> Arc { let page_size = 512; let io: Arc = Arc::new(MemoryIO::new()); @@ -8985,7 +8985,7 @@ mod tests { buffer_pool.clone(), ))); - let pager = Rc::new( + let pager = Arc::new( Pager::new( db_file, Some(wal), @@ -10487,7 +10487,7 @@ mod tests { } } - fn insert_cell(cell_idx: u64, size: u16, page: PageRef, pager: Rc) { + fn insert_cell(cell_idx: u64, size: u16, page: PageRef, pager: Arc) { let mut payload = Vec::new(); let regs = &[Register::Value(Value::Blob(vec![0; size as usize]))]; let record = ImmutableRecord::from_registers(regs, regs.len()); diff --git a/core/translate/mod.rs b/core/translate/mod.rs index c9d6644d3..4f31fecc2 100644 --- a/core/translate/mod.rs +++ b/core/translate/mod.rs @@ -53,7 +53,6 @@ use insert::translate_insert; use rollback::translate_rollback; use schema::{translate_create_table, translate_create_virtual_table, translate_drop_table}; use select::translate_select; -use std::rc::Rc; use std::sync::Arc; use tracing::{instrument, Level}; use transaction::{translate_tx_begin, translate_tx_commit}; @@ -65,7 +64,7 @@ use update::translate_update; pub fn translate( schema: &Schema, stmt: ast::Stmt, - pager: Rc, + pager: Arc, connection: Arc, syms: &SymbolTable, query_mode: QueryMode, diff --git a/core/translate/pragma.rs b/core/translate/pragma.rs index af172a331..6336faf25 100644 --- a/core/translate/pragma.rs +++ b/core/translate/pragma.rs @@ -2,7 +2,6 @@ //! More info: https://www.sqlite.org/pragma.html. use chrono::Datelike; -use std::rc::Rc; use std::sync::Arc; use turso_macros::match_ignore_ascii_case; use turso_parser::ast::{self, ColumnDefinition, Expr, Literal, Name}; @@ -39,7 +38,7 @@ pub fn translate_pragma( syms: &SymbolTable, name: &ast::QualifiedName, body: Option, - pager: Rc, + pager: Arc, connection: Arc, mut program: ProgramBuilder, ) -> crate::Result { @@ -90,7 +89,7 @@ fn update_pragma( schema: &Schema, syms: &SymbolTable, value: ast::Expr, - pager: Rc, + pager: Arc, connection: Arc, mut program: ProgramBuilder, ) -> crate::Result<(ProgramBuilder, TransactionMode)> { @@ -373,7 +372,7 @@ fn query_pragma( pragma: PragmaName, schema: &Schema, value: Option, - pager: Rc, + pager: Arc, connection: Arc, mut program: ProgramBuilder, ) -> crate::Result<(ProgramBuilder, TransactionMode)> { @@ -710,7 +709,7 @@ fn emit_columns_for_table_info( fn update_auto_vacuum_mode( auto_vacuum_mode: AutoVacuumMode, largest_root_page_number: u32, - pager: Rc, + pager: Arc, ) -> crate::Result<()> { pager.io.block(|| { pager.with_header_mut(|header| { @@ -723,7 +722,7 @@ fn update_auto_vacuum_mode( fn update_cache_size( value: i64, - pager: Rc, + pager: Arc, connection: Arc, ) -> crate::Result<()> { let mut cache_size_unformatted: i64 = value; diff --git a/core/vdbe/execute.rs b/core/vdbe/execute.rs index 9ac5be7e6..58476ead1 100644 --- a/core/vdbe/execute.rs +++ b/core/vdbe/execute.rs @@ -131,7 +131,7 @@ pub type InsnFunction = fn( &Program, &mut ProgramState, &Insn, - &Rc, + &Arc, Option<&Arc>, ) -> Result; @@ -176,7 +176,7 @@ pub fn op_init( _program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Init { target_pc }, insn); @@ -189,7 +189,7 @@ pub fn op_add( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Add { lhs, rhs, dest }, insn); @@ -206,7 +206,7 @@ pub fn op_subtract( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Subtract { lhs, rhs, dest }, insn); @@ -223,7 +223,7 @@ pub fn op_multiply( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Multiply { lhs, rhs, dest }, insn); @@ -240,7 +240,7 @@ pub fn op_divide( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Divide { lhs, rhs, dest }, insn); @@ -257,7 +257,7 @@ pub fn op_drop_index( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(DropIndex { index, db: _ }, insn); @@ -272,7 +272,7 @@ pub fn op_remainder( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Remainder { lhs, rhs, dest }, insn); @@ -289,7 +289,7 @@ pub fn op_bit_and( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(BitAnd { lhs, rhs, dest }, insn); @@ -306,7 +306,7 @@ pub fn op_bit_or( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(BitOr { lhs, rhs, dest }, insn); @@ -323,7 +323,7 @@ pub fn op_bit_not( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(BitNot { reg, dest }, insn); @@ -336,7 +336,7 @@ pub fn op_checkpoint( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -380,7 +380,7 @@ pub fn op_null( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { match insn { @@ -403,7 +403,7 @@ pub fn op_null_row( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(NullRow { cursor_id }, insn); @@ -420,7 +420,7 @@ pub fn op_compare( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -466,7 +466,7 @@ pub fn op_jump( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -499,7 +499,7 @@ pub fn op_move( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -527,7 +527,7 @@ pub fn op_if_pos( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -562,7 +562,7 @@ pub fn op_not_null( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(NotNull { reg, target_pc }, insn); @@ -647,7 +647,7 @@ pub fn op_comparison( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { let (lhs, rhs, target_pc, flags, collation, op) = match insn { @@ -872,7 +872,7 @@ pub fn op_if( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -899,7 +899,7 @@ pub fn op_if_not( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -926,7 +926,7 @@ pub fn op_open_read( program: &Program, state: &mut ProgramState, insn: &Insn, - _pager: &Rc, + _pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1030,7 +1030,7 @@ pub fn op_vopen( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(VOpen { cursor_id }, insn); @@ -1052,7 +1052,7 @@ pub fn op_vcreate( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1093,7 +1093,7 @@ pub fn op_vfilter( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1137,7 +1137,7 @@ pub fn op_vcolumn( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1162,7 +1162,7 @@ pub fn op_vupdate( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1226,7 +1226,7 @@ pub fn op_vnext( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1255,7 +1255,7 @@ pub fn op_vdestroy( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(VDestroy { db, table_name }, insn); @@ -1277,7 +1277,7 @@ pub fn op_open_pseudo( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1304,7 +1304,7 @@ pub fn op_rewind( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1343,7 +1343,7 @@ pub fn op_last( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1426,7 +1426,7 @@ pub fn op_column( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1800,7 +1800,7 @@ pub fn op_type_check( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1860,7 +1860,7 @@ pub fn op_make_record( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1899,7 +1899,7 @@ pub fn op_result_row( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(ResultRow { start_reg, count }, insn); @@ -1916,7 +1916,7 @@ pub fn op_next( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -1965,7 +1965,7 @@ pub fn op_prev( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -2006,7 +2006,7 @@ pub fn op_prev( pub fn halt( program: &Program, state: &mut ProgramState, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, err_code: usize, description: &str, @@ -2049,7 +2049,7 @@ pub fn op_halt( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -2066,7 +2066,7 @@ pub fn op_halt_if_null( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -2089,7 +2089,7 @@ pub fn op_transaction( program: &Program, state: &mut ProgramState, insn: &Insn, - _pager: &Rc, + _pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -2280,7 +2280,7 @@ pub fn op_auto_commit( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -2340,7 +2340,7 @@ pub fn op_goto( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Goto { target_pc }, insn); @@ -2353,7 +2353,7 @@ pub fn op_gosub( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -2373,7 +2373,7 @@ pub fn op_return( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -2403,7 +2403,7 @@ pub fn op_integer( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Integer { value, dest }, insn); @@ -2416,7 +2416,7 @@ pub fn op_real( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Real { value, dest }, insn); @@ -2429,7 +2429,7 @@ pub fn op_real_affinity( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(RealAffinity { register }, insn); @@ -2444,7 +2444,7 @@ pub fn op_string8( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(String8 { value, dest }, insn); @@ -2457,7 +2457,7 @@ pub fn op_blob( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Blob { value, dest }, insn); @@ -2470,7 +2470,7 @@ pub fn op_row_data( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(RowData { cursor_id, dest }, insn); @@ -2512,7 +2512,7 @@ pub fn op_row_id( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(RowId { cursor_id, dest }, insn); @@ -2610,7 +2610,7 @@ pub fn op_idx_row_id( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(IdxRowId { cursor_id, dest }, insn); @@ -2630,7 +2630,7 @@ pub fn op_seek_rowid( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -2718,7 +2718,7 @@ pub fn op_deferred_seek( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -2761,7 +2761,7 @@ pub fn op_seek( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { let (cursor_id, is_index, record_source, target_pc) = match insn { @@ -2868,7 +2868,7 @@ pub enum RecordSource { pub fn seek_internal( program: &Program, state: &mut ProgramState, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, record_source: RecordSource, cursor_id: usize, @@ -2879,7 +2879,7 @@ pub fn seek_internal( fn inner( program: &Program, state: &mut ProgramState, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, record_source: RecordSource, cursor_id: usize, @@ -3156,7 +3156,7 @@ pub fn op_idx_ge( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -3207,7 +3207,7 @@ pub fn op_seek_end( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(SeekEnd { cursor_id }, *insn); @@ -3225,7 +3225,7 @@ pub fn op_idx_le( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -3276,7 +3276,7 @@ pub fn op_idx_gt( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -3327,7 +3327,7 @@ pub fn op_idx_lt( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -3378,7 +3378,7 @@ pub fn op_decr_jump_zero( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(DecrJumpZero { reg, target_pc }, insn); @@ -3429,7 +3429,7 @@ pub fn op_agg_step( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -3745,7 +3745,7 @@ pub fn op_agg_final( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { let (acc_reg, dest_reg, func) = match insn { @@ -3888,7 +3888,7 @@ pub fn op_sorter_open( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -3936,7 +3936,7 @@ pub fn op_sorter_data( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -3972,7 +3972,7 @@ pub fn op_sorter_insert( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -3999,7 +3999,7 @@ pub fn op_sorter_sort( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -4034,7 +4034,7 @@ pub fn op_sorter_next( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -4063,7 +4063,7 @@ pub fn op_function( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -5254,7 +5254,7 @@ pub fn op_init_coroutine( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -5282,7 +5282,7 @@ pub fn op_end_coroutine( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(EndCoroutine { yield_reg }, insn); @@ -5303,7 +5303,7 @@ pub fn op_yield( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -5362,7 +5362,7 @@ pub fn op_insert( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -5598,7 +5598,7 @@ pub fn op_int_64( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -5633,7 +5633,7 @@ pub fn op_delete( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -5740,7 +5740,7 @@ pub fn op_idx_delete( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -5853,7 +5853,7 @@ pub fn op_idx_insert( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -5999,7 +5999,7 @@ pub fn op_new_rowid( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -6133,7 +6133,7 @@ pub fn op_must_be_int( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(MustBeInt { reg }, insn); @@ -6166,7 +6166,7 @@ pub fn op_soft_null( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(SoftNull { reg }, insn); @@ -6187,7 +6187,7 @@ pub fn op_no_conflict( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -6281,7 +6281,7 @@ pub fn op_not_exists( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -6314,7 +6314,7 @@ pub fn op_offset_limit( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -6359,7 +6359,7 @@ pub fn op_open_write( program: &Program, state: &mut ProgramState, insn: &Insn, - _pager: &Rc, + _pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -6446,7 +6446,7 @@ pub fn op_copy( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -6468,7 +6468,7 @@ pub fn op_create_btree( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(CreateBtree { db, root, flags }, insn); @@ -6493,7 +6493,7 @@ pub fn op_destroy( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -6522,7 +6522,7 @@ pub fn op_reset_sorter( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(ResetSorter { cursor_id }, insn); @@ -6549,7 +6549,7 @@ pub fn op_drop_table( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(DropTable { db, table_name, .. }, insn); @@ -6571,7 +6571,7 @@ pub fn op_drop_view( program: &Program, state: &mut ProgramState, insn: &Insn, - _pager: &Rc, + _pager: &Arc, _mv_store: Option<&Arc>, ) -> Result { load_insn!(DropView { db, view_name }, insn); @@ -6591,7 +6591,7 @@ pub fn op_close( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Close { cursor_id }, insn); @@ -6605,7 +6605,7 @@ pub fn op_is_null( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(IsNull { reg, target_pc }, insn); @@ -6621,7 +6621,7 @@ pub fn op_coll_seq( _program: &Program, state: &mut ProgramState, insn: &Insn, - _pager: &Rc, + _pager: &Arc, _mv_store: Option<&Arc>, ) -> Result { let Insn::CollSeq { reg, collation } = insn else { @@ -6644,7 +6644,7 @@ pub fn op_page_count( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(PageCount { db, dest }, insn); @@ -6666,7 +6666,7 @@ pub fn op_parse_schema( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -6725,7 +6725,7 @@ pub fn op_populate_materialized_views( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, _mv_store: Option<&Arc>, ) -> Result { load_insn!(PopulateMaterializedViews { cursors }, insn); @@ -6802,7 +6802,7 @@ pub fn op_read_cookie( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(ReadCookie { db, dest, cookie }, insn); @@ -6832,7 +6832,7 @@ pub fn op_set_cookie( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -6885,7 +6885,7 @@ pub fn op_shift_right( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(ShiftRight { lhs, rhs, dest }, insn); @@ -6902,7 +6902,7 @@ pub fn op_shift_left( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(ShiftLeft { lhs, rhs, dest }, insn); @@ -6919,7 +6919,7 @@ pub fn op_add_imm( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(AddImm { register, value }, insn); @@ -6948,7 +6948,7 @@ pub fn op_variable( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Variable { index, dest }, insn); @@ -6961,7 +6961,7 @@ pub fn op_zero_or_null( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(ZeroOrNull { rg1, rg2, dest }, insn); @@ -6978,7 +6978,7 @@ pub fn op_not( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Not { reg, dest }, insn); @@ -6991,7 +6991,7 @@ pub fn op_concat( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Concat { lhs, rhs, dest }, insn); @@ -7008,7 +7008,7 @@ pub fn op_and( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(And { lhs, rhs, dest }, insn); @@ -7025,7 +7025,7 @@ pub fn op_or( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(Or { lhs, rhs, dest }, insn); @@ -7042,7 +7042,7 @@ pub fn op_noop( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { // Do nothing @@ -7056,10 +7056,10 @@ pub enum OpOpenEphemeralState { #[default] Start, StartingTxn { - pager: Rc, + pager: Arc, }, CreateBtree { - pager: Rc, + pager: Arc, }, // clippy complains this variant is too big when compared to the rest of the variants // so it says we need to box it here @@ -7071,7 +7071,7 @@ pub fn op_open_ephemeral( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { let (cursor_id, is_table) = match insn { @@ -7125,7 +7125,7 @@ pub fn op_open_ephemeral( let buffer_pool = program.connection._db.buffer_pool.clone(); let page_cache = Arc::new(RwLock::new(PageCache::default())); - let pager = Rc::new(Pager::new( + let pager = Arc::new(Pager::new( db_file, None, db_file_io, @@ -7251,7 +7251,7 @@ pub fn op_open_dup( program: &Program, state: &mut ProgramState, insn: &Insn, - _pager: &Rc, + _pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -7318,7 +7318,7 @@ pub fn op_once( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -7342,7 +7342,7 @@ pub fn op_found( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { let (cursor_id, target_pc, record_reg, num_regs) = match insn { @@ -7404,7 +7404,7 @@ pub fn op_affinity( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -7438,7 +7438,7 @@ pub fn op_count( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -7481,7 +7481,7 @@ pub fn op_integrity_check( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -7561,7 +7561,7 @@ pub fn op_cast( _program: &Program, state: &mut ProgramState, insn: &Insn, - _pager: &Rc, + _pager: &Arc, _mv_store: Option<&Arc>, ) -> Result { load_insn!(Cast { reg, affinity }, insn); @@ -7584,7 +7584,7 @@ pub fn op_rename_table( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(RenameTable { from, to }, insn); @@ -7628,7 +7628,7 @@ pub fn op_drop_column( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -7665,7 +7665,7 @@ pub fn op_add_column( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(AddColumn { table, column }, insn); @@ -7696,7 +7696,7 @@ pub fn op_alter_column( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!( @@ -7760,7 +7760,7 @@ pub fn op_if_neg( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(IfNeg { reg, target_pc }, insn); @@ -9195,7 +9195,7 @@ pub fn op_max_pgcnt( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(MaxPgcnt { db, dest, new_max }, insn); @@ -9223,7 +9223,7 @@ pub fn op_journal_mode( program: &Program, state: &mut ProgramState, insn: &Insn, - pager: &Rc, + pager: &Arc, mv_store: Option<&Arc>, ) -> Result { load_insn!(JournalMode { db, dest, new_mode }, insn); diff --git a/core/vdbe/mod.rs b/core/vdbe/mod.rs index 0606f2e08..36f2dc7ae 100644 --- a/core/vdbe/mod.rs +++ b/core/vdbe/mod.rs @@ -61,7 +61,7 @@ use execute::{ use explain::{insn_to_row_with_comment, EXPLAIN_COLUMNS, EXPLAIN_QUERY_PLAN_COLUMNS}; use regex::Regex; -use std::{cell::Cell, collections::HashMap, num::NonZero, rc::Rc, sync::Arc}; +use std::{cell::Cell, collections::HashMap, num::NonZero, sync::Arc}; use tracing::{instrument, Level}; /// State machine for committing view deltas with I/O handling @@ -492,7 +492,7 @@ pub struct Program { } impl Program { - fn get_pager_from_database_index(&self, idx: &usize) -> Rc { + fn get_pager_from_database_index(&self, idx: &usize) -> Arc { self.connection.get_pager_from_database_index(idx) } @@ -500,7 +500,7 @@ impl Program { &self, state: &mut ProgramState, mv_store: Option>, - pager: Rc, + pager: Arc, query_mode: QueryMode, ) -> Result { match query_mode { @@ -514,7 +514,7 @@ impl Program { &self, state: &mut ProgramState, _mv_store: Option>, - pager: Rc, + pager: Arc, ) -> Result { debug_assert!(state.column_count() == EXPLAIN_COLUMNS.len()); if self.connection.closed.get() { @@ -568,7 +568,7 @@ impl Program { &self, state: &mut ProgramState, _mv_store: Option>, - pager: Rc, + pager: Arc, ) -> Result { debug_assert!(state.column_count() == EXPLAIN_QUERY_PLAN_COLUMNS.len()); loop { @@ -616,7 +616,7 @@ impl Program { &self, state: &mut ProgramState, mv_store: Option>, - pager: Rc, + pager: Arc, ) -> Result { let enable_tracing = tracing::enabled!(tracing::Level::TRACE); loop { @@ -692,7 +692,7 @@ impl Program { &self, state: &mut ProgramState, rollback: bool, - pager: &Rc, + pager: &Arc, ) -> Result> { use crate::types::IOResult; @@ -792,7 +792,7 @@ impl Program { pub fn commit_txn( &self, - pager: Rc, + pager: Arc, program_state: &mut ProgramState, mv_store: Option<&Arc>, rollback: bool, @@ -895,7 +895,7 @@ impl Program { #[instrument(skip(self, pager, connection), level = Level::DEBUG)] fn step_end_write_txn( &self, - pager: &Rc, + pager: &Arc, commit_state: &mut CommitState, connection: &Connection, rollback: bool, @@ -1061,7 +1061,7 @@ impl Row { /// Handle a program error by rolling back the transaction pub fn handle_program_error( - pager: &Rc, + pager: &Arc, connection: &Connection, err: &LimboError, mv_store: Option<&Arc>,