From e2b51a60465738e4745e7b1af3d04ceb2ad4be9d Mon Sep 17 00:00:00 2001 From: Peter Heringer Date: Wed, 13 Dec 2023 09:37:49 +0100 Subject: [PATCH] Add initial quads_for_pattern code --- lib/src/storage/mod.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/lib/src/storage/mod.rs b/lib/src/storage/mod.rs index edcdcb28..544f5db5 100644 --- a/lib/src/storage/mod.rs +++ b/lib/src/storage/mod.rs @@ -214,11 +214,43 @@ impl StorageReader { object: Option<&EncodedTerm>, graph_name: Option<&EncodedTerm>, ) -> ChainedDecodingQuadIterator { + println!("Receiving quads_for_pattern"); // let sub = subject.map(|s| self.decode_term(s).ok()).flatten(); // let pre = predicate.map(|s| self.decode_term(s).ok()).flatten(); let graph_name = graph_name.expect("Graph name is given"); // let obj = object.map(|s| self.decode_term(s).ok()).flatten(); - self.nodes(subject, predicate, object, graph_name); + if subject.is_some_and(|s| s.is_blank_node()) || object.is_some_and(|o| o.is_blank_node()) { + println!("Containing blank nodes"); + return ChainedDecodingQuadIterator { + first: DecodingQuadIterator { + terms: Vec::new(), + encoding: QuadEncoding::Spog, + }, + second: None, + }; + } + + if self.is_vocab(predicate, rdf::TYPE) && object.is_some() { + //TODO + println!("Containing type predicate"); + return ChainedDecodingQuadIterator { + first: DecodingQuadIterator { + terms: Vec::new(), + encoding: QuadEncoding::Spog, + }, + second: None, + }; + } else if self.is_node_related(predicate) { + println!("Containing node-related predicate"); + let terms = self.nodes(subject, predicate, object, graph_name); + return ChainedDecodingQuadIterator { + first: DecodingQuadIterator { + terms, + encoding: QuadEncoding::Spog, + }, + second: None, + }; + } return ChainedDecodingQuadIterator { first: DecodingQuadIterator { terms: Vec::new(),