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}