private void EvalFilteredProduct(SparqlEvaluationContext context, ISet x, BaseMultiset other, PartitionedMultiset partitionedSet) { int id = partitionedSet.GetNextBaseID(); foreach (ISet y in other.Sets) { id++; ISet z = x.Join(y); z.ID = id; partitionedSet.Add(z); try { if (!this._expr.Evaluate(context, z.ID).AsSafeBoolean()) { //Means the expression evaluates to false so we discard the solution partitionedSet.Remove(z.ID); } } catch { //Means the solution does not meet the FILTER and can be discarded partitionedSet.Remove(z.ID); } } //Remember to check for timeouts occassionally context.CheckTimeout(); }
private void EvalProduct(ISet x, BaseMultiset other, PartitionedMultiset productSet) { int id = productSet.GetNextBaseID(); foreach (ISet y in other.Sets) { id++; ISet z = x.Join(y); z.ID = id; productSet.Add(z); } }
private void EvalLeftJoinProduct(ISet x, BaseMultiset other, PartitionedMultiset partitionedSet, ISparqlExpression expr) { LeviathanLeftJoinBinder binder = new LeviathanLeftJoinBinder(partitionedSet); SparqlEvaluationContext subcontext = new SparqlEvaluationContext(binder); bool standalone = false, matched = false; int id = partitionedSet.GetNextBaseID(); foreach (ISet y in other.Sets) { id++; ISet z = x.Join(y); z.ID = id; try { partitionedSet.Add(z); if (!expr.Evaluate(subcontext, z.ID).AsSafeBoolean()) { partitionedSet.Remove(z.ID); standalone = true; } else { matched = true; } } catch { partitionedSet.Remove(z.ID); standalone = true; } } if (standalone && !matched) { id++; ISet z = x.Copy(); z.ID = id; partitionedSet.Add(z); } }
private static void EvalProduct(ISet x, BaseMultiset other, PartitionedMultiset productSet, StopToken stop) { if (stop.ShouldStop) { return; } var id = productSet.GetNextBaseID(); foreach (var y in other.Sets) { id++; var z = x.Join(y); z.ID = id; productSet.Add(z); if (stop.ShouldStop) { return; } } }