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 query;
73mod render;
74#[cfg(test)]
75mod tests;
76
77pub use audit::{AUDIT_TABLE_DDL, primary_key_from_snapshot, snapshot_model};
78pub use idempotency::{SqlxIdempotencyStore, expiry_from};
79pub use isolation::{run_in_isolated_tx, run_in_isolated_tx_with_retries};
80pub use migrations::{
81    MIGRATIONS_TABLE_DDL, Migration, MigrationState, MigrationStatus, apply_pending,
82    ensure_migrations_table, status,
83};
84
85pub use cratestack_policy::{PolicyExpr, PolicyLiteral, ReadPolicy, ReadPredicate};
86pub use cratestack_sql::{
87    CreateDefault, CreateDefaultType, CreateModelInput, FieldRef, Filter, FilterExpr,
88    IntoSqlValue, ModelColumn, ModelDescriptor, OrderClause, RelationFilter, RelationQuantifier,
89    SortDirection, SqlColumnValue, SqlValue, UpdateModelInput, UpsertModelInput,
90};
91pub use delegate::{
92    ModelDelegate, ScopedCreateRecord, ScopedDeleteRecord, ScopedFindMany, ScopedFindUnique,
93    ScopedModelDelegate, ScopedUpdateRecord, ScopedUpdateRecordSet, ScopedUpsertRecord,
94};
95pub use descriptor::SqlxRuntime;
96pub use query::{
97    CreateRecord, DeleteRecord, FindMany, FindUnique, UpdateRecord, UpdateRecordSet, UpsertRecord,
98    create_record_with_executor, update_record_with_executor,
99};