fix merge conflicts

This commit is contained in:
pedrocarlo
2025-07-22 00:38:52 -03:00
parent d2019e95f3
commit 0779c23bbf
3 changed files with 16 additions and 8 deletions

View File

@@ -42,6 +42,7 @@ mod numeric;
#[global_allocator]
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
use crate::storage::header_accessor::HeaderRef;
use crate::translate::optimizer::optimize_plan;
use crate::translate::pragma::TURSO_CDC_DEFAULT_TABLE_NAME;
#[cfg(all(feature = "fs", feature = "conn_raw_api"))]
@@ -310,7 +311,10 @@ impl Database {
let pager = conn.pager.borrow().clone();
db.with_schema_mut(|schema| {
schema.schema_version = header_accessor::get_schema_cookie(&conn.pager.borrow())?;
let header_ref = pager.io.block(|| HeaderRef::from_pager(&pager))?;
let header = header_ref.borrow();
let header_schema_cookie = header.schema_cookie.get();
schema.schema_version = header_schema_cookie;
let result = schema
.make_from_btree(None, pager.clone(), &syms)
.or_else(|e| {
@@ -1702,8 +1706,9 @@ impl Statement {
let mut res = self
.program
.step(&mut self.state, self.mv_store.clone(), self.pager.clone());
for _ in 0..MAX_SCHEMA_RETRY {
for i in 0..MAX_SCHEMA_RETRY {
// Only reprepare if we still need to update schema
dbg!(i);
if !matches!(res, Err(LimboError::SchemaUpdated)) {
break;
}
@@ -1717,12 +1722,13 @@ impl Statement {
}
fn reprepare(&mut self) -> Result<()> {
let conn = self.program.connection.clone();
*conn.schema.borrow_mut() = conn._db.clone_schema()?;
self.program = {
let mut parser = Parser::new(self.program.sql.as_bytes());
let cmd = parser.next()?;
let cmd = cmd.expect("Same SQL string should be able to be parsed");
let conn = self.program.connection.clone();
let syms = conn.syms.borrow();
match cmd {

View File

@@ -113,7 +113,6 @@ pub fn translate_attach(
},
});
program.epilogue(super::emitter::TransactionMode::None);
Ok(program)
}
@@ -178,6 +177,5 @@ pub fn translate_detach(
},
});
program.epilogue(super::emitter::TransactionMode::None);
Ok(program)
}

View File

@@ -4,6 +4,7 @@ use crate::numeric::{NullableInteger, Numeric};
use crate::schema::Table;
use crate::storage::btree::{integrity_check, IntegrityCheckError, IntegrityCheckState};
use crate::storage::database::DatabaseFile;
use crate::storage::header_accessor::HeaderRef;
use crate::storage::page_cache::DumbLruPageCache;
use crate::storage::pager::{AtomicDbState, CreateBTreeFlags, DbState};
use crate::storage::sqlite3_ondisk::read_varint;
@@ -2008,7 +2009,9 @@ pub fn op_transaction(
if state.mv_tx_id.is_none() {
// We allocate the first page lazily in the first transaction.
return_if_io!(pager.maybe_allocate_page1());
let header_schema_cookie = header_accessor::get_schema_cookie(pager)?;
let header_ref = pager.io.block(|| HeaderRef::from_pager(&pager))?;
let header = header_ref.borrow();
let header_schema_cookie = header.schema_cookie.get();
if header_schema_cookie != *schema_cookie {
return Err(LimboError::SchemaUpdated);
}
@@ -2084,8 +2087,9 @@ pub fn op_transaction(
// Can only read header if page 1 has been allocated already
// begin_write_tx and begin_read_tx guarantee that happens
let header_schema_cookie = header_accessor::get_schema_cookie(pager)?;
tracing::info!(header_schema_cookie, schema_cookie);
let header_ref = pager.io.block(|| HeaderRef::from_pager(&pager))?;
let header = header_ref.borrow();
let header_schema_cookie = header.schema_cookie.get();
if header_schema_cookie != *schema_cookie {
return Err(LimboError::SchemaUpdated);
}