SPARQL: Makes sure there are no duplicates when evaluating (a|b) property paths

pull/351/head
Tpt 3 years ago
parent 1fa0633db3
commit e88326fa16
  1. 24
      lib/src/sparql/eval.rs

@ -3026,10 +3026,10 @@ impl PathEvaluator {
}),
)
}
PlanPropertyPath::Alternative(a, b) => Box::new(
PlanPropertyPath::Alternative(a, b) => Box::new(hash_deduplicate(
self.eval_from_in_graph(a, start, graph_name)
.chain(self.eval_from_in_graph(b, start, graph_name)),
),
)),
PlanPropertyPath::ZeroOrMore(p) => {
self.run_if_term_is_a_graph_node(start, graph_name, || {
let eval = self.clone();
@ -3102,10 +3102,10 @@ impl PathEvaluator {
},
))
}
PlanPropertyPath::Alternative(a, b) => Box::new(
PlanPropertyPath::Alternative(a, b) => Box::new(hash_deduplicate(
self.eval_from_in_unknown_graph(a, start)
.chain(self.eval_from_in_unknown_graph(b, start)),
),
)),
PlanPropertyPath::ZeroOrMore(p) => {
let start2 = start.clone();
let eval = self.clone();
@ -3188,10 +3188,10 @@ impl PathEvaluator {
}),
)
}
PlanPropertyPath::Alternative(a, b) => Box::new(
PlanPropertyPath::Alternative(a, b) => Box::new(hash_deduplicate(
self.eval_to_in_graph(a, end, graph_name)
.chain(self.eval_to_in_graph(b, end, graph_name)),
),
)),
PlanPropertyPath::ZeroOrMore(p) => {
self.run_if_term_is_a_graph_node(end, graph_name, || {
let eval = self.clone();
@ -3262,10 +3262,10 @@ impl PathEvaluator {
},
))
}
PlanPropertyPath::Alternative(a, b) => Box::new(
PlanPropertyPath::Alternative(a, b) => Box::new(hash_deduplicate(
self.eval_to_in_unknown_graph(a, end)
.chain(self.eval_to_in_unknown_graph(b, end)),
),
)),
PlanPropertyPath::ZeroOrMore(p) => {
let end2 = end.clone();
let eval = self.clone();
@ -3350,10 +3350,10 @@ impl PathEvaluator {
},
))
}
PlanPropertyPath::Alternative(a, b) => Box::new(
PlanPropertyPath::Alternative(a, b) => Box::new(hash_deduplicate(
self.eval_open_in_graph(a, graph_name)
.chain(self.eval_open_in_graph(b, graph_name)),
),
)),
PlanPropertyPath::ZeroOrMore(p) => {
let eval = self.clone();
let p = p.clone();
@ -3427,10 +3427,10 @@ impl PathEvaluator {
},
))
}
PlanPropertyPath::Alternative(a, b) => Box::new(
PlanPropertyPath::Alternative(a, b) => Box::new(hash_deduplicate(
self.eval_open_in_unknown_graph(a)
.chain(self.eval_open_in_unknown_graph(b)),
),
)),
PlanPropertyPath::ZeroOrMore(p) => {
let eval = self.clone();
let p = p.clone();

Loading…
Cancel
Save