/// Deserialize a database. pubfn deserialize(
&mutself,
schema: DatabaseName<'_>,
data: OwnedData,
read_only: bool,
) -> Result<()> { let schema = schema.as_cstring()?; let (data, sz) = data.into_raw(); let sz = sz.try_into().unwrap(); let flags = if read_only {
ffi::SQLITE_DESERIALIZE_FREEONCLOSE | ffi::SQLITE_DESERIALIZE_READONLY
} else {
ffi::SQLITE_DESERIALIZE_FREEONCLOSE | ffi::SQLITE_DESERIALIZE_RESIZEABLE
}; let rc = unsafe {
ffi::sqlite3_deserialize(self.handle(), schema.as_ptr(), data, sz, sz, flags)
}; if rc != ffi::SQLITE_OK { // TODO sqlite3_free(data) ? return Err(unsafe { error_from_handle(self.handle(), rc) });
} /* TODO ifletSome(mxSize)=mxSize{ unsafe{ ffi::sqlite3_file_control( self.handle(), schema.as_ptr(), ffi::SQLITE_FCNTL_SIZE_LIMIT, &mutmxSize, ) };
}*/
Ok(())
}
}
#[cfg(test)] mod test { usesuper::*; usecrate::{Connection, DatabaseName, Result};
#[test] fn serialize() -> Result<()> { let db = Connection::open_in_memory()?;
db.execute_batch("CREATE TABLE x AS SELECT 'data'")?; let data = db.serialize(DatabaseName::Main)?; let Data::Owned(data) = data else {
panic!("expected OwnedData")
};
assert!(data.sz > 0);
Ok(())
}
#[test] fn deserialize() -> Result<()> { let src = Connection::open_in_memory()?;
src.execute_batch("CREATE TABLE x AS SELECT 'data'")?; let data = src.serialize(DatabaseName::Main)?; let Data::Owned(data) = data else {
panic!("expected OwnedData")
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.