sql-orm 0.1.0

Public API crate for the sql-orm workspace.
Documentation
use sql_orm::prelude::*;

#[derive(AuditFields)]
struct Audit {
    #[orm(created_at)]
    #[orm(sql_type = "datetime2")]
    #[orm(updatable = false)]
    created_at: String,

    #[orm(created_by)]
    #[orm(column = "created_by_user_id")]
    created_by: Option<i64>,

    #[orm(updated_at)]
    #[orm(nullable)]
    updated_at: Option<String>,

    #[orm(updated_by)]
    #[orm(length = 120)]
    updated_by: String,
}

#[derive(Entity, Debug, Clone)]
#[orm(table = "audited_entities", schema = "audit", audit = Audit)]
struct AuditedEntity {
    #[orm(primary_key)]
    #[orm(identity)]
    id: i64,

    #[orm(length = 120)]
    name: String,
}

#[derive(DbContext, Debug, Clone)]
struct AppDbContext {
    audited_entities: DbSet<AuditedEntity>,
}

fn assert_audit_values<T: AuditValues>(values: T) -> Vec<ColumnValue> {
    values.audit_values()
}

fn main() {
    let audit = Audit {
        created_at: "2026-04-28T00:00:00Z".to_string(),
        created_by: Some(42),
        updated_at: None,
        updated_by: "system".to_string(),
    };

    let values = assert_audit_values(audit);

    assert_eq!(values[0].column_name, "created_at");
    assert_eq!(values[1].column_name, "created_by_user_id");
    assert_eq!(values[2].column_name, "updated_at");
    assert_eq!(values[3].column_name, "updated_by");

    let _with_typed_values = AppDbContext::with_audit_values::<Audit>;
    let _shared_with_typed_values = SharedConnection::with_audit_values::<Audit>;
}