ic-sqlite-vfs 2.0.0

SQLite VFS backed directly by Internet Computer stable memory
Documentation
src/config.rs:pub const DB_REGION_OFFSET: u64 = SUPERBLOCK_OFFSET + SUPERBLOCK_SIZE;
src/config.rs:pub const MAIN_DB_PATH: &str = "/main.db";
src/config.rs:pub const SQLITE_CACHE_SIZE_KIB: i32 = 32_768;
src/config.rs:pub const SQLITE_PAGE_SIZE: u32 = 16_384;
src/config.rs:pub const SQLITE_URI: &str = "file:/main.db?vfs=icstable";
src/config.rs:pub const SQLITE_URI_NUL: &[u8] = b"file:/main.db?vfs=icstable\0";
src/config.rs:pub const STABLE_PAGE_SIZE: u64 = 65_536;
src/config.rs:pub const STATEMENT_CACHE_CAPACITY: usize = 32;
src/config.rs:pub const SUPERBLOCK_OFFSET: u64 = 0;
src/config.rs:pub const SUPERBLOCK_SIZE: u64 = STABLE_PAGE_SIZE;
src/config.rs:pub const VFS_NAME: &str = "icstable";
src/config.rs:pub const VFS_NAME_NUL: &[u8] = b"icstable\0";
src/db/connection.rs:pub fn changes(&self) -> u64 {
src/db/connection.rs:pub fn discard(mut self) {
src/db/connection.rs:pub fn execute(&self, sql: &str, values: &[&dyn ToSql]) -> Result<(), DbError> {
src/db/connection.rs:pub fn execute_batch(&self, sql: &str) -> Result<(), DbError> {
src/db/connection.rs:pub fn execute_named(&self, sql: &str, values: &[(&str, &dyn ToSql)]) -> Result<(), DbError> {
src/db/connection.rs:pub fn execute_text_text(&self, sql: &str, first: &str, second: &str) -> Result<(), DbError> {
src/db/connection.rs:pub fn exists(&self, sql: &str, values: &[&dyn ToSql]) -> Result<bool, DbError> {
src/db/connection.rs:pub fn prepare(&self, sql: &str) -> Result<Statement<'_>, DbError> {
src/db/connection.rs:pub fn prepare_cached(&self, sql: &str) -> Result<CachedStatement<'_>, DbError> {
src/db/connection.rs:pub fn query_all<T, F>(&self, sql: &str, values: &[&dyn ToSql], f: F) -> Result<Vec<T>, DbError>
src/db/connection.rs:pub fn query_all_named<T, F>(
src/db/connection.rs:pub fn query_column<T: FromColumn>(
src/db/connection.rs:pub fn query_column_named<T: FromColumn>(
src/db/connection.rs:pub fn query_map<T, F>(&self, sql: &str, values: &[&dyn ToSql], f: F) -> Result<Vec<T>, DbError>
src/db/connection.rs:pub fn query_map_named<T, F>(
src/db/connection.rs:pub fn query_one<T, F>(&self, sql: &str, values: &[&dyn ToSql], f: F) -> Result<T, DbError>
src/db/connection.rs:pub fn query_one_named<T, F>(
src/db/connection.rs:pub fn query_optional<T, F>(
src/db/connection.rs:pub fn query_optional_named<T, F>(
src/db/connection.rs:pub fn query_optional_scalar<T: FromColumn>(
src/db/connection.rs:pub fn query_optional_scalar_named<T: FromColumn>(
src/db/connection.rs:pub fn query_optional_string_text(
src/db/connection.rs:pub fn query_row<T, F>(&self, sql: &str, values: &[&dyn ToSql], f: F) -> Result<T, DbError>
src/db/connection.rs:pub fn query_row_named<T, F>(
src/db/connection.rs:pub fn query_scalar<T: FromColumn>(
src/db/connection.rs:pub fn query_scalar_named<T: FromColumn>(
src/db/connection.rs:pub fn query_text_iter_text_len_sum<'value, I>(
src/db/connection.rs:pub fn raw(&self) -> *mut ffi::sqlite3 {
src/db/connection.rs:pub struct CachedStatement<'connection> {
src/db/connection.rs:pub struct Connection {
src/db/migrate.rs:pub fn apply(connection: &Connection, migrations: &[Migration]) -> Result<(), DbError> {
src/db/migrate.rs:pub sql: &'static str,
src/db/migrate.rs:pub struct Migration {
src/db/migrate.rs:pub version: u64,
src/db/mod.rs:pub enum DbError {
src/db/mod.rs:pub fn db_checksum() -> Result<u64, DbError> {
src/db/mod.rs:pub fn db_checksum(self) -> Result<u64, DbError> {
src/db/mod.rs:pub fn init(memory: DbMemory) -> Result<(), DbError> {
src/db/mod.rs:pub fn init(memory: DbMemory) -> Result<Self, DbError> {
src/db/mod.rs:pub fn integrity_check() -> Result<String, DbError> {
src/db/mod.rs:pub fn integrity_check(self) -> Result<String, DbError> {
src/db/mod.rs:pub fn migrate(migrations: &[migrate::Migration]) -> Result<(), DbError> {
src/db/mod.rs:pub fn migrate(self, migrations: &[migrate::Migration]) -> Result<(), DbError> {
src/db/mod.rs:pub fn query<T, F>(f: F) -> Result<T, DbError>
src/db/mod.rs:pub fn query<T, F>(self, f: F) -> Result<T, DbError>
src/db/mod.rs:pub fn refresh_checksum() -> Result<u64, DbError> {
src/db/mod.rs:pub fn refresh_checksum(self) -> Result<u64, DbError> {
src/db/mod.rs:pub fn refresh_checksum_chunk(max_bytes: u64) -> Result<ChecksumRefresh, DbError> {
src/db/mod.rs:pub fn refresh_checksum_chunk(self, max_bytes: u64) -> Result<ChecksumRefresh, DbError> {
src/db/mod.rs:pub fn update<T, F>(f: F) -> Result<T, DbError>
src/db/mod.rs:pub fn update<T, F>(self, f: F) -> Result<T, DbError>
src/db/mod.rs:pub mod connection;
src/db/mod.rs:pub mod migrate;
src/db/mod.rs:pub mod pragmas;
src/db/mod.rs:pub mod row;
src/db/mod.rs:pub mod statement;
src/db/mod.rs:pub mod transaction;
src/db/mod.rs:pub mod value;
src/db/mod.rs:pub struct Db;
src/db/mod.rs:pub struct DbHandle {
src/db/mod.rs:pub use row::{FromColumn, Row, TextLen};
src/db/mod.rs:pub use stable_blob::ChecksumRefresh;
src/db/mod.rs:pub use transaction::UpdateConnection;
src/db/mod.rs:pub use value::{Null, ToSql, Value, NULL};
src/db/pragmas.rs:pub fn apply_read_only(connection: &Connection) -> Result<(), DbError> {
src/db/pragmas.rs:pub fn apply_read_write(connection: &Connection, apply_page_size: bool) -> Result<(), DbError> {
src/db/row.rs:pub fn get<T: FromColumn>(&self, index: usize) -> Result<T, DbError> {
src/db/row.rs:pub struct Row<'row> {
src/db/row.rs:pub struct TextLen(pub usize);
src/db/row.rs:pub trait FromColumn: Sized {
src/db/statement.rs:pub code: std::ffi::c_int,
src/db/statement.rs:pub column_read: u64,
src/db/statement.rs:pub fn execute(&mut self, values: &[&dyn ToSql]) -> Result<(), DbError> {
src/db/statement.rs:pub fn execute_i64_blob(&mut self, first: i64, second: &[u8]) -> Result<(), DbError> {
src/db/statement.rs:pub fn execute_i64_i64_text(
src/db/statement.rs:pub fn execute_i64_text(&mut self, first: i64, second: &str) -> Result<(), DbError> {
src/db/statement.rs:pub fn execute_named(&mut self, values: &[(&str, &dyn ToSql)]) -> Result<(), DbError> {
src/db/statement.rs:pub fn execute_text_text(&mut self, first: &str, second: &str) -> Result<(), DbError> {
src/db/statement.rs:pub fn execute_text_text_profiled(
src/db/statement.rs:pub fn next_row(&mut self) -> Result<Option<Row<'_>>, DbError> {
src/db/statement.rs:pub fn next_text_len_zero(&mut self) -> Result<Option<usize>, DbError> {
src/db/statement.rs:pub fn query<'statement>(
src/db/statement.rs:pub fn query_all<T, F>(&mut self, values: &[&dyn ToSql], mut f: F) -> Result<Vec<T>, DbError>
src/db/statement.rs:pub fn query_all_named<T, F>(
src/db/statement.rs:pub fn query_column<T: FromColumn>(
src/db/statement.rs:pub fn query_column_named<T: FromColumn>(
src/db/statement.rs:pub fn query_i64<'statement>(
src/db/statement.rs:pub fn query_named<'statement>(
src/db/statement.rs:pub fn query_one<T, F>(&mut self, values: &[&dyn ToSql], f: F) -> Result<T, DbError>
src/db/statement.rs:pub fn query_one_named<T, F>(
src/db/statement.rs:pub fn query_optional<T, F>(
src/db/statement.rs:pub fn query_optional_named<T, F>(
src/db/statement.rs:pub fn query_optional_scalar<T: FromColumn>(
src/db/statement.rs:pub fn query_optional_scalar_named<T: FromColumn>(
src/db/statement.rs:pub fn query_optional_string_text(&mut self, value: &str) -> Result<Option<String>, DbError> {
src/db/statement.rs:pub fn query_optional_string_text_len(
src/db/statement.rs:pub fn query_optional_string_text_len_profiled(
src/db/statement.rs:pub fn query_optional_string_text_profiled(
src/db/statement.rs:pub fn query_scalar<T: FromColumn>(&mut self, values: &[&dyn ToSql]) -> Result<T, DbError> {
src/db/statement.rs:pub fn query_scalar_named<T: FromColumn>(
src/db/statement.rs:pub fn query_text_iter<'statement, I>(
src/db/statement.rs:pub fn query_text_iter_ephemeral<'statement, I>(
src/db/statement.rs:pub fn query_text_iter_text_len_sum<'value, I>(&mut self, values: I) -> Result<u64, DbError>
src/db/statement.rs:pub fn query_text_iter_text_len_sum_profiled<'value, I>(
src/db/statement.rs:pub fn query_texts<'statement>(
src/db/statement.rs:pub ordinal: u64,
src/db/statement.rs:pub reset_bind: u64,
src/db/statement.rs:pub reset_bind: u64,
src/db/statement.rs:pub reset_bind: u64,
src/db/statement.rs:pub row_scan: u64,
src/db/statement.rs:pub step: u64,
src/db/statement.rs:pub step: u64,
src/db/statement.rs:pub struct ExecuteTextTextProfile {
src/db/statement.rs:pub struct QueryOptionalStringTextProfile {
src/db/statement.rs:pub struct QueryTextLenSumProfile {
src/db/statement.rs:pub struct Rows<'statement, 'connection> {
src/db/statement.rs:pub struct Statement<'connection> {
src/db/transaction.rs:pub fn run_immediate<T, F>(connection: &Connection, f: F) -> Result<T, DbError>
src/db/transaction.rs:pub fn savepoint<T, F>(&mut self, f: F) -> Result<T, DbError>
src/db/transaction.rs:pub struct UpdateConnection<'connection> {
src/db/value.rs:pub const NULL: Null = Null;
src/db/value.rs:pub enum Value<'value> {
src/db/value.rs:pub fn to_sql_ref<T: ToSql>(value: &T) -> &dyn ToSql {
src/db/value.rs:pub struct Null;
src/db/value.rs:pub trait ToSql {
src/lib.rs:pub mod config;
src/lib.rs:pub mod db;
src/lib.rs:pub use db::{Db, DbError, DbHandle};
src/lib.rs:pub use stable::memory::{DbMemory, StableMemoryError};
src/lib.rs:pub use stable::memory_manager::{MemoryId, MemoryManager, MemoryManagerInitError};
src/lib.rs:pub use stable::raw_memory::DefaultMemoryImpl;
src/stable/memory.rs:AlreadyInitialized,
src/stable/memory.rs:ChecksumMismatch { expected: u64, actual: u64 },
src/stable/memory.rs:ChecksumRefreshChunkEmpty,
src/stable/memory.rs:Failpoint(&'static str),
src/stable/memory.rs:ForeignStableMemoryImage,
src/stable/memory.rs:GrowFailed {
src/stable/memory.rs:ImportAlreadyStarted,
src/stable/memory.rs:ImportIncomplete { written_until: u64, db_size: u64 },
src/stable/memory.rs:ImportNotStarted,
src/stable/memory.rs:ImportOutOfBounds { offset: u64, len: u64, db_size: u64 },
src/stable/memory.rs:ImportOutOfOrder { offset: u64, expected: u64 },
src/stable/memory.rs:MemoryAlreadyRegistered,
src/stable/memory.rs:MetaChecksumMismatch,
src/stable/memory.rs:NotInitialized,
src/stable/memory.rs:OffsetOverflow,
src/stable/memory.rs:ReadOutOfBounds {
src/stable/memory.rs:UnsupportedLayoutVersion(u64),
src/stable/memory.rs:UpdateInProgress,
src/stable/memory.rs:ZeroExtentLimitExceeded { limit: usize },
src/stable/memory.rs:current_pages: u64,
src/stable/memory.rs:len: u64,
src/stable/memory.rs:offset: u64,
src/stable/memory.rs:pub enum StableMemoryError {
src/stable/memory.rs:pub type DbMemory = VirtualMemory<DefaultMemoryImpl>;
src/stable/memory.rs:required_pages: u64,
src/stable/memory.rs:size_bytes: u64,
src/stable/memory_layout.rs:pub const fn new(id: u8) -> Self {
src/stable/memory_layout.rs:pub struct MemoryId(pub(super) u8);
src/stable/memory_manager.rs:pub enum MemoryManagerInitError {
src/stable/memory_manager.rs:pub fn get(&self, id: MemoryId) -> VirtualMemory<M> {
src/stable/memory_manager.rs:pub fn init(memory: M) -> Self {
src/stable/memory_manager.rs:pub fn init_strict(memory: M) -> Result<Self, MemoryManagerInitError> {
src/stable/memory_manager.rs:pub fn init_strict_with_bucket_size(
src/stable/memory_manager.rs:pub fn init_with_bucket_size(memory: M, bucket_size_in_pages: u16) -> Self {
src/stable/memory_manager.rs:pub struct MemoryManager<M: Memory> {
src/stable/memory_manager.rs:pub struct VirtualMemory<M: Memory> {
src/stable/memory_manager.rs:pub use crate::stable::memory_layout::MemoryId;