Skip to main content

fraiseql_core/db/
mod.rs

1//! Database abstraction layer.
2//!
3//! This module provides database-agnostic access to multiple database backends:
4//! - PostgreSQL (primary, full feature set)
5//! - MySQL (secondary support)
6//! - SQLite (local dev, testing)
7//! - SQL Server (enterprise)
8//!
9//! # Architecture
10//!
11//! The database layer follows a trait-based design:
12//!
13//! - `DatabaseAdapter` - Core trait for query execution
14//! - `WhereClauseGenerator` - Database-specific WHERE SQL generation
15//! - `ConnectionPool` - Connection pooling abstraction
16//!
17//! # Example
18//!
19//! ```rust,no_run
20//! use fraiseql_core::db::{DatabaseAdapter, WhereClause, WhereOperator, postgres::PostgresAdapter};
21//! use serde_json::json;
22//!
23//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
24//! // Create PostgreSQL adapter
25//! let adapter = PostgresAdapter::new("postgresql://localhost/mydb").await?;
26//!
27//! // Build WHERE clause
28//! let where_clause = WhereClause::Field {
29//!     path: vec!["email".to_string()],
30//!     operator: WhereOperator::Icontains,
31//!     value: json!("example.com"),
32//! };
33//!
34//! // Execute query
35//! let results = adapter
36//!     .execute_where_query("v_user", Some(&where_clause), None, None)
37//!     .await?;
38//!
39//! println!("Found {} users", results.len());
40//! # Ok(())
41//! # }
42//! ```
43
44pub mod collation;
45pub mod identifier;
46pub mod path_escape;
47pub mod projection_generator;
48pub mod traits;
49pub mod types;
50pub mod where_clause;
51pub mod where_sql_generator;
52
53#[cfg(feature = "postgres")]
54pub mod postgres;
55
56#[cfg(feature = "mysql")]
57pub mod mysql;
58
59#[cfg(feature = "sqlite")]
60pub mod sqlite;
61
62#[cfg(feature = "sqlserver")]
63pub mod sqlserver;
64
65#[cfg(feature = "wire-backend")]
66pub mod wire_pool;
67
68#[cfg(feature = "wire-backend")]
69pub mod fraiseql_wire_adapter;
70
71// Re-export commonly used types
72pub use collation::{CollationCapabilities, CollationMapper};
73#[cfg(feature = "wire-backend")]
74pub use fraiseql_wire_adapter::FraiseWireAdapter;
75pub use identifier::{
76    quote_mysql_identifier, quote_postgres_identifier, quote_sqlite_identifier,
77    quote_sqlserver_identifier,
78};
79#[cfg(feature = "mysql")]
80pub use mysql::MySqlAdapter;
81#[cfg(feature = "postgres")]
82pub use postgres::{PostgresAdapter, PostgresIntrospector};
83pub use projection_generator::PostgresProjectionGenerator;
84#[cfg(feature = "sqlite")]
85pub use sqlite::SqliteAdapter;
86#[cfg(feature = "sqlserver")]
87pub use sqlserver::SqlServerAdapter;
88pub use traits::{DatabaseAdapter, DatabaseCapabilities};
89pub use types::{DatabaseType, JsonbValue, PoolMetrics};
90pub use where_clause::{HavingClause, WhereClause, WhereOperator};
91pub use where_sql_generator::WhereSqlGenerator;