public virtual Expression VisitSumExpression(SumExpression sumExpression)
        {
            Check.NotNull(sumExpression, nameof(sumExpression));

            _sql.Append("SUM(");

            VisitExpression(sumExpression.Expression);

            _sql.Append(")");

            return(sumExpression);
        }
        private static Expression HandleSum(HandlerContext handlerContext)
        {
            if (!handlerContext.QueryModelVisitor.RequiresClientProjection)
            {
                var sumExpression
                    = new SumExpression(handlerContext.SelectExpression.Projection.Single());

                handlerContext.SelectExpression.SetProjectionExpression(sumExpression);

                return((Expression)_transformClientExpressionMethodInfo
                       .MakeGenericMethod(sumExpression.Type)
                       .Invoke(null, new object[] { handlerContext }));
            }

            return(handlerContext.EvalOnClient());
        }
Example #3
0
        public void Sum_Times()
        {
            //Arrange
            var dollars = Money.Dollar(5);
            var francs  = Money.Franc(10);

            var sut = new Bank();

            sut.AddRate("CHF", "USD", 2);

            //Act
            var sum    = new SumExpression(dollars, francs).Times(2);
            var result = sut.Reduce(sum, "USD");

            result.Should().Be(Money.Dollar(20));
        }
Example #4
0
        public void Sum_Plus()
        {
            //Arrange
            var dollars = Money.Dollar(5);
            var francs  = Money.Franc(10);

            var sut = new Bank();

            sut.AddRate("CHF", "USD", 2);

            //Act
            var sumPlus = new SumExpression(dollars, francs).Plus(dollars);
            var result  = sut.Reduce(sumPlus, "USD");

            //Assert
            result.Should().Be(Money.Dollar(15));
        }
Example #5
0
        public void MathFunctionReturnsValueAndCalculatesTheSentenceWithUnknown3()
        {
            // 2 + atan(x) + x
            IExpression       two      = new Constant(2);
            string            function = "ata(x)";
            FunctionConverter f        = new FunctionConverter();
            IExpression       value    = new VariableX();
            IExpression       mathFun  = new MathFunction(f.Translator(function), value);
            IExpression       x        = new VariableX();

            IExpression result = new SumExpression(two, mathFun);

            result = new SumExpression(result, x);
            Context c = new Context(1);

            var y = result.Interpret(c);

            Assert.AreEqual(3.785, y, 4);
        }
Example #6
0
        public void MathFunctionReturnsValueAndCalculatesTheSentenceWithFunLog2()
        {
            // 2 + cos(-123) + x
            IExpression       two      = new Constant(2);
            string            function = "cos(-123)";
            FunctionConverter f        = new FunctionConverter();
            IExpression       value    = new Constant(f.getValue(function));
            IExpression       mathFun  = new MathFunction(f.Translator(function), value);
            IExpression       x        = new VariableX();

            IExpression result = new SumExpression(two, mathFun);

            result = new SumExpression(result, x);
            Context c = new Context(123);

            var y = result.Interpret(c);

            Assert.AreEqual(124.45, y, 2);
        }
        public void Eval_When_Sum_OneVariableAndOneConstants5and3_MustReturn_8()
        {
            // Arrange
            var sut = new SumExpression(new AssignmentExpression(
                                            new VariableExpression("P"),
                                            new ConstantExpression(5)),
                                        new ConstantExpression(3));
            var v = new Visitor.Visitor();

            sut.Accept(v);

            // Act
            var actual = sut.Eval();


            // Assert
            Assert.AreEqual(expected: 8, actual: actual);
            Assert.AreEqual("(P = 5) + 3", v.ToString());
        }
Example #8
0
        public override Expression VisitSum(SumExpression sumExpression)
        {
            base.VisitSum(sumExpression);

            // In PostgreSQL SUM() doesn't return the same type as its argument for smallint, int and bigint.
            // Cast to get the same type.
            // http://www.postgresql.org/docs/current/static/functions-aggregate.html
            if (sumExpression.Type == typeof(short))
            {
                Sql.Append("::INT2");
            }
            else if (sumExpression.Type == typeof(int))
            {
                Sql.Append("::INT4");
            }
            else if (sumExpression.Type == typeof(long))
            {
                Sql.Append("::INT8");
            }

            return(sumExpression);
        }
Example #9
0
        public override Expression VisitSumExpression(SumExpression sumExpression)
        {
            base.VisitSumExpression(sumExpression);

            // In PostgreSQL SUM() doesn't return the same type as its argument for smallint, int and bigint.
            // Cast to get the same type.
            // http://www.postgresql.org/docs/current/static/functions-aggregate.html
            switch (Type.GetTypeCode(sumExpression.Expression.Type))
            {
            case TypeCode.Int16:
                Sql.Append("::INT2");
                break;

            case TypeCode.Int32:
                Sql.Append("::INT4");
                break;

            case TypeCode.Int64:
                Sql.Append("::INT8");
                break;
            }

            return(sumExpression);
        }
Example #10
0
 public void Resolve(SumExpression expression)
 {
     this.parent.Write(expression, this.name, this.writer, this.ticket);
 }
Example #11
0
 private string Sum(SumExpression exp) => $"SELECT SUM({Secondary.Serialize(exp.Selector.Body)}) FROM ({Serialize(exp.Sub)}) AS this";
Example #12
0
 public override Expression VisitSum(SumExpression sumExpression)
 {
     base.VisitSum(sumExpression);
     return(sumExpression);
 }
Example #13
0
 public void Resolve(SumExpression expression)
 {
     this.Result = false;
 }
        public void Eval_When_Sum_OneVariableAndOneConstants5and3_MustReturn_8()
        {
            // Arrange
            var sut = new SumExpression(new AssignmentExpression(
                                                new VariableExpression("P"),
                                                new ConstantExpression(5)),
                                            new ConstantExpression(3));
            var v = new Visitor.Visitor();
            sut.Accept(v);

            // Act
            var actual = sut.Eval();

            // Assert
            Assert.AreEqual(expected: 8, actual: actual);
            Assert.AreEqual("(P = 5) + 3", v.ToString());
        }
        public void Eval_When_Sum_TwoConstants2and3_MustReturn_5()
        {
            // Arrange
            var sut = new SumExpression(new ConstantExpression(2), new ConstantExpression(3));
            // Act
            var actual = sut.Eval();

            // Assert
            Assert.AreEqual(expected: 5, actual: actual);
        }