Ejemplo n.º 1
0
        private Expression ResolveArithmeticLiterals(ArithmeticExpression expression, LiteralExpression leftLiteral, LiteralExpression rightLiteral)
        {
            object left  = leftLiteral.Value;
            object right = rightLiteral.Value;
            object result;

            var type = LiteralUtil.CoerceLiteralValues(ref left, leftLiteral.LiteralType, ref right, rightLiteral.LiteralType);

            switch (expression.Operator)
            {
            case Operator.Add: result = ResolveAdd(left, right, type); break;

            case Operator.Div: result = ResolveDiv(left, right, type); break;

            case Operator.Mod: result = ResolveMod(left, right, type); break;

            case Operator.Mul: result = ResolveMul(left, right, type); break;

            case Operator.Sub: result = ResolveSub(left, right, type); break;

            default:
                throw new NotSupportedException();
            }

            if (result == null)
            {
                throw new ODataException(String.Format(
                                             ErrorMessages.Expression_IncompatibleTypes,
                                             expression.Operator,
                                             type
                                             ));
            }

            return(new LiteralExpression(result, type));
        }
Ejemplo n.º 2
0
        public override IProjection ArithmeticExpression(ArithmeticExpression expression)
        {
            var left       = CreateProjection(expression.Left);
            var right      = CreateProjection(expression.Right);
            var returnType = ArtithmicReturnType(expression.Left, expression.Right);

            switch (expression.Operator)
            {
            case Operator.Add: return(new ArithmeticOperatorProjection("+", returnType, left, right));

            case Operator.Sub: return(new ArithmeticOperatorProjection("-", returnType, left, right));

            case Operator.Mul: return(new ArithmeticOperatorProjection("*", returnType, left, right));

            case Operator.Div: return(new ArithmeticOperatorProjection("/", returnType, left, right));

            case Operator.Mod:
                return(new SqlFunctionProjection(
                           "mod",
                           returnType,
                           left,
                           right
                           ));

            default: throw new NotSupportedException();
            }
        }
Ejemplo n.º 3
0
        public Expression ArithmeticExpression(ArithmeticExpression expression)
        {
            var left  = expression.Left.Visit(this);
            var right = expression.Right.Visit(this);

            var leftLiteral  = left as LiteralExpression;
            var rightLiteral = right as LiteralExpression;

            if (leftLiteral != null && rightLiteral != null)
            {
                return(ResolveArithmeticLiterals(expression, leftLiteral, rightLiteral));
            }

            return(new ArithmeticExpression(expression.Operator, left, right));
        }
Ejemplo n.º 4
0
 public virtual T ArithmeticExpression(ArithmeticExpression expression)
 {
     throw new QueryNotSupportException();
 }
Ejemplo n.º 5
0
 public Expression ArithmeticExpression(ArithmeticExpression expression)
 {
     return(new ArithmeticExpression(expression.Operator, expression.Left.Visit(this), expression.Right.Visit(this)));
 }