Skip to main content

cartel_sqlite/
lib.rs

1#![forbid(unsafe_code)]
2
3pub mod dsl;
4pub mod sql;
5
6pub use cartel_gen::{SqliteTable, sqlite_query};
7pub use dsl::{
8    AggBuilder, AggHandle, ConflictTarget, Cte, DeleteBuilder, FilterBuilder, InsertBuilder,
9    JoinBuilder, JoinBuilder2, JoinBuilder3, JoinBuilder4, Joined2Filter, Joined3Filter,
10    Joined4Filter, RowIter, SelectBuilder, SourceRow, UpdateBuilder, WindowExpr, WindowSpec, avg,
11    count, dense_rank, exists, max, min, not_exists, rank, row_number, sum,
12};
13pub use rusqlite::types::{FromSql, ToSqlOutput, Value, ValueRef};
14pub use rusqlite::{
15    self, CachedStatement, Connection, Error, Params, Result, Row, Rows, Statement, ToSql,
16    Transaction, params, params_from_iter,
17};
18
19mod decode;
20pub use decode::Decode;
21
22#[doc(hidden)]
23pub mod __internal {
24    pub const fn concat_len(parts: &[&str]) -> usize {
25        let mut total = 0;
26        let mut i = 0;
27        while i < parts.len() {
28            total += parts[i].len();
29            i += 1;
30        }
31        total
32    }
33
34    pub const fn concat<const N: usize>(parts: &[&str]) -> [u8; N] {
35        let mut buf = [0u8; N];
36        let mut bi = 0;
37        let mut pi = 0;
38        while pi < parts.len() {
39            let bytes = parts[pi].as_bytes();
40            let mut i = 0;
41            while i < bytes.len() {
42                buf[bi] = bytes[i];
43                bi += 1;
44                i += 1;
45            }
46            pi += 1;
47        }
48        buf
49    }
50
51    pub const fn hash_sql(s: &str) -> u64 {
52        let bytes = s.as_bytes();
53        let mut h: u64 = 0xcbf29ce484222325;
54        let mut i = 0;
55        while i < bytes.len() {
56            h ^= bytes[i] as u64;
57            h = h.wrapping_mul(0x100000001b3);
58            i += 1;
59        }
60        h
61    }
62}