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 schema;
11pub mod sparql;
12mod sparql_update;
13pub mod sql;
14
15pub use schema::{list_sql_schema, list_sql_tables, SqlColumnSchema, SqlTableSchema};
16
17pub use sparql::{run_sparql, SparqlResult};
18pub use sql::{run_sql, QueryResult};
19
20use ontocore_catalog::OntologyCatalog;
21use thiserror::Error;
22
23#[derive(Debug, Error)]
24pub enum QueryError {
25    #[error("SQL error: {0}")]
26    Sql(String),
27
28    #[error("SPARQL error: {0}")]
29    Sparql(String),
30
31    #[error("export error: {0}")]
32    Export(String),
33}
34
35pub type Result<T> = std::result::Result<T, QueryError>;
36
37pub trait QueryableCatalog {
38    fn catalog(&self) -> &OntologyCatalog;
39}
40
41impl QueryableCatalog for OntologyCatalog {
42    fn catalog(&self) -> &OntologyCatalog {
43        self
44    }
45}
46
47pub fn query_catalog(catalog: &OntologyCatalog, sql: &str) -> Result<QueryResult> {
48    run_sql(catalog, sql)
49}
50
51pub fn sparql_catalog(catalog: &OntologyCatalog, sparql: &str) -> Result<SparqlResult> {
52    run_sparql(catalog, sparql)
53}