public override JsonValue Evaluate(
            QueryExecutor executor,
            ExecutionFrame frame
            )
        {
            JsonValue o = Operand.Evaluate(executor, frame);

            switch (ExpressionType)
            {
            case AqlExpressionType.UnaryPlus: return(AqlArithmetic.Plus(o));

            case AqlExpressionType.UnaryMinus: return(AqlArithmetic.Minus(o));

            case AqlExpressionType.Not: return(AqlArithmetic.Not(o));
            }

            throw new QueryExecutionException(
                      $"Cannot evaluate expression {ExpressionType} - not implemented"
                      );
        }
        public override JsonValue Evaluate(
            QueryExecutor executor,
            ExecutionFrame frame
            )
        {
            JsonValue l = Left.Evaluate(executor, frame);
            JsonValue r = Right.Evaluate(executor, frame);

            switch (ExpressionType)
            {
            case AqlExpressionType.Add: return(AqlArithmetic.Add(l, r));

            case AqlExpressionType.Subtract: return(AqlArithmetic.Subtract(l, r));

            case AqlExpressionType.Multiply: return(AqlArithmetic.Multiply(l, r));

            case AqlExpressionType.Divide: return(AqlArithmetic.Divide(l, r));

            case AqlExpressionType.Modulo: return(AqlArithmetic.Modulo(l, r));

            case AqlExpressionType.Equal: return(AqlArithmetic.Equal(l, r));

            case AqlExpressionType.NotEqual: return(AqlArithmetic.NotEqual(l, r));

            case AqlExpressionType.GreaterThan: return(AqlArithmetic.GreaterThan(l, r));

            case AqlExpressionType.GreaterThanOrEqual: return(AqlArithmetic.GreaterThenOrEqual(l, r));

            case AqlExpressionType.LessThan: return(AqlArithmetic.LessThan(l, r));

            case AqlExpressionType.LessThanOrEqual: return(AqlArithmetic.LessThanOrEqual(l, r));

            case AqlExpressionType.And: return(AqlArithmetic.And(l, r));

            case AqlExpressionType.Or: return(AqlArithmetic.Or(l, r));
            }

            throw new QueryExecutionException(
                      $"Cannot evaluate expression {ExpressionType} - not implemented"
                      );
        }