use crate::domain::model::query::QuerySchema;
use super::runner::QueryRunner;
pub fn query_schema(runner: &dyn QueryRunner) -> anyhow::Result<QuerySchema> {
runner.schema()
}
#[cfg(test)]
mod tests {
use super::*;
use crate::domain::model::query::{QueryRelation, QueryResult, QueryScript};
struct StubRunner {
schema: QuerySchema,
}
impl QueryRunner for StubRunner {
fn run(&self, _: &QueryScript) -> anyhow::Result<QueryResult> {
unreachable!("schema test should not run scripts")
}
fn schema(&self) -> anyhow::Result<QuerySchema> {
Ok(self.schema.clone())
}
}
#[test]
fn query_schema_returns_what_the_runner_exposes() {
let runner = StubRunner {
schema: QuerySchema::new(vec![QueryRelation {
name: "issue".to_owned(),
columns: Vec::new(),
}]),
};
let s = query_schema(&runner).unwrap();
assert_eq!(s.relations.len(), 1);
assert_eq!(s.relations[0].name, "issue");
}
}