#[non_exhaustive]pub enum Opening {
Default,
Isolation(Isolation),
Mode(Mode),
}Expand description
What a table’s transactions open at: the dialect’s default, an isolation level, or a SQLite mode.
A table description carries one (TableSpec::opening), and the
dialect’s begin gives the statement that opens a transaction at it, or
refuses an opening its database lacks.
§Examples
use ruststream_sqlx_dialect::{
Dialect, Isolation, Opening, Opens, Statement, StatementError, TableSpec, level,
};
/// SQL Server, a database without a built-in dialect.
#[derive(Debug)]
pub struct Mssql;
impl Dialect for Mssql {
fn name(&self) -> &'static str {
"mssql"
}
// SQL Server keeps a level set with `SET TRANSACTION ISOLATION LEVEL` for the rest of the
// session, so a table that names no level opens at READ COMMITTED by name rather than at
// the level the connection last ran.
fn begin(&self, opening: Opening) -> Result<Option<&'static str>, StatementError> {
match opening {
Opening::Default | Opening::Isolation(Isolation::ReadCommitted) => Ok(Some(
"SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN TRANSACTION",
)),
Opening::Isolation(Isolation::RepeatableRead) => Ok(Some(
"SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN TRANSACTION",
)),
Opening::Isolation(Isolation::Serializable) => Ok(Some(
"SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRANSACTION",
)),
// A SQLite mode, and the levels the service's claims do not run at.
other => Err(StatementError::UnsupportedOpening {
dialect: self.name(),
opening: other.name(),
}),
}
}
}
impl Opens<level::ReadCommitted> for Mssql {}
impl Opens<level::RepeatableRead> for Mssql {}
impl Opens<level::Serializable> for Mssql {}Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
Default
What the dialect opens a table’s transactions at when the table names neither a level nor a mode: the database’s own level on Postgres and SQLite, READ COMMITTED on MySQL and MariaDB.
Isolation(Isolation)
An isolation level.
Mode(Mode)
A SQLite mode.
Implementations§
Source§impl Opening
impl Opening
Sourcepub const fn name(self) -> &'static str
pub const fn name(self) -> &'static str
The opening as a message names it: the database's default, isolation `serializable`
or mode `immediate` .
§Examples
use ruststream_sqlx_dialect::{
Dialect, Isolation, Opening, Opens, Statement, StatementError, TableSpec, level,
};
/// SQL Server, a database without a built-in dialect.
#[derive(Debug)]
pub struct Mssql;
impl Dialect for Mssql {
fn name(&self) -> &'static str {
"mssql"
}
fn begin(&self, opening: Opening) -> Result<Option<&'static str>, StatementError> {
match opening {
Opening::Default | Opening::Isolation(Isolation::ReadCommitted) => Ok(Some(
"SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN TRANSACTION",
)),
Opening::Isolation(Isolation::RepeatableRead) => Ok(Some(
"SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN TRANSACTION",
)),
// A refusal names the opening the table declares.
other => Err(StatementError::UnsupportedOpening {
dialect: self.name(),
opening: other.name(),
}),
}
}
}
// A table at one of these levels mounts on `Mssql`.
impl Opens<level::ReadCommitted> for Mssql {}
impl Opens<level::RepeatableRead> for Mssql {}Trait Implementations§
impl Copy for Opening
impl Eq for Opening
impl StructuralPartialEq for Opening
Auto Trait Implementations§
impl Freeze for Opening
impl RefUnwindSafe for Opening
impl Send for Opening
impl Sync for Opening
impl Unpin for Opening
impl UnsafeUnpin for Opening
impl UnwindSafe for Opening
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more