wip: extended matches engine impl

feat/lang-upgrades
Tomáš Mládek 2023-07-26 22:08:49 +02:00
parent 68740399e7
commit 0a67c3c5e7
1 changed files with 30 additions and 0 deletions

View File

@ -319,6 +319,36 @@ fn to_sqlite_predicates(query: Query) -> Result<SqlResult, QueryExecutionError>
PatternQueryComponent::Variable(_) | PatternQueryComponent::Discard => {}
};
if let Some(provenance) = &eq.provenance {
match provenance {
PatternQueryComponent::Exact(q_provenance) => {
subqueries.push(Box::new(data::provenance.eq(q_provenance.0.clone())))
}
PatternQueryComponent::In(q_provenances) => subqueries.push(Box::new(
data::provenance.eq_any(q_provenances.iter().map(|a| &a.0).cloned()),
)),
PatternQueryComponent::Contains(q_provenance) => subqueries.push(Box::new(
data::provenance.like(format!("%{}%", q_provenance)),
)),
PatternQueryComponent::Variable(_) | PatternQueryComponent::Discard => {}
}
}
if let Some(timestamp) = &eq.timestamp {
match timestamp {
PatternQueryComponent::Exact(q_timestamp) => {
subqueries.push(Box::new(data::timestamp.eq(q_timestamp.0.clone())))
}
PatternQueryComponent::In(q_timestamps) => subqueries.push(Box::new(
data::timestamp.eq_any(q_timestamps.iter().map(|a| &a.0).cloned()),
)),
PatternQueryComponent::Contains(_) => Err(QueryExecutionError(
"Cannot like-compare timestamps.".into(),
))?,
PatternQueryComponent::Variable(_) | PatternQueryComponent::Discard => {}
}
}
match subqueries.len() {
0 => Ok(Some(Box::new(true.into_sql::<Bool>()))),
1 => Ok(Some(subqueries.remove(0))),