cartel-sqlite 0.1.1

SQLite driver for the dope runtime
pub mod dsl;
pub mod sql;

pub use cartel_gen::{SqliteTable, sqlite_query};
pub use dsl::{
    AggBuilder, AggHandle, ConflictTarget, Cte, DeleteBuilder, FilterBuilder, InsertBuilder,
    JoinBuilder, JoinBuilder2, JoinBuilder3, JoinBuilder4, Joined2Filter, Joined3Filter,
    Joined4Filter, RowIter, SelectBuilder, SourceRow, UpdateBuilder, WindowExpr, WindowSpec, avg,
    count, dense_rank, exists, max, min, not_exists, rank, row_number, sum,
};
pub use rusqlite::types::{FromSql, ToSqlOutput, Value, ValueRef};
pub use rusqlite::{
    self, CachedStatement, Connection, Error, Params, Result, Row, Rows, Statement, ToSql,
    Transaction, params, params_from_iter,
};

mod decode;
pub use decode::Decode;

#[doc(hidden)]
pub mod __internal {
    pub const fn concat_len(parts: &[&str]) -> usize {
        let mut total = 0;
        let mut i = 0;
        while i < parts.len() {
            total += parts[i].len();
            i += 1;
        }
        total
    }

    pub const fn concat<const N: usize>(parts: &[&str]) -> [u8; N] {
        let mut buf = [0u8; N];
        let mut bi = 0;
        let mut pi = 0;
        while pi < parts.len() {
            let bytes = parts[pi].as_bytes();
            let mut i = 0;
            while i < bytes.len() {
                buf[bi] = bytes[i];
                bi += 1;
                i += 1;
            }
            pi += 1;
        }
        buf
    }

    pub const fn hash_sql(s: &str) -> u64 {
        let bytes = s.as_bytes();
        let mut h: u64 = 0xcbf29ce484222325;
        let mut i = 0;
        while i < bytes.len() {
            h ^= bytes[i] as u64;
            h = h.wrapping_mul(0x100000001b3);
            i += 1;
        }
        h
    }
}