cratestack-sql 0.2.1

Rust-native schema-first framework for typed HTTP APIs, generated clients, and backend services.
Documentation

cratestack-sql

Dialect-agnostic SQL primitives shared by Postgres and SQLite backends.

Overview

cratestack-sql provides common SQL primitives used by both cratestack-sqlx (Postgres) and cratestack-rusqlite (SQLite). It includes filter AST, order AST, value types, and model descriptors.

Installation

This is an internal dependency; typically used through the umbrella crate:

[dependencies]
cratestack = "0.2"

For direct use:

[dependencies]
cratestack-sql = "0.2"

SQL Value Types

use cratestack_sql::SqlValue;

// Supported storage types
SqlValue::String(String)
SqlValue::Int(i64)
SqlValue::Float(f64)
SqlValue::Bool(bool)
SqlValue::Bytes(Vec<u8>)
SqlValue::Uuid(uuid::Uuid)
SqlValue::DateTime(chrono::DateTime<chrono::Utc>)
SqlValue::Json(serde_json::Value)
SqlValue::Decimal(Decimal)

Filter AST

use cratestack_sql::{Filter, Expr};

// Field comparisons
let filter = Filter::eq("status", "active");
let filter = Filter::and(vec![
    Filter::eq("published", true),
    Filter::gt("createdAt", yesterday),
]);

// Relation filters
let filter = Filter::relation("author", Filter::eq("email", "test@example.com"));

Order AST

use cratestack_sql::{Order, OrderBy};

let order = OrderBy {
    column: "createdAt",
    direction: Order::Desc,
};

Dialect Trait

use cratestack_sql::Dialect;

// Only varies on placeholder syntax
let dialect = Dialect::Postgres;  // $1, $2, ...
let dialect = Dialect::Sqlite;     // ?, ?, ...

Model Descriptor

use cratestack_sql::ModelDescriptor;

// Generated by include_schema!
let model = &cratestack_schema::USER_MODEL;

// Contains table name, columns, relations
println!("table: {}", model.table_name);

See Also

  • cratestack-sqlx - Postgres backend (async)
  • cratestack-rusqlite - SQLite backend (sync, on-device)

License

MIT