mem-query 0.0.1

Relational algebra interface for Rust collections
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;