tank_core/
data_set.rs

1use crate::{
2    DynQuery, TableRef,
3    writer::{Context, SqlWriter},
4};
5
6/// Queryable data source (table or join tree).
7///
8/// Implementors know how to render themselves inside a FROM clause and whether
9/// column references should be qualified with schema and table.
10pub trait DataSet {
11    /// Should columns be qualified (`schema.table.col`)?
12    fn qualified_columns() -> bool
13    where
14        Self: Sized;
15    /// Render the sql bits representing this data set into `out`.
16    fn write_query(&self, writer: &dyn SqlWriter, context: &mut Context, out: &mut DynQuery);
17    /// TableRef representing this data set
18    fn table_ref(&self) -> TableRef;
19}
20
21impl DataSet for &dyn DataSet {
22    fn qualified_columns() -> bool
23    where
24        Self: Sized,
25    {
26        unreachable!("Cannot call static qualified_columns on a dyn object directly");
27    }
28    fn write_query(&self, writer: &dyn SqlWriter, context: &mut Context, out: &mut DynQuery) {
29        (*self).write_query(writer, context, out)
30    }
31    fn table_ref(&self) -> TableRef {
32        (*self).table_ref()
33    }
34}