Skip to main content

tank_core/
dataset.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.
9pub trait Dataset {
10    /// Should columns be qualified (`schema.table.col`)?
11    fn qualified_columns() -> bool
12    where
13        Self: Sized;
14    /// Generates the SQL representation of this dataset for use in a query.
15    fn write_query(&self, writer: &dyn SqlWriter, context: &mut Context, out: &mut DynQuery);
16    /// Returns the primary table reference for this dataset.
17    fn table_ref(&self) -> TableRef;
18}
19
20impl Dataset for &dyn Dataset {
21    fn qualified_columns() -> bool
22    where
23        Self: Sized,
24    {
25        unreachable!("Cannot call static qualified_columns on a dyn object directly");
26    }
27    fn write_query(&self, writer: &dyn SqlWriter, context: &mut Context, out: &mut DynQuery) {
28        (*self).write_query(writer, context, out)
29    }
30    fn table_ref(&self) -> TableRef {
31        (*self).table_ref()
32    }
33}