/// <summary> /// Evaluates the LeftJoin /// </summary> /// <param name="context">Evaluation Context</param> /// <returns></returns> public BaseMultiset Evaluate(SparqlEvaluationContext context) { // Need to be careful about whether we linearize (CORE-406) if (!CanLinearizeLhs(context)) { context.InputMultiset = new IdentityMultiset(); } BaseMultiset lhsResult = context.Evaluate(_lhs); context.CheckTimeout(); if (lhsResult is NullMultiset) { context.OutputMultiset = lhsResult; } else if (lhsResult.IsEmpty) { context.OutputMultiset = new NullMultiset(); } else { // Only execute the RHS if the LHS had some results // Need to be careful about whether we linearize (CORE-406) context.InputMultiset = CanFlowResultsToRhs(context) && !IsCrossProduct ? lhsResult : new IdentityMultiset(); BaseMultiset rhsResult = context.Evaluate(_rhs); context.CheckTimeout(); context.OutputMultiset = lhsResult.LeftJoin(rhsResult, _filter.Expression); context.CheckTimeout(); } context.InputMultiset = context.OutputMultiset; return(context.OutputMultiset); }
/// <summary> /// Evaluates the LeftJoin /// </summary> /// <param name="context">Evaluation Context</param> /// <returns></returns> public BaseMultiset Evaluate(SparqlEvaluationContext context) { BaseMultiset initialInput = context.InputMultiset; BaseMultiset lhsResult = context.Evaluate(this._lhs);//this._lhs.Evaluate(context); context.CheckTimeout(); if (lhsResult is NullMultiset) { context.OutputMultiset = lhsResult; } else if (lhsResult.IsEmpty) { context.OutputMultiset = new NullMultiset(); } else { //Only execute the RHS if the LHS had some results context.InputMultiset = lhsResult; BaseMultiset rhsResult = context.Evaluate(this._rhs); context.CheckTimeout(); context.OutputMultiset = lhsResult.LeftJoin(rhsResult, this._filter.Expression); context.CheckTimeout(); } context.InputMultiset = context.OutputMultiset; return(context.OutputMultiset); }