diff --git a/lib/src/lib.rs b/lib/src/lib.rs index 4947f317..85d533a6 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -27,7 +27,7 @@ //! assert_eq!(vec![quad], results.unwrap()); //! //! // SPARQL query -//! let prepared_query = connection.prepare_query("SELECT ?s WHERE { ?s ?p ?o }").unwrap(); +//! let prepared_query = connection.prepare_query("SELECT ?s WHERE { ?s ?p ?o }", None).unwrap(); //! let results = prepared_query.exec().unwrap(); //! if let QueryResult::Bindings(results) = results { //! assert_eq!(results.into_values_iter().next().unwrap().unwrap()[0], Some(ex.into())); diff --git a/lib/src/repository.rs b/lib/src/repository.rs index 68219d00..3539d340 100644 --- a/lib/src/repository.rs +++ b/lib/src/repository.rs @@ -30,7 +30,7 @@ use std::io::BufRead; /// assert_eq!(vec![quad], results.unwrap()); /// /// // SPARQL query -/// let prepared_query = connection.prepare_query("SELECT ?s WHERE { ?s ?p ?o }").unwrap(); +/// let prepared_query = connection.prepare_query("SELECT ?s WHERE { ?s ?p ?o }", None).unwrap(); /// let results = prepared_query.exec().unwrap(); /// if let QueryResult::Bindings(results) = results { /// assert_eq!(results.into_values_iter().next().unwrap().unwrap()[0], Some(ex.into())); @@ -75,13 +75,13 @@ pub trait RepositoryConnection: Clone { /// connection.insert(&Quad::new(ex.clone(), ex.clone(), ex.clone(), None)); /// /// // SPARQL query - /// let prepared_query = connection.prepare_query("SELECT ?s WHERE { ?s ?p ?o }").unwrap(); + /// let prepared_query = connection.prepare_query("SELECT ?s WHERE { ?s ?p ?o }", None).unwrap(); /// let results = prepared_query.exec().unwrap(); /// if let QueryResult::Bindings(results) = results { /// assert_eq!(results.into_values_iter().next().unwrap().unwrap()[0], Some(ex.into())); /// } /// ``` - fn prepare_query(&self, query: &str) -> Result; + fn prepare_query(&self, query: &str, base_iri: Option<&str>) -> Result; /// Retrieves quads with a filter on each quad component /// diff --git a/lib/src/sparql/mod.rs b/lib/src/sparql/mod.rs index fc0ffbbe..dabab272 100644 --- a/lib/src/sparql/mod.rs +++ b/lib/src/sparql/mod.rs @@ -54,8 +54,8 @@ enum SimplePreparedQueryOptions { } impl SimplePreparedQuery { - pub(crate) fn new(connection: S, query: &str) -> Result { - Ok(Self(match read_sparql_query(query, None)? { + pub(crate) fn new(connection: S, query: &str, base_iri: Option<&str>) -> Result { + Ok(Self(match read_sparql_query(query, base_iri)? { QueryVariants::Select { algebra, dataset: _, diff --git a/lib/src/store/memory.rs b/lib/src/store/memory.rs index 65421ecb..e0ee8129 100644 --- a/lib/src/store/memory.rs +++ b/lib/src/store/memory.rs @@ -32,7 +32,7 @@ use std::sync::RwLockWriteGuard; /// assert_eq!(vec![quad], results.unwrap()); /// /// // SPARQL query -/// let prepared_query = connection.prepare_query("SELECT ?s WHERE { ?s ?p ?o }").unwrap(); +/// let prepared_query = connection.prepare_query("SELECT ?s WHERE { ?s ?p ?o }", None).unwrap(); /// let results = prepared_query.exec().unwrap(); /// if let QueryResult::Bindings(results) = results { /// assert_eq!(results.into_values_iter().next().unwrap().unwrap()[0], Some(ex.into())); diff --git a/lib/src/store/mod.rs b/lib/src/store/mod.rs index e964c703..9533a352 100644 --- a/lib/src/store/mod.rs +++ b/lib/src/store/mod.rs @@ -59,8 +59,8 @@ impl From for StoreRepositoryConnection { impl RepositoryConnection for StoreRepositoryConnection { type PreparedQuery = SimplePreparedQuery; - fn prepare_query(&self, query: &str) -> Result> { - SimplePreparedQuery::new(self.inner.clone(), query) //TODO: avoid clone + fn prepare_query(&self, query: &str, base_iri: Option<&str>) -> Result> { + SimplePreparedQuery::new(self.inner.clone(), query, base_iri) //TODO: avoid clone } fn quads_for_pattern<'a>( diff --git a/lib/src/store/rocksdb.rs b/lib/src/store/rocksdb.rs index 4fe8fb78..383975ba 100644 --- a/lib/src/store/rocksdb.rs +++ b/lib/src/store/rocksdb.rs @@ -42,7 +42,7 @@ use std::sync::Mutex; /// assert_eq!(vec![quad], results.unwrap()); /// /// // SPARQL query -/// let prepared_query = connection.prepare_query("SELECT ?s WHERE { ?s ?p ?o }").unwrap(); +/// let prepared_query = connection.prepare_query("SELECT ?s WHERE { ?s ?p ?o }", None).unwrap(); /// let results = prepared_query.exec().unwrap(); /// if let QueryResult::Bindings(results) = results { /// assert_eq!(results.into_values_iter().next().unwrap().unwrap()[0], Some(ex.into())); diff --git a/lib/tests/sparql_test_cases.rs b/lib/tests/sparql_test_cases.rs index 7698293d..1c4bf7f2 100644 --- a/lib/tests/sparql_test_cases.rs +++ b/lib/tests/sparql_test_cases.rs @@ -89,8 +89,6 @@ fn sparql_w3c_query_evaluation_testsuite() -> Result<()> { NamedNode::parse("http://www.w3.org/2001/sw/DataAccess/tests/data-r2/expr-builtin/manifest#sameTerm-not-eq").unwrap(), //Simple literal vs xsd:string. We apply RDF 1.1 NamedNode::parse("http://www.w3.org/2001/sw/DataAccess/tests/data-r2/distinct/manifest#distinct-2").unwrap(), - //URI normalization: we are not normalizing well - NamedNode::parse("http://www.w3.org/2001/sw/DataAccess/tests/data-r2/i18n/manifest#normalization-2").unwrap(), //Test on curly brace scoping with OPTIONAL filter NamedNode::parse("http://www.w3.org/2001/sw/DataAccess/tests/data-r2/optional-filter/manifest#dawg-optional-filter-005-not-simplified").unwrap(), //DATATYPE("foo"@en) returns rdf:langString in SPARQL 1.1 @@ -119,7 +117,7 @@ fn sparql_w3c_query_evaluation_testsuite() -> Result<()> { } match repository .connection()? - .prepare_query(&read_file_to_string(&test.query)?) + .prepare_query(&read_file_to_string(&test.query)?, Some(&test.query)) { Err(error) => assert!( false, @@ -140,15 +138,17 @@ fn sparql_w3c_query_evaluation_testsuite() -> Result<()> { .next() .is_some(); let actual_graph = to_graph(result, with_order)?; - assert!( - actual_graph.is_isomorphic(&expected_graph), + if !actual_graph.is_isomorphic(&expected_graph) { + assert!( + false, "Failure on {}.\nExpected file:\n{}\nOutput file:\n{}\nParsed query:\n{}\nData:\n{}\n", test, expected_graph, actual_graph, - read_file_to_string(&test.query)?, + Query::parse(&read_file_to_string(&test.query)?, Some(&test.query)).unwrap(), repository_to_string(&repository) ) + } } }, } diff --git a/server/src/main.rs b/server/src/main.rs index e1b8c7c1..c040175b 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -134,7 +134,7 @@ fn evaluate_urlencoded_sparql_query( fn evaluate_sparql_query(connection: R, query: &str) -> Response { //TODO: stream - match connection.prepare_query(query) { + match connection.prepare_query(query, None) { Ok(query) => match query.exec().unwrap() { QueryResult::Graph(triples) => { let mut result = String::default();