use criterium::NumberCriterium;
use criterium::rusqlite::assembler::*;
use criterium::StringCriterium;
use serde::{Serialize,Deserialize};
use crate::database::SummarySchema;
use crate::database::fields::*;
#[derive(Clone,Debug,Serialize,Deserialize)]
#[serde(rename_all="snake_case")]
pub enum TokenStatisticsCriterium {
Text(StringCriterium),
Occurances(NumberCriterium<usize>),
}
impl AssembleRusqliteQuery<SummarySchema, ()> for TokenStatisticsCriterium {
fn assemble_rusqlite_query(
&self,
assembly_context: &AssemblyContext,
_condition: &()
) -> InvertableRusqliteQuery<SummarySchema> {
match self {
Self::Text(c) => {
c.assemble_query(assembly_context, &TokenField::TokenText.into())
.inner_join(
None,
TokenField::TokenId.into(),
None,
TokenStatisticsField::TokenId.into(),
)
},
Self::Occurances(c) => {
c.assemble_query(assembly_context, &TokenStatisticsField::Occurances.into())
},
}
}
}