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}