private IValue ParseBetweenExpression(IValue leftOperand) { NPathBetweenExpression between = new NPathBetweenExpression(); between.TestExpression = leftOperand; tokenizer.GetCurrentToken("between", "Between"); tokenizer.MoveNext(); if (CurrentIsValue()) { between.FromExpression = ParseExpression(); } else { throw GetExpectedTokenException("Value"); } tokenizer.GetCurrentToken("and", "And"); tokenizer.MoveNext(); if (CurrentIsValue()) { between.EndExpression = ParseExpression(); } else { throw GetExpectedTokenException("Value"); } return(between); }
protected virtual void EmitBetween(NPathBetweenExpression betweenExpression) { EmitExpression(betweenExpression.TestExpression); Write(" between "); // do not localize EmitExpression(betweenExpression.FromExpression); Write(" and "); // do not localize EmitExpression(betweenExpression.EndExpression); }
protected virtual bool EvalBetweenExpression(object item, NPathBetweenExpression betweenExpression) { object fromValue = EvalValue(item, betweenExpression.FromExpression); object endValue = EvalValue(item, betweenExpression.EndExpression); object testValue = EvalValue(item, betweenExpression.TestExpression); if (fromValue is string) { fromValue = fromValue.ToString().ToLower(); } if (endValue is string) { endValue = endValue.ToString().ToLower(); } if (testValue is string) { testValue = testValue.ToString().ToLower(); } int res1 = Comparer.DefaultInvariant.Compare(testValue, fromValue); if (res1 < 0) { return(false); } int res2 = Comparer.DefaultInvariant.Compare(testValue, endValue); if (res2 > 0) { return(false); } return(true); }
protected virtual void EmitExpression(IValue expression) { if (expression is NPathNotExpression) { NPathNotExpression value = (NPathNotExpression)expression; EmitNot(value); } if (expression is NPathFunction) { NPathFunction value = (NPathFunction)expression; EmitFunction(value); } if (expression is NPathParameter) { NPathParameter value = (NPathParameter)expression; EmitParameter(value); } if (expression is NPathNullValue) { NPathNullValue value = (NPathNullValue)expression; EmitNullValue(value); } if (expression is NPathBetweenExpression) { NPathBetweenExpression value = (NPathBetweenExpression)expression; EmitBetween(value); } if (expression is NPathBooleanValue) { NPathBooleanValue value = (NPathBooleanValue)expression; EmitBooleanValue(value); } if (expression is NPathDecimalValue) { NPathDecimalValue value = (NPathDecimalValue)expression; EmitDecimalValue(value); } if (expression is NPathDateTimeValue) { NPathDateTimeValue value = (NPathDateTimeValue)expression; EmitDateTimeValue(value); } if (expression is NPathGuidValue) { NPathGuidValue value = (NPathGuidValue)expression; EmitGuidValue(value); } if (expression is NPathStringValue) { NPathStringValue value = (NPathStringValue)expression; EmitStringValue(value); } if (expression is NPathIdentifier) { NPathIdentifier propertyPath = (NPathIdentifier)expression; EmitPropertyPath(propertyPath); } if (expression is NPathPropertyFilter) { NPathPropertyFilter propertyFilter = (NPathPropertyFilter)expression; EmitPropertyFilter(propertyFilter); } if (expression is NPathParenthesisGroup) { NPathParenthesisGroup parenthesisGroup = (NPathParenthesisGroup)expression; EmitParenthesisGroup(parenthesisGroup); } if (expression is NPathMathExpression) { NPathMathExpression mathExpression = (NPathMathExpression)expression; EmitMathExpression(mathExpression); } if (expression is NPathCompareExpression) { NPathCompareExpression compareExpression = (NPathCompareExpression)expression; EmitCompareExpression(compareExpression); } if (expression is NPathBooleanExpression) { NPathBooleanExpression boolExpression = (NPathBooleanExpression)expression; EmitBooleanExpression(boolExpression); } if (expression is NPathInExpression) { NPathInExpression value = (NPathInExpression)expression; EmitIn(value); } if (expression is NPathSearchFunction) { NPathSearchFunction value = (NPathSearchFunction)expression; EmitSearchFunction(value); } }