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 error;
70mod idempotency;
71mod isolation;
72mod migrations;
73mod partial_row;
74mod query;
75mod render;
76#[cfg(test)]
77mod tests_coalesce;
78#[cfg(test)]
79mod tests_descriptor;
80#[cfg(test)]
81mod tests_field_filter;
82#[cfg(test)]
83mod tests_filter_logic;
84#[cfg(test)]
85mod tests_geography;
86#[cfg(test)]
87mod tests_json;
88#[cfg(test)]
89mod tests_nested_relation_policy;
90#[cfg(test)]
91mod tests_optional;
92#[cfg(test)]
93mod tests_relation;
94#[cfg(test)]
95mod tests_update;
96#[cfg(test)]
97mod tests_update_many;
98
99pub use partial_row::FromPartialPgRow;
100
101pub use audit::{AUDIT_TABLE_DDL, primary_key_from_snapshot, snapshot_model};
102pub use error::cool_error_from_sqlx;
103pub use idempotency::{SqlxIdempotencyStore, expiry_from};
104pub use isolation::{run_in_isolated_tx, run_in_isolated_tx_with_retries};
105pub use migrations::{
106    MIGRATIONS_TABLE_DDL, Migration, MigrationState, MigrationStatus, apply_pending,
107    ensure_migrations_table, status,
108};
109
110pub use cratestack_policy::{PolicyExpr, PolicyLiteral, ReadPolicy, ReadPredicate};
111pub use cratestack_sql::{
112    CoalesceExpr, CoalesceFilter, ConflictTarget, CreateDefault, CreateDefaultType,
113    CreateModelInput, FieldRef, Filter, FilterExpr, FilterOp, IntoColumnName, IntoSqlValue,
114    JsonFilter, JsonTextPath, ModelColumn, ModelDescriptor, ModelPrimaryKey, NullOrder,
115    OrderClause, Projection, RelationFilter, RelationInclude, RelationQuantifier, SortDirection,
116    SpatialFilter, SpatialPoint, SqlColumnValue, SqlValue, UpdateModelInput, UpsertModelInput,
117    coalesce, point,
118};
119pub use delegate::{
120    ModelDelegate, ScopedAggregate, ScopedAggregateColumn, ScopedAggregateCount, ScopedBatchCreate,
121    ScopedBatchDelete, ScopedBatchGet, ScopedBatchUpdate, ScopedBatchUpsert, ScopedCreateRecord,
122    ScopedDeleteMany, ScopedDeleteRecord, ScopedFindMany, ScopedFindManyWith, ScopedFindUnique,
123    ScopedModelDelegate, ScopedProjectedFindMany, ScopedProjectedFindUnique, ScopedUpdateMany,
124    ScopedUpdateManySet, ScopedUpdateRecord, ScopedUpdateRecordSet, ScopedUpsertRecord,
125    ViewDelegate, ViewDelegateNoUnique,
126};
127pub use descriptor::SqlxRuntime;
128pub use query::{
129    Aggregate, AggregateColumn, AggregateCount, BatchCreate, BatchDelete, BatchGet, BatchUpdate,
130    BatchUpdateItem, BatchUpsert, CreateRecord, DeleteMany, DeleteRecord, FindMany, FindManyWith,
131    FindUnique, ProjectedFindMany, ProjectedFindUnique, UpdateMany, UpdateManySet, UpdateRecord,
132    UpdateRecordSet, UpsertRecord, create_record_with_executor, update_record_with_executor,
133};