use sqlparser::tokenizer::Span;
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
pub struct TableLevelDiagnostic {
pub kind: TableLevelDiagnosticKind,
pub message: String,
#[cfg_attr(feature = "serde", serde(skip_serializing))]
pub span: Option<Span>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
pub enum TableLevelDiagnosticKind {
UnsupportedStatement,
TooManyTableQualifiers,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
pub struct ColumnLevelDiagnostic {
pub kind: ColumnLevelDiagnosticKind,
pub message: String,
#[cfg_attr(feature = "serde", serde(skip_serializing))]
pub span: Option<Span>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
pub enum ColumnLevelDiagnosticKind {
UnsupportedStatement,
WildcardSuppressed,
TooManyTableQualifiers,
InsertColumnsUnresolved,
InsertColumnsArityMismatch,
AnonymousColumnsSuppressed,
}
impl ColumnLevelDiagnostic {
pub(crate) fn to_table_level(&self) -> Option<TableLevelDiagnostic> {
let kind = match self.kind {
ColumnLevelDiagnosticKind::UnsupportedStatement => {
TableLevelDiagnosticKind::UnsupportedStatement
}
ColumnLevelDiagnosticKind::TooManyTableQualifiers => {
TableLevelDiagnosticKind::TooManyTableQualifiers
}
ColumnLevelDiagnosticKind::WildcardSuppressed
| ColumnLevelDiagnosticKind::InsertColumnsUnresolved
| ColumnLevelDiagnosticKind::InsertColumnsArityMismatch
| ColumnLevelDiagnosticKind::AnonymousColumnsSuppressed => return None,
};
Some(TableLevelDiagnostic {
kind,
message: self.message.clone(),
span: self.span,
})
}
}