use vantage_core::Result;
use vantage_expressions::result;
use vantage_table::table::Table;
use vantage_types::Entity;
use crate::select::SurrealSelect;
use crate::surrealdb::SurrealDB;
use crate::types::AnySurrealType;
pub trait SurrealTableExt<E: Entity<AnySurrealType>> {
fn select_first(&self) -> SurrealSelect<result::SingleRow>;
fn select_column(&self, column: &str) -> Result<SurrealSelect<result::List>>;
fn select_single(&self, column: &str) -> Result<SurrealSelect<result::Single>>;
}
impl<E: Entity<AnySurrealType>> SurrealTableExt<E> for Table<SurrealDB, E> {
fn select_first(&self) -> SurrealSelect<result::SingleRow> {
self.select().only_first_row()
}
fn select_column(&self, column: &str) -> Result<SurrealSelect<result::List>> {
if !self.columns().contains_key(column) {
return Err(vantage_core::error!(
"Column not found in table",
column = column,
table = self.table_name()
));
}
Ok(self.select().only(column))
}
fn select_single(&self, column: &str) -> Result<SurrealSelect<result::Single>> {
if !self.columns().contains_key(column) {
return Err(vantage_core::error!(
"Column not found in table",
column = column,
table = self.table_name()
));
}
Ok(self.select().only(column).only_first_row())
}
}