This commit is contained in:
Piotr Osiewicz 2024-01-01 23:56:04 +01:00
parent e2ec96e44a
commit 86facbbe4a
3 changed files with 9 additions and 9 deletions

View file

@ -20,8 +20,8 @@ impl Connection {
self.sqlite3,
sql_str.as_c_str().as_ptr(),
None,
0 as *mut _,
0 as *mut _,
std::ptr::null_mut(),
std::ptr::null_mut(),
);
}
self.last_error()
@ -59,10 +59,10 @@ impl Connection {
if completed_migration != migration {
return Err(anyhow!(formatdoc! {"
Migration changed for {} at step {}
Stored migration:
{}
Proposed migration:
{}", domain, index, completed_migration, migration}));
} else {

View file

@ -232,13 +232,13 @@ impl<'a> Statement<'a> {
.last_error()
.with_context(|| format!("Failed to read text length at {index}"))?;
let slice = unsafe { slice::from_raw_parts(pointer as *const u8, len) };
let slice = unsafe { slice::from_raw_parts(pointer, len) };
Ok(str::from_utf8(slice)?)
}
pub fn bind<T: Bind>(&self, value: &T, index: i32) -> Result<i32> {
debug_assert!(index > 0);
Ok(value.bind(self, index)?)
value.bind(self, index)
}
pub fn column<T: Column>(&mut self) -> Result<T> {

View file

@ -10,14 +10,14 @@ use crate::{connection::Connection, domain::Migrator, util::UnboundedSyncSender}
const MIGRATION_RETRIES: usize = 10;
type QueuedWrite = Box<dyn 'static + Send + FnOnce()>;
type WriteQueueConstructor =
Box<dyn 'static + Send + FnMut() -> Box<dyn 'static + Send + Sync + Fn(QueuedWrite)>>;
type WriteQueue = Box<dyn 'static + Send + Sync + Fn(QueuedWrite)>;
type WriteQueueConstructor = Box<dyn 'static + Send + FnMut() -> WriteQueue>;
lazy_static! {
/// List of queues of tasks by database uri. This lets us serialize writes to the database
/// and have a single worker thread per db file. This means many thread safe connections
/// (possibly with different migrations) could all be communicating with the same background
/// thread.
static ref QUEUES: RwLock<HashMap<Arc<str>, Box<dyn 'static + Send + Sync + Fn(QueuedWrite)>>> =
static ref QUEUES: RwLock<HashMap<Arc<str>, WriteQueue>> =
Default::default();
}