2015-03-28 10:14:30 -06:00
|
|
|
use databaseinfo::DatabaseInfo;
|
2015-04-06 03:17:48 -06:00
|
|
|
use std::borrow::Cow;
|
2015-04-06 04:37:35 -06:00
|
|
|
use std::cmp::Eq;
|
|
|
|
use std::hash::Hash;
|
2015-03-27 19:08:31 -06:00
|
|
|
|
|
|
|
pub trait DatabaseStorage {
|
|
|
|
type Info: DatabaseInfo;
|
|
|
|
|
2015-03-29 17:31:43 -06:00
|
|
|
fn scan_table<'a>(&'a self, table: &'a <Self::Info as DatabaseInfo>::Table)
|
2015-03-31 12:51:25 -06:00
|
|
|
-> Box<Group<ColumnValue=<Self::Info as DatabaseInfo>::ColumnValue> + 'a>;
|
|
|
|
}
|
|
|
|
|
|
|
|
pub trait Group {
|
2015-04-06 04:37:35 -06:00
|
|
|
type ColumnValue: Sized + Clone + Eq + Hash + 'static;
|
2015-03-31 12:51:25 -06:00
|
|
|
|
2015-04-13 06:42:42 -06:00
|
|
|
/// Returns any arbitrary row in the group.
|
|
|
|
/// Returns None if the group contains no rows.
|
|
|
|
fn get_any_row<'a>(&'a self) -> Option<Cow<'a, [Self::ColumnValue]>>;
|
2015-04-13 07:45:04 -06:00
|
|
|
|
|
|
|
fn count(&self) -> u64;
|
|
|
|
|
2015-04-06 03:17:48 -06:00
|
|
|
fn iter<'a>(&'a self) -> Box<Iterator<Item=Cow<'a, [Self::ColumnValue]>> + 'a>;
|
2015-03-27 19:08:31 -06:00
|
|
|
}
|