use crate::error::Result;
use crate::resolver::columns::{ResolvedTable, TableScope};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum ColumnNaming {
#[default]
AsWritten,
JoinRow,
OutputRow,
}
#[derive(Debug, Clone, Copy)]
pub enum BareColumn<'a> {
Output,
Relation(&'a ResolvedTable),
Outer,
}
impl TableScope {
pub fn bare_column_qualifier(&self, column: &str) -> Result<Option<String>> {
let resolved = self.resolve_bare(column)?;
Ok(match (self.column_naming(), resolved) {
(ColumnNaming::JoinRow, BareColumn::Relation(table)) => {
table.row_qualifier().map(str::to_owned)
}
(ColumnNaming::JoinRow, BareColumn::Output | BareColumn::Outer)
| (ColumnNaming::AsWritten | ColumnNaming::OutputRow, _) => None,
})
}
pub fn qualified_column_qualifier(&self, table_ref: &str) -> Option<String> {
match (self.column_naming(), self.table_by_ref(table_ref)) {
(ColumnNaming::JoinRow, Some(table)) => table.row_qualifier().map(str::to_owned),
(ColumnNaming::OutputRow, Some(_)) => None,
(ColumnNaming::AsWritten, _)
| (ColumnNaming::JoinRow | ColumnNaming::OutputRow, None) => Some(table_ref.to_owned()),
}
}
}