pub mod backend;
pub mod connection;
pub mod dialect;
pub mod drivers;
pub mod error;
pub mod optimization;
pub mod query_builder;
pub mod schema;
pub mod types;
pub use error::DatabaseError as QueryDatabaseError;
pub use error::{DatabaseError, Result};
pub use schema::{BaseDatabaseSchemaEditor, SchemaEditorError, SchemaEditorResult};
pub use backend::DatabaseBackend;
pub use connection::DatabaseConnection;
pub use query_builder::{AnalyzeBuilder, InsertBuilder, SelectBuilder, UpdateBuilder};
pub use types::{
DatabaseType, IsolationLevel, QueryResult, QueryValue, Row, Savepoint, TransactionExecutor,
};
pub use optimization::{
BatchInsertBuilder, BatchOperations, BatchUpdateBuilder, CachedQuery, OptimizedPoolBuilder,
PoolOptimizationConfig, QueryCache, QueryCacheConfig,
};
#[cfg(feature = "postgres")]
pub use drivers::postgresql::schema::PostgreSQLSchemaEditor;
#[cfg(feature = "mysql")]
pub use drivers::mysql::schema::MySQLSchemaEditor;
#[cfg(feature = "sqlite")]
pub use drivers::sqlite::schema::SQLiteSchemaEditor;
#[cfg(feature = "postgres")]
pub use drivers::postgresql::two_phase::{PostgresTwoPhaseParticipant, PreparedTransactionInfo};
#[cfg(feature = "mysql")]
pub use drivers::mysql::two_phase::{
MySqlTwoPhaseParticipant, XaSessionEnded, XaSessionPrepared, XaSessionStarted,
XaTransactionInfo,
};
#[cfg(feature = "postgres")]
pub use dialect::PostgresBackend;
#[cfg(feature = "sqlite")]
pub use dialect::SqliteBackend;
#[cfg(feature = "mysql")]
pub use dialect::MySqlBackend;
#[cfg(feature = "cockroachdb-backend")]
pub use drivers::cockroachdb::{
ClusterInfo, CockroachDBBackend, CockroachDBConnection, CockroachDBConnectionConfig,
CockroachDBSchemaEditor, CockroachDBTransactionManager,
};
pub mod sql_build_helpers {
use super::types::DatabaseType;
use reinhardt_query::{
prelude::{
AlterTableStatement, CreateIndexStatement, CreateTableStatement, DropIndexStatement,
DropTableStatement, MySqlQueryBuilder, PostgresQueryBuilder, QueryBuilder,
SqliteQueryBuilder,
},
query::{DeleteStatement, InsertStatement, SelectStatement, UpdateStatement},
value::Values,
};
pub fn build_select(db_type: DatabaseType, stmt: &SelectStatement) -> (String, Values) {
match db_type {
DatabaseType::Postgres => PostgresQueryBuilder.build_select(stmt),
DatabaseType::Mysql => MySqlQueryBuilder.build_select(stmt),
DatabaseType::Sqlite => SqliteQueryBuilder.build_select(stmt),
}
}
pub fn build_select_sql(db_type: DatabaseType, stmt: &SelectStatement) -> String {
build_select(db_type, stmt).0
}
pub fn build_insert(db_type: DatabaseType, stmt: &InsertStatement) -> (String, Values) {
match db_type {
DatabaseType::Postgres => PostgresQueryBuilder.build_insert(stmt),
DatabaseType::Mysql => MySqlQueryBuilder.build_insert(stmt),
DatabaseType::Sqlite => SqliteQueryBuilder.build_insert(stmt),
}
}
pub fn build_insert_sql(db_type: DatabaseType, stmt: &InsertStatement) -> String {
build_insert(db_type, stmt).0
}
pub fn build_update(db_type: DatabaseType, stmt: &UpdateStatement) -> (String, Values) {
match db_type {
DatabaseType::Postgres => PostgresQueryBuilder.build_update(stmt),
DatabaseType::Mysql => MySqlQueryBuilder.build_update(stmt),
DatabaseType::Sqlite => SqliteQueryBuilder.build_update(stmt),
}
}
pub fn build_update_sql(db_type: DatabaseType, stmt: &UpdateStatement) -> String {
build_update(db_type, stmt).0
}
pub fn build_delete(db_type: DatabaseType, stmt: &DeleteStatement) -> (String, Values) {
match db_type {
DatabaseType::Postgres => PostgresQueryBuilder.build_delete(stmt),
DatabaseType::Mysql => MySqlQueryBuilder.build_delete(stmt),
DatabaseType::Sqlite => SqliteQueryBuilder.build_delete(stmt),
}
}
pub fn build_delete_sql(db_type: DatabaseType, stmt: &DeleteStatement) -> String {
build_delete(db_type, stmt).0
}
pub fn build_create_table(
db_type: DatabaseType,
stmt: &CreateTableStatement,
) -> (String, Values) {
match db_type {
DatabaseType::Postgres => PostgresQueryBuilder.build_create_table(stmt),
DatabaseType::Mysql => MySqlQueryBuilder.build_create_table(stmt),
DatabaseType::Sqlite => SqliteQueryBuilder.build_create_table(stmt),
}
}
pub fn build_create_table_sql(db_type: DatabaseType, stmt: &CreateTableStatement) -> String {
build_create_table(db_type, stmt).0
}
pub fn build_alter_table(
db_type: DatabaseType,
stmt: &AlterTableStatement,
) -> (String, Values) {
match db_type {
DatabaseType::Postgres => PostgresQueryBuilder.build_alter_table(stmt),
DatabaseType::Mysql => MySqlQueryBuilder.build_alter_table(stmt),
DatabaseType::Sqlite => SqliteQueryBuilder.build_alter_table(stmt),
}
}
pub fn build_alter_table_sql(db_type: DatabaseType, stmt: &AlterTableStatement) -> String {
build_alter_table(db_type, stmt).0
}
pub fn build_drop_table(db_type: DatabaseType, stmt: &DropTableStatement) -> (String, Values) {
match db_type {
DatabaseType::Postgres => PostgresQueryBuilder.build_drop_table(stmt),
DatabaseType::Mysql => MySqlQueryBuilder.build_drop_table(stmt),
DatabaseType::Sqlite => SqliteQueryBuilder.build_drop_table(stmt),
}
}
pub fn build_drop_table_sql(db_type: DatabaseType, stmt: &DropTableStatement) -> String {
build_drop_table(db_type, stmt).0
}
pub fn build_create_index(
db_type: DatabaseType,
stmt: &CreateIndexStatement,
) -> (String, Values) {
match db_type {
DatabaseType::Postgres => PostgresQueryBuilder.build_create_index(stmt),
DatabaseType::Mysql => MySqlQueryBuilder.build_create_index(stmt),
DatabaseType::Sqlite => SqliteQueryBuilder.build_create_index(stmt),
}
}
pub fn build_create_index_sql(db_type: DatabaseType, stmt: &CreateIndexStatement) -> String {
build_create_index(db_type, stmt).0
}
pub fn build_drop_index(db_type: DatabaseType, stmt: &DropIndexStatement) -> (String, Values) {
match db_type {
DatabaseType::Postgres => PostgresQueryBuilder.build_drop_index(stmt),
DatabaseType::Mysql => MySqlQueryBuilder.build_drop_index(stmt),
DatabaseType::Sqlite => SqliteQueryBuilder.build_drop_index(stmt),
}
}
pub fn build_drop_index_sql(db_type: DatabaseType, stmt: &DropIndexStatement) -> String {
build_drop_index(db_type, stmt).0
}
}