use super::{Column, FieldNameCharsConsListItem, FieldsConsListCons, SelectableTablesContains};
use crate::{
sql::{FieldsConsListItem, ParameterBinder, SelectableTables},
util::TypedConsListNil,
};
pub trait SelectedValues<S: SelectableTables> {
type Fields: FieldsConsListItem;
const IS_AGGREGATE: bool;
fn write_sql_string<'s, 'a>(
&'s self,
f: &mut String,
parameter_binder: &mut ParameterBinder<'a>,
) -> std::fmt::Result
where
's: 'a;
}
pub trait SelectedValuesContainsFieldWithName<N: FieldNameCharsConsListItem> {}
impl<S: SelectableTables + SelectableTablesContains<C::Table>, C: Column> SelectedValues<S> for C {
type Fields = FieldsConsListCons<C::ColumnName, C::RustType, TypedConsListNil>;
const IS_AGGREGATE: bool = false;
fn write_sql_string<'s, 'a>(
&'s self,
f: &mut String,
_parameter_binder: &mut ParameterBinder<'a>,
) -> std::fmt::Result
where
's: 'a,
{
use std::fmt::Write;
write!(f, "{}", C::COLUMN_NAME)
}
}