use reliar_core::FailureKind;
pub(crate) fn classify_sqlstate(err: &sqlx::Error) -> FailureKind {
let sqlx::Error::Database(db) = err else {
return FailureKind::Transient;
};
let Some(code) = db.code() else {
return FailureKind::Transient;
};
match code.as_ref().get(..2) {
Some("08" | "40" | "53" | "55") => FailureKind::Transient,
Some("57") if code.as_ref() == "57014" => FailureKind::Transient,
Some("22" | "23" | "42") => FailureKind::Permanent,
_ => {
tracing::warn!(sqlstate = %code, "unrecognised SQLSTATE; classifying transient");
FailureKind::Transient
}
}
}
pub(crate) fn is_undefined_table(err: &sqlx::Error) -> bool {
match err {
sqlx::Error::Database(db) => db.code().as_deref() == Some("42P01"),
_ => false,
}
}