use crate::prelude::*;
use std::iter::{Iterator,IntoIterator};
pub trait QueryRequest: Clone {
type ResultCols: Header;
type Filter: List;
type SortKey: List;
fn into_filter(self)->Self::Filter;
}
pub trait QueryPlan<'a, Rel, Req:QueryRequest>: core::fmt::Debug {
type Row: 'a + Record<Cols= Req::ResultCols>;
type Iter: Iterator<Item=Self::Row>;
fn execute(self, &'a Rel, Req)->Self::Iter;
}
pub trait IntoQueryResult<'a, C:Header> {
type Row: 'a + Record<Cols=C>;
type Iter: Iterator<Item=Self::Row>;
fn execute(self)->Self::Iter;
}
impl<'a, C:Header, T:IntoIterator> IntoQueryResult<'a, C> for T
where T::Item: 'a + Record<Cols=C> {
type Row = T::Item;
type Iter = T::IntoIter;
fn execute(self)->Self::Iter { self.into_iter() }
}
pub mod request;
pub mod combination;
pub mod filter;
use filter::QueryFilter;
pub mod order_by;
pub mod fallback;