1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//! # bsql — Safe SQL for Rust
//!
//! **If it compiles, the SQL is correct.**
//!
//! bsql validates every SQL query against a real database at compile time.
//! Async by default — all user-facing methods are `async fn`.
//!
//! ## Quick Start
//!
//! ```toml
//! [dependencies]
//! bsql = "0.20"
//! tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
//! ```
//!
//! ```rust,ignore
//! use bsql::Pool;
//!
//! #[tokio::main]
//! async fn main() -> Result<(), bsql::BsqlError> {
//! let pool = Pool::connect("postgres://user:pass@localhost/mydb").await?;
//!
//! let id = 1i32;
//! let users = bsql::query!(
//! "SELECT id, login, active FROM users WHERE id = $id: i32"
//! ).fetch(&pool).await?;
//!
//! let user = &users[0];
//! // user.id: i32, user.login: String, user.active: bool
//! println!("{}: active={}", user.login, user.active);
//! Ok(())
//! }
//! ```
//!
//! ## Two methods — that's it
//!
//! | Method | Returns | Use |
//! |--------|---------|-----|
//! | `.fetch(&pool).await` | `Vec<Row>` | SELECT queries |
//! | `.run(&pool).await` | `u64` | INSERT, UPDATE, DELETE |
//!
//! Also: `fetch_one`, `fetch_optional`, `fetch_stream`, `for_each`, `defer` (for transactions).
//!
//! ## Escape hatch
//!
//! For rare cases requiring dynamic SQL (dynamic table names, pivots, DDL):
//!
//! ```rust,ignore
//! let rows = pool.raw_query("SELECT * FROM pg_tables LIMIT 5").await?;
//! pool.raw_execute("CREATE INDEX CONCURRENTLY idx ON users (email)").await?;
//! ```
//!
//! `raw_query` / `raw_execute` bypass compile-time validation entirely.
//! Use `query!` for everything else.
// Re-export the query! macro, query_as! macro, and attribute macros
pub use pg_enum;
pub use query;
pub use query_as;
pub use sort;
pub use test;
// Re-export all runtime types
pub use ;
// Used by generated code from `bsql::query!`. Not part of the user-facing API.
pub use ;
pub use ;
pub use ;
/// A connection borrowed from the pool via [`Pool::acquire()`].
///
/// Most users should use `Pool` directly (query methods acquire and release
/// connections automatically). `PoolConnection` is for advanced use cases
/// where you need to hold a connection across multiple queries without a
/// transaction.
pub use PoolConnection;
pub use QueryStream;
pub use ;
// SQLite pool, transaction, and streaming
pub use ;
// Re-export test support types used by generated `#[bsql::test]` code
// Re-export driver types used by generated code
pub use driver;
// Re-export SQLite driver types used by generated code
pub use driver_sqlite;