Skip to main content

cratestack_sql/
lib.rs

1//! Dialect-agnostic SQL primitives shared by the Postgres (`cratestack-sqlx`)
2//! and SQLite (`cratestack-rusqlite`) backends.
3//!
4//! This crate carries the type definitions every backend agrees on:
5//!
6//! - [`SqlValue`] / [`SqlColumnValue`] — value envelopes used to bind data
7//! - [`CreateModelInput`] / [`UpdateModelInput`] / [`UpsertModelInput`] —
8//!   traits the codegen emits
9//! - [`Filter`] / [`FilterExpr`] / [`FieldRef`] — query AST
10//! - [`OrderClause`] / [`SortDirection`] — ordering AST
11//! - [`ModelDescriptor`] / [`ModelColumn`] / [`CreateDefault`] — schema
12//!   metadata baked into compiled code by `include_schema!`
13//!
14//! Rendering SQL strings, executing queries, and any DB-driver coupling
15//! live in the backend crates.
16
17mod descriptor;
18mod dialect;
19mod filter;
20mod idempotency;
21mod keyset;
22mod order;
23mod order_catalog;
24mod relation_path;
25mod relation_scope;
26mod values;
27
28pub use descriptor::{
29    CreateDefault, CreateDefaultType, DatabaseDefault, EventTarget, GeneratedDefault,
30    GeneratedValue, LiteralDefault, ModelColumn, ModelDescriptor, ReadSource, ViewDescriptor,
31    WriteSource,
32};
33pub use dialect::{Dialect, PostgresDialect, SqliteDialect};
34pub use filter::eval::{in_memory_columns as filter_in_memory_columns, matches as filter_matches};
35pub use filter::{
36    CoalesceExpr, CoalesceFilter, FieldRef, Filter, FilterExpr, FilterOp, IntoColumnName,
37    JsonFilter, JsonTextPath, RelationFilter, RelationQuantifier, VectorDistanceExpr,
38    VectorDistanceFilter, VectorMetric, coalesce,
39};
40/// PostGIS query surface (cratestack#842) — gated behind this crate's
41/// `postgis` feature, which the backend facades forward from their own.
42#[cfg(feature = "postgis")]
43pub use filter::{SpatialDistanceExpr, SpatialFilter, SpatialPoint, point};
44pub use idempotency::IDEMPOTENCY_TABLE_DDL;
45pub use keyset::{KeysetColumn, KeysetLeaf, keyset_after, keyset_order_spec, parse_keyset_sort};
46pub use order::{NullOrder, OrderClause, OrderTarget, SortDirection};
47pub use order_catalog::{
48    OrderCatalog, OrderRelationEdge, ResolvedOrderTarget, resolve_order_target,
49};
50pub use relation_path::{
51    Orderable, RelationHop, Unorderable, is_orderable, order_value_sql, wrap_filter,
52};
53pub use relation_scope::RelatedReadScope;
54pub use values::{
55    ConflictTarget, CreateModelInput, DecimalLike, FilterValue, IntoSqlValue, ModelPrimaryKey,
56    Projection, RelationInclude, SqlColumnValue, SqlValue, UpdateModelInput, UpsertModelInput,
57    find_duplicate_sql_value,
58};