cartel-sqlite 0.30.0

SQLite driver for the dope runtime
use crate::common::plan;
use cartel_sqlite::{
    Budget, Busy, Cache, Limits, Lookaside, Memory, Parameters, Program, Progress, Results, Scan,
    Work,
};
use std::{num::NonZero, time::Duration};

cartel_sqlite::catalog! {
pub LayoutDatabase;

pub const COMMAND_WORDS: usize = 16;

pub const PLAIN_WORDS: usize = 16;

pub const ARENA_WORDS: usize = 20;

pub const COLLECT_WORDS: usize = 20;

pub const SCAN_WORDS: usize = 20;

pub const CAPABILITY_WORDS: usize = 3;

pub const SAVEPOINT_WORDS: usize = 4;

pub const BEGIN_WORDS: usize = 11;

pub const TRANSITION_WORDS: usize = 13;

pub const COMMANDS: &[&str] = &[
        "CREATE TABLE items (id INTEGER PRIMARY KEY)",
        "INSERT INTO items (id) VALUES (1)",
    ];

statements! {
    INSERT_ITEM(1, 0) = "INSERT INTO items (id) VALUES (?1)",
    SELECT_ITEM(0, 1) = "SELECT id FROM items LIMIT 1",
    SELECT_TEXT(0, 1) = "SELECT 'value'",
    SELECT_PAIR(0, 2) = "SELECT 7, 'value'",
}

pub fn try_limits() -> Result<Limits, plan::Error> {
    Ok(Limits {
        parameters: Parameters {
            items: 1,
            bytes: 64,
        },
        scan: Scan {
            rows: 8,
            row_bytes: 4 << 10,
        },
        savepoints: 16,
        program: Program::new(NonZero::new(100_000).ok_or(plan::Error::Program)?),
        work: Work::uniform(Budget {
            progress: Progress::new(NonZero::new(100).ok_or(plan::Error::Progress)?),
            busy: Busy {
                window: Duration::from_secs(1),
                interval: Duration::from_millis(1),
                retries: NonZero::<u32>::MIN.saturating_add(1_023),
            },
        }),
    })
}

pub fn try_memory() -> Result<Memory, plan::Error> {
    Ok(Memory {
        sqlite_bytes: 4 << 20,
        results: Results {
            rows: 8,
            bytes: 4 << 10,
        },
        statement_bytes: 128 << 10,
        cache: Cache {
            main_bytes: 1 << 20,
            temporary_bytes: 1 << 20,
        },
        lookaside: Lookaside::try_new(128, 64).ok_or(plan::Error::Lookaside)?,
    })
}
}