예제 #1
0
        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);
        }
예제 #2
0
 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);
        }
예제 #4
0
        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);
            }
        }