Beispiel #1
0
        public override Argument VisitMultiplicativeExpression(CalcParser.MultiplicativeExpressionContext context)
        {
            Argument arg1 = Visit(context.expression(0));
            Argument arg2 = Visit(context.expression(1));

            if (arg1.IsNull || arg2.IsNull)
            {
                return(Argument.Null);
            }

            if (context.Multiply() != null)
            {
                return(Multiplication(arg1, arg2));
            }

            if (context.Divide() != null)
            {
                return(Division(arg1, arg2));
            }

            return(Argument.Null);
        }
Beispiel #2
0
        public override Query VisitMultiplicativeExpression(CalcParser.MultiplicativeExpressionContext context)
        {
            Query q1 = Visit(context.expression(0));
            Query q2 = Visit(context.expression(1));

            ResultType type = ResultType.Undefined;

            if (q1.ExpectedResult == ResultType.Number && q2.ExpectedResult == ResultType.Number)
            {
                type = ResultType.Number;
            }

            if (context.Multiply() != null)
            {
                return(new Query($"({q1}*{q2})", type));
            }

            if (context.Divide() != null)
            {
                return(new Query($"({q1}/nullif({q2}, 0))", type));
            }

            throw new ExpressionException("Unknown multiplicative operation: " + context.GetText());
        }