use super::{Ident, Literal};
use crate::vocab::Meta;
use thin_vec::ThinVec;
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TransactionStatement {
Begin {
syntax: TransactionStart,
mode: Option<TransactionModeKind>,
block: Option<TransactionBlockKeyword>,
name: Option<Box<Ident>>,
modes: ThinVec<TransactionMode>,
meta: Meta,
},
Commit {
syntax: TransactionCommitKeyword,
block: Option<TransactionBlockKeyword>,
name: Option<Box<Ident>>,
chain: Option<bool>,
release: Option<bool>,
meta: Meta,
},
Rollback {
syntax: TransactionRollbackKeyword,
block: Option<TransactionBlockKeyword>,
name: Option<Box<Ident>>,
savepoint_keyword: bool,
to_savepoint: Option<Ident>,
chain: Option<bool>,
release: Option<bool>,
meta: Meta,
},
Savepoint {
name: Ident,
meta: Meta,
},
Release {
savepoint_keyword: bool,
savepoint: Ident,
meta: Meta,
},
SetCharacteristics {
modes: ThinVec<TransactionMode>,
meta: Meta,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TransactionStart {
Begin,
Start,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TransactionCommitKeyword {
Commit,
End,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TransactionRollbackKeyword {
Rollback,
Abort,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TransactionBlockKeyword {
Transaction,
Work,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TransactionModeKind {
Deferred,
Immediate,
Exclusive,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TransactionMode {
IsolationLevel {
level: IsolationLevel,
meta: Meta,
},
AccessMode {
access: TransactionAccessMode,
meta: Meta,
},
Deferrable {
deferrable: bool,
meta: Meta,
},
ConsistentSnapshot {
meta: Meta,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum IsolationLevel {
ReadUncommitted,
ReadCommitted,
RepeatableRead,
Serializable,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TransactionAccessMode {
ReadOnly,
ReadWrite,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum XaStatement {
Start {
keyword: XaStartKeyword,
xid: Xid,
association: Option<XaAssociation>,
meta: Meta,
},
End {
xid: Xid,
suspend: Option<XaSuspend>,
meta: Meta,
},
Prepare {
xid: Xid,
meta: Meta,
},
Commit {
xid: Xid,
one_phase: bool,
meta: Meta,
},
Rollback {
xid: Xid,
meta: Meta,
},
Recover {
convert_xid: bool,
meta: Meta,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum XaStartKeyword {
Start,
Begin,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum XaAssociation {
Join,
Resume,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum XaSuspend {
Suspend,
SuspendForMigrate,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct Xid {
pub gtrid: Literal,
pub bqual: Option<Literal>,
pub format_id: Option<Literal>,
pub meta: Meta,
}