Skip to main content

cratestack_sqlx/
lib.rs

1/// Compatibility shim that exposes a `sqlx`-shaped API by re-exporting from
2/// `sqlx-core` + `sqlx-postgres` directly.
3///
4/// **Why this shim exists:** depending on the `sqlx` umbrella crate transitively
5/// pulls `sqlx-sqlite` into the resolve graph (Cargo's resolver materialises the
6/// optional dep even when no feature activates it), which pins `libsqlite3-sys
7/// ^0.30.1` and conflicts with `rusqlite 0.39`'s `libsqlite3-sys ^0.37` via the
8/// `links = "sqlite3"` rule. Going direct to the split crates side-steps the
9/// leak entirely. Downstream users keep writing `cratestack::sqlx::X` paths;
10/// macro emissions stay unchanged.
11///
12/// **SemVer caveat:** `sqlx-core` documents itself as "not meant for general use"
13/// without SemVer guarantees. The surface re-exported here is the narrow subset
14/// the umbrella `sqlx` crate exposes, which is stable in practice across `0.8.x`.
15/// If `sqlx-core` breaks at a `0.8` patch, this shim adapts in one place.
16pub mod sqlx {
17    pub use sqlx_core::Either;
18    pub use sqlx_core::acquire::Acquire;
19    pub use sqlx_core::arguments::{Arguments, IntoArguments};
20    pub use sqlx_core::column::{Column, ColumnIndex};
21    pub use sqlx_core::connection::{ConnectOptions, Connection};
22    pub use sqlx_core::database::{self, Database};
23    pub use sqlx_core::describe::Describe;
24    pub use sqlx_core::executor::{Execute, Executor};
25    pub use sqlx_core::from_row::FromRow;
26    pub use sqlx_core::pool::{self, Pool};
27    pub use sqlx_core::query::{query, query_with};
28    pub use sqlx_core::query_as::{query_as, query_as_with};
29    pub use sqlx_core::query_builder::{self, QueryBuilder};
30    pub use sqlx_core::query_scalar::{query_scalar, query_scalar_with};
31    pub use sqlx_core::raw_sql::{RawSql, raw_sql};
32    pub use sqlx_core::row::Row;
33    pub use sqlx_core::statement::Statement;
34    pub use sqlx_core::transaction::{Transaction, TransactionManager};
35    pub use sqlx_core::type_info::TypeInfo;
36    pub use sqlx_core::value::{Value, ValueRef};
37
38    pub use sqlx_core::error::{self, Error, Result};
39
40    #[cfg(feature = "decimal-rust-decimal")]
41    pub use sqlx_core::migrate;
42    #[cfg(not(feature = "decimal-rust-decimal"))]
43    pub use sqlx_core::migrate;
44
45    pub use sqlx_postgres::{
46        self as postgres, PgConnection, PgExecutor, PgPool, PgTransaction, Postgres,
47    };
48
49    pub mod types {
50        pub use sqlx_core::types::*;
51    }
52
53    pub mod encode {
54        pub use sqlx_core::encode::{Encode, IsNull};
55    }
56    pub use self::encode::Encode;
57
58    pub mod decode {
59        pub use sqlx_core::decode::Decode;
60    }
61    pub use self::decode::Decode;
62
63    pub use sqlx_core::types::Type;
64}
65
66mod audit;
67mod delegate;
68mod descriptor;
69mod idempotency;
70mod isolation;
71mod migrations;
72mod partial_row;
73mod query;
74mod render;
75#[cfg(test)]
76mod tests_coalesce;
77#[cfg(test)]
78mod tests_descriptor;
79#[cfg(test)]
80mod tests_field_filter;
81#[cfg(test)]
82mod tests_filter_logic;
83#[cfg(test)]
84mod tests_geography;
85#[cfg(test)]
86mod tests_json;
87#[cfg(test)]
88mod tests_nested_relation_policy;
89#[cfg(test)]
90mod tests_optional;
91#[cfg(test)]
92mod tests_relation;
93#[cfg(test)]
94mod tests_update;
95#[cfg(test)]
96mod tests_update_many;
97
98pub use partial_row::FromPartialPgRow;
99
100pub use audit::{AUDIT_TABLE_DDL, primary_key_from_snapshot, snapshot_model};
101pub use idempotency::{SqlxIdempotencyStore, expiry_from};
102pub use isolation::{run_in_isolated_tx, run_in_isolated_tx_with_retries};
103pub use migrations::{
104    MIGRATIONS_TABLE_DDL, Migration, MigrationState, MigrationStatus, apply_pending,
105    ensure_migrations_table, status,
106};
107
108pub use cratestack_policy::{PolicyExpr, PolicyLiteral, ReadPolicy, ReadPredicate};
109pub use cratestack_sql::{
110    CoalesceExpr, CoalesceFilter, ConflictTarget, CreateDefault, CreateDefaultType,
111    CreateModelInput, FieldRef, Filter, FilterExpr, FilterOp, IntoColumnName, IntoSqlValue,
112    JsonFilter, JsonTextPath, ModelColumn, ModelDescriptor, ModelPrimaryKey, NullOrder,
113    OrderClause, Projection, RelationFilter, RelationInclude, RelationQuantifier, SortDirection,
114    SpatialFilter, SpatialPoint, SqlColumnValue, SqlValue, UpdateModelInput, UpsertModelInput,
115    coalesce, point,
116};
117pub use delegate::{
118    ModelDelegate, ScopedAggregate, ScopedAggregateColumn, ScopedAggregateCount, ScopedBatchCreate,
119    ScopedBatchDelete, ScopedBatchGet, ScopedBatchUpdate, ScopedBatchUpsert, ScopedCreateRecord,
120    ScopedDeleteMany, ScopedDeleteRecord, ScopedFindMany, ScopedFindManyWith, ScopedFindUnique,
121    ScopedModelDelegate, ScopedProjectedFindMany, ScopedProjectedFindUnique, ScopedUpdateMany,
122    ScopedUpdateManySet, ScopedUpdateRecord, ScopedUpdateRecordSet, ScopedUpsertRecord,
123};
124pub use descriptor::SqlxRuntime;
125pub use query::{
126    Aggregate, AggregateColumn, AggregateCount, BatchCreate, BatchDelete, BatchGet, BatchUpdate,
127    BatchUpdateItem, BatchUpsert, CreateRecord, DeleteMany, DeleteRecord, FindMany, FindManyWith,
128    FindUnique, ProjectedFindMany, ProjectedFindUnique, UpdateMany, UpdateManySet, UpdateRecord,
129    UpdateRecordSet, UpsertRecord, create_record_with_executor, update_record_with_executor,
130};