Skip to main content

valence_core/backend/
sql_compiler.rs

1//! SQL [`QueryCompiler`] for [`crate::query::QueryCore`].
2
3use crate::compiled_query::CompiledQuery;
4use crate::error::Result;
5use crate::query::QueryCore;
6use crate::query_compiler::QueryCompiler;
7
8/// Compiles [`QueryCore`] to parameterized SQL.
9#[derive(Debug, Default, Clone, Copy)]
10pub struct SqlQueryCompiler;
11
12impl QueryCompiler for SqlQueryCompiler {
13    fn compile(&self, core: &QueryCore) -> Result<CompiledQuery> {
14        let (query_string, params) = core.to_sql()?;
15        Ok(CompiledQuery::new(query_string, params))
16    }
17}
18
19#[cfg(test)]
20mod tests {
21    use super::*;
22    use crate::query::QueryCore;
23
24    #[test]
25    fn compiles_simple_select() {
26        let core = QueryCore::new("counter".to_string());
27        let cq = SqlQueryCompiler.compile(&core).expect("compile");
28        assert!(
29            cq.query_string.contains("FROM counter"),
30            "unexpected SQL: {}",
31            cq.query_string
32        );
33        assert!(
34            cq.query_string.starts_with("SELECT "),
35            "unexpected SQL: {}",
36            cq.query_string
37        );
38    }
39}