Skip to main content

cartel_sqlite/
lib.rs

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