#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum IsolationLevel {
ReadUncommitted,
ReadCommitted,
RepeatableRead,
Serializable,
}
impl IsolationLevel {
pub fn as_sql(&self) -> &'static str {
match self {
IsolationLevel::ReadUncommitted => "READ UNCOMMITTED",
IsolationLevel::ReadCommitted => "READ COMMITTED",
IsolationLevel::RepeatableRead => "REPEATABLE READ",
IsolationLevel::Serializable => "SERIALIZABLE",
}
}
pub fn default_for_dialect(dialect: &crate::backends::SqlDialect) -> Self {
match dialect {
crate::backends::SqlDialect::PostgreSQL => IsolationLevel::ReadCommitted,
crate::backends::SqlDialect::MySQL => IsolationLevel::RepeatableRead,
crate::backends::SqlDialect::SQLite => IsolationLevel::Serializable,
}
}
pub fn is_supported_by(&self, dialect: &crate::backends::SqlDialect) -> bool {
match dialect {
crate::backends::SqlDialect::PostgreSQL => true, crate::backends::SqlDialect::MySQL => {
matches!(
self,
IsolationLevel::ReadUncommitted
| IsolationLevel::ReadCommitted
| IsolationLevel::RepeatableRead
| IsolationLevel::Serializable
)
}
crate::backends::SqlDialect::SQLite => {
matches!(self, IsolationLevel::Serializable)
}
}
}
}