Skip to main content

ontocore_query/
lib.rs

1//! SQL-like virtual tables and SPARQL over an [`OntologyCatalog`].
2//!
3//! See [docs/sql-reference.md](https://github.com/eddiethedean/ontocode/blob/main/docs/sql-reference.md).
4//!
5//! # API stability
6//!
7//! **Pre-1.0:** virtual table names and column sets are documented but may gain columns
8//! without a major version until v1.0.
9
10pub mod sparql;
11mod sparql_update;
12pub mod sql;
13
14pub use sparql::{run_sparql, SparqlResult};
15pub use sql::{run_sql, QueryResult};
16
17use ontocore_catalog::OntologyCatalog;
18use thiserror::Error;
19
20#[derive(Debug, Error)]
21pub enum QueryError {
22    #[error("SQL error: {0}")]
23    Sql(String),
24
25    #[error("SPARQL error: {0}")]
26    Sparql(String),
27
28    #[error("export error: {0}")]
29    Export(String),
30}
31
32pub type Result<T> = std::result::Result<T, QueryError>;
33
34pub trait QueryableCatalog {
35    fn catalog(&self) -> &OntologyCatalog;
36}
37
38impl QueryableCatalog for OntologyCatalog {
39    fn catalog(&self) -> &OntologyCatalog {
40        self
41    }
42}
43
44pub fn query_catalog(catalog: &OntologyCatalog, sql: &str) -> Result<QueryResult> {
45    run_sql(catalog, sql)
46}
47
48pub fn sparql_catalog(catalog: &OntologyCatalog, sparql: &str) -> Result<SparqlResult> {
49    run_sparql(catalog, sparql)
50}