use crate::behavior::TransactionQuery;
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
use crate::behavior::WithQuery;
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
use std::sync::Arc;
#[derive(Default, Clone)]
pub struct AlterTable {
pub(crate) _alter_table: String,
pub(crate) _ordered_actions: Vec<AlterTableActionItem>,
pub(crate) _raw_after: Vec<(AlterTableAction, String)>,
pub(crate) _raw_before: Vec<(AlterTableAction, String)>,
pub(crate) _raw: Vec<String>,
pub(crate) _rename_to: String,
}
#[derive(PartialEq, Clone)]
pub(crate) struct AlterTableActionItem(pub(crate) AlterTableOrderedAction, pub(crate) String);
#[derive(PartialEq, Clone)]
pub(crate) enum AlterTableOrderedAction {
Add,
Drop,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
Rename,
#[cfg(any(feature = "postgresql"))]
Alter,
}
#[derive(PartialEq, Clone)]
pub enum AlterTableAction {
AlterTable,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
RenameTo,
}
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) enum Combinator {
Except,
Intersect,
Union,
}
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[derive(Default, Clone)]
pub struct CreateIndex {
pub(crate) _column: Vec<String>,
pub(crate) _index_name: String,
pub(crate) _create_index: bool,
pub(crate) _if_not_exists: bool,
pub(crate) _on: String,
pub(crate) _raw_after: Vec<(CreateIndexParams, String)>,
pub(crate) _raw_before: Vec<(CreateIndexParams, String)>,
pub(crate) _raw: Vec<String>,
pub(crate) _unique: bool,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _where: Vec<(LogicalOperator, String)>,
#[cfg(feature = "postgresql")]
pub(crate) _concurrently: bool,
#[cfg(feature = "postgresql")]
pub(crate) _include: Vec<String>,
#[cfg(feature = "postgresql")]
pub(crate) _only: bool,
#[cfg(feature = "postgresql")]
pub(crate) _using: String,
}
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[derive(PartialEq, Clone)]
pub enum CreateIndexParams {
Column,
CreateIndex,
On,
Unique,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
Where,
#[cfg(feature = "postgresql")]
Concurrently,
#[cfg(feature = "postgresql")]
Only,
#[cfg(feature = "postgresql")]
Using,
#[cfg(feature = "postgresql")]
Include,
}
#[derive(Default, Clone)]
pub struct CreateTable {
pub(crate) _column: Vec<String>,
pub(crate) _constraint: Vec<String>,
pub(crate) _create_table: String,
pub(crate) _foreign_key: Vec<String>,
pub(crate) _primary_key: String,
pub(crate) _raw_after: Vec<(CreateTableParams, String)>,
pub(crate) _raw_before: Vec<(CreateTableParams, String)>,
pub(crate) _raw: Vec<String>,
}
#[derive(PartialEq, Clone)]
pub enum CreateTableParams {
Column,
Constraint,
CreateTable,
ForeignKey,
PrimaryKey,
}
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[derive(Default, Clone)]
pub struct DropIndex {
pub(crate) _drop_index: Vec<String>,
pub(crate) _if_exists: bool,
pub(crate) _raw_after: Vec<(DropIndexParams, String)>,
pub(crate) _raw_before: Vec<(DropIndexParams, String)>,
pub(crate) _raw: Vec<String>,
}
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[derive(PartialEq, Clone)]
pub enum DropIndexParams {
DropIndex,
}
#[derive(Default, Clone)]
pub struct DropTable {
pub(crate) _drop_table: Vec<String>,
pub(crate) _if_exists: bool,
pub(crate) _raw_after: Vec<(DropTableParams, String)>,
pub(crate) _raw_before: Vec<(DropTableParams, String)>,
pub(crate) _raw: Vec<String>,
}
#[derive(PartialEq, Clone)]
pub enum DropTableParams {
DropTable,
}
#[derive(Default, Clone)]
pub struct Delete {
pub(crate) _delete_from: String,
pub(crate) _raw_after: Vec<(DeleteClause, String)>,
pub(crate) _raw_before: Vec<(DeleteClause, String)>,
pub(crate) _raw: Vec<String>,
pub(crate) _where: Vec<(LogicalOperator, String)>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _returning: Vec<String>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _with: Vec<(String, std::sync::Arc<dyn crate::behavior::WithQuery>)>,
}
#[derive(PartialEq, Clone)]
pub enum DeleteClause {
DeleteFrom,
Where,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
Returning,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
With,
}
#[derive(Default, Clone)]
pub struct Insert {
pub(crate) _default_values: bool,
pub(crate) _on_conflict: String,
pub(crate) _overriding: String,
pub(crate) _raw_after: Vec<(InsertClause, String)>,
pub(crate) _raw_before: Vec<(InsertClause, String)>,
pub(crate) _raw: Vec<String>,
pub(crate) _select: Option<Select>,
pub(crate) _values: Vec<String>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _returning: Vec<String>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _with: Vec<(String, std::sync::Arc<dyn crate::behavior::WithQuery>)>,
#[cfg(not(feature = "sqlite"))]
pub(crate) _insert_into: String,
#[cfg(feature = "sqlite")]
pub(crate) _insert: (InsertVars, String),
}
#[cfg(feature = "sqlite")]
#[derive(Default, Clone, PartialEq)]
pub(crate) enum InsertVars {
#[default]
InsertInto,
InsertOr,
ReplaceInto,
}
#[derive(PartialEq, Clone)]
pub enum InsertClause {
DefaultValues,
InsertInto,
OnConflict,
Overriding,
Select,
Values,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
Returning,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
With,
#[cfg(feature = "sqlite")]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
InsertOr,
#[cfg(feature = "sqlite")]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
ReplaceInto,
}
#[derive(Clone, PartialEq)]
pub(crate) enum LogicalOperator {
And,
Or,
}
#[derive(Default, Clone)]
pub struct Select {
pub(crate) _from: Vec<String>,
pub(crate) _group_by: Vec<String>,
pub(crate) _having: Vec<String>,
pub(crate) _join: Vec<String>,
pub(crate) _order_by: Vec<String>,
pub(crate) _raw_after: Vec<(SelectClause, String)>,
pub(crate) _raw_before: Vec<(SelectClause, String)>,
pub(crate) _raw: Vec<String>,
pub(crate) _select: Vec<String>,
pub(crate) _where: Vec<(LogicalOperator, String)>,
pub(crate) _window: Vec<String>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _except: Vec<Self>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _intersect: Vec<Self>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _limit: String,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _offset: String,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _union: Vec<Self>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _with: Vec<(String, Arc<dyn WithQuery>)>,
}
#[derive(Clone, PartialEq)]
pub enum SelectClause {
From,
GroupBy,
Having,
Join,
Limit,
Offset,
OrderBy,
Select,
Where,
Window,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
Except,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
Intersect,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
Union,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
With,
}
#[derive(Default)]
pub struct Transaction {
pub(crate) _commit: Option<TransactionCommand>,
pub(crate) _ordered_commands: Vec<Box<dyn TransactionQuery>>,
pub(crate) _raw: Vec<String>,
pub(crate) _set_transaction: Option<TransactionCommand>,
pub(crate) _start_transaction: Option<TransactionCommand>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _begin: Option<TransactionCommand>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _end: Option<TransactionCommand>,
}
#[derive(PartialEq)]
pub(crate) enum TrCmd {
Commit,
ReleaseSavepoint,
Rollback,
Savepoint,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
Begin,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
End,
#[cfg(not(feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
SetTransaction,
#[cfg(not(feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
StartTransaction,
}
#[derive(PartialEq)]
pub(crate) struct TransactionCommand(pub(crate) TrCmd, pub(crate) String);
#[derive(Default, Clone)]
pub struct Update {
pub(crate) _raw_after: Vec<(UpdateClause, String)>,
pub(crate) _raw_before: Vec<(UpdateClause, String)>,
pub(crate) _raw: Vec<String>,
pub(crate) _set: Vec<String>,
pub(crate) _where: Vec<(LogicalOperator, String)>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _from: Vec<String>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _returning: Vec<String>,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
pub(crate) _with: Vec<(String, std::sync::Arc<dyn crate::behavior::WithQuery>)>,
#[cfg(not(feature = "sqlite"))]
pub(crate) _update: String,
#[cfg(feature = "sqlite")]
pub(crate) _update: (UpdateVars, String),
#[cfg(feature = "sqlite")]
pub(crate) _join: Vec<String>,
}
#[cfg(feature = "sqlite")]
#[derive(Default, Clone, PartialEq)]
pub(crate) enum UpdateVars {
#[default]
Update,
UpdateOr,
}
#[derive(PartialEq, Clone)]
pub enum UpdateClause {
Set,
Update,
Where,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
From,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
Returning,
#[cfg(any(feature = "postgresql", feature = "sqlite"))]
#[cfg_attr(docsrs, doc(cfg(feature = "postgresql")))]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
With,
#[cfg(feature = "sqlite")]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
UpdateOr,
#[cfg(feature = "sqlite")]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
Join,
}
#[derive(Default, Clone)]
pub struct Values {
pub(crate) _raw_after: Vec<(ValuesClause, String)>,
pub(crate) _raw_before: Vec<(ValuesClause, String)>,
pub(crate) _raw: Vec<String>,
pub(crate) _values: Vec<String>,
}
#[derive(PartialEq, Clone)]
pub enum ValuesClause {
Values,
}