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)); }
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(); } }
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)); }
public virtual T ArithmeticExpression(ArithmeticExpression expression) { throw new QueryNotSupportException(); }
public Expression ArithmeticExpression(ArithmeticExpression expression) { return(new ArithmeticExpression(expression.Operator, expression.Left.Visit(this), expression.Right.Visit(this))); }