use crate::compiled_query::CompiledQuery;
use crate::error::Result;
use crate::query::QueryCore;
use crate::query_compiler::QueryCompiler;
#[derive(Debug, Default, Clone, Copy)]
pub struct IndraQueryCompiler;
impl QueryCompiler for IndraQueryCompiler {
fn compile(&self, core: &QueryCore) -> Result<CompiledQuery> {
let (query_string, params) = core.to_sql()?;
Ok(CompiledQuery::new(query_string, params))
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::query::{QueryCore, StringPredicate};
#[test]
fn compiles_filtered_select() {
let core = QueryCore::new("project".to_string())
.where_string("name".into(), StringPredicate::Equals("alpha".into()));
let cq = IndraQueryCompiler.compile(&core).expect("compile");
assert!(cq.query_string.contains("WHERE"));
assert!(!cq.params.is_empty());
}
}