Search in sources :

Example 11 with ParameterExpression

use of org.datanucleus.query.expression.ParameterExpression in project datanucleus-core by datanucleus.

the class StringStartsWithMethod method evaluate.

/* (non-Javadoc)
     * @see org.datanucleus.query.evaluator.memory.InvocationEvaluator#evaluate(org.datanucleus.query.expression.InvokeExpression, org.datanucleus.query.evaluator.memory.InMemoryExpressionEvaluator)
     */
public Object evaluate(InvokeExpression expr, Object invokedValue, InMemoryExpressionEvaluator eval) {
    String method = expr.getOperation();
    if (invokedValue == null) {
        return Boolean.FALSE;
    }
    if (!(invokedValue instanceof String)) {
        throw new NucleusException(Localiser.msg("021011", method, invokedValue.getClass().getName()));
    }
    String arg1 = null;
    Object argObj = null;
    Object param = expr.getArguments().get(0);
    if (param instanceof PrimaryExpression) {
        PrimaryExpression primExpr = (PrimaryExpression) param;
        argObj = eval.getValueForPrimaryExpression(primExpr);
    } else if (param instanceof ParameterExpression) {
        ParameterExpression paramExpr = (ParameterExpression) param;
        argObj = QueryUtils.getValueForParameterExpression(eval.getParameterValues(), paramExpr);
    } else if (param instanceof Literal) {
        argObj = ((Literal) param).getLiteral();
    } else if (param instanceof InvokeExpression) {
        argObj = eval.getValueForInvokeExpression((InvokeExpression) param);
    } else {
        throw new NucleusException(method + "(param) where param is instanceof " + param.getClass().getName() + " not supported");
    }
    arg1 = QueryUtils.getStringValue(argObj);
    Boolean result = null;
    if (expr.getArguments().size() == 2) {
        Literal param2 = (Literal) expr.getArguments().get(1);
        int arg2 = -1;
        if (param2.getLiteral() instanceof Number) {
            arg2 = ((Number) param2.getLiteral()).intValue();
        }
        result = ((String) invokedValue).startsWith(arg1, arg2) ? Boolean.TRUE : Boolean.FALSE;
    } else {
        result = ((String) invokedValue).startsWith(arg1) ? Boolean.TRUE : Boolean.FALSE;
    }
    return result;
}
Also used : InvokeExpression(org.datanucleus.query.expression.InvokeExpression) PrimaryExpression(org.datanucleus.query.expression.PrimaryExpression) ParameterExpression(org.datanucleus.query.expression.ParameterExpression) Literal(org.datanucleus.query.expression.Literal) NucleusException(org.datanucleus.exceptions.NucleusException)

Example 12 with ParameterExpression

use of org.datanucleus.query.expression.ParameterExpression in project datanucleus-core by datanucleus.

the class StringSubstringMethod method evaluate.

/* (non-Javadoc)
     * @see org.datanucleus.query.evaluator.memory.InvocationEvaluator#evaluate(org.datanucleus.query.expression.InvokeExpression, org.datanucleus.query.evaluator.memory.InMemoryExpressionEvaluator)
     */
public Object evaluate(InvokeExpression expr, Object invokedValue, InMemoryExpressionEvaluator eval) {
    String method = expr.getOperation();
    if (invokedValue == null) {
        return null;
    }
    if (!(invokedValue instanceof String)) {
        throw new NucleusException(Localiser.msg("021011", method, invokedValue.getClass().getName()));
    }
    int arg0 = -1;
    Expression arg0Expr = expr.getArguments().get(0);
    Object arg0Val = null;
    if (arg0Expr instanceof PrimaryExpression) {
        arg0Val = eval.getValueForPrimaryExpression((PrimaryExpression) arg0Expr);
    } else if (arg0Expr instanceof ParameterExpression) {
        arg0Val = QueryUtils.getValueForParameterExpression(eval.getParameterValues(), (ParameterExpression) arg0Expr);
    } else if (arg0Expr instanceof Literal) {
        arg0Val = ((Literal) arg0Expr).getLiteral();
    } else if (arg0Expr instanceof DyadicExpression) {
        arg0Val = ((DyadicExpression) arg0Expr).evaluate(eval);
    }
    if (!(arg0Val instanceof Number)) {
        throw new NucleusException(method + "(param1[,param2]) : param1 must be numeric");
    }
    arg0 = ((Number) arg0Val).intValue();
    String result = null;
    if (expr.getArguments().size() == 2) {
        int arg1 = -1;
        Expression arg1Expr = expr.getArguments().get(1);
        Object arg1Val = null;
        if (arg1Expr instanceof PrimaryExpression) {
            arg1Val = eval.getValueForPrimaryExpression((PrimaryExpression) arg1Expr);
        } else if (arg1Expr instanceof ParameterExpression) {
            arg1Val = QueryUtils.getValueForParameterExpression(eval.getParameterValues(), (ParameterExpression) arg1Expr);
        } else if (arg1Expr instanceof Literal) {
            arg1Val = ((Literal) arg1Expr).getLiteral();
        } else if (arg0Expr instanceof DyadicExpression) {
            arg1Val = ((DyadicExpression) arg1Expr).evaluate(eval);
        }
        if (!(arg1Val instanceof Number)) {
            throw new NucleusException(method + "(param1,param2) : param2 must be numeric");
        }
        arg1 = ((Number) arg1Val).intValue();
        if (((String) invokedValue).length() < arg1) {
            if (((String) invokedValue).length() < arg0) {
                return null;
            }
            return ((String) invokedValue).substring(arg0);
        }
        result = ((String) invokedValue).substring(arg0, arg1);
    } else {
        if (((String) invokedValue).length() < arg0) {
            return null;
        }
        result = ((String) invokedValue).substring(arg0);
    }
    return result;
}
Also used : PrimaryExpression(org.datanucleus.query.expression.PrimaryExpression) DyadicExpression(org.datanucleus.query.expression.DyadicExpression) PrimaryExpression(org.datanucleus.query.expression.PrimaryExpression) ParameterExpression(org.datanucleus.query.expression.ParameterExpression) Expression(org.datanucleus.query.expression.Expression) InvokeExpression(org.datanucleus.query.expression.InvokeExpression) ParameterExpression(org.datanucleus.query.expression.ParameterExpression) Literal(org.datanucleus.query.expression.Literal) NucleusException(org.datanucleus.exceptions.NucleusException) DyadicExpression(org.datanucleus.query.expression.DyadicExpression)

Example 13 with ParameterExpression

use of org.datanucleus.query.expression.ParameterExpression in project datanucleus-core by datanucleus.

the class OptionalOrElseMethod method evaluate.

/* (non-Javadoc)
     * @see org.datanucleus.query.evaluator.memory.InvocationEvaluator#evaluate(org.datanucleus.query.expression.InvokeExpression, org.datanucleus.query.evaluator.memory.InMemoryExpressionEvaluator)
     */
public Object evaluate(InvokeExpression expr, Object invokedValue, InMemoryExpressionEvaluator eval) {
    String method = expr.getOperation();
    if (invokedValue == null) {
        return null;
    }
    if (!(invokedValue instanceof Optional)) {
        throw new NucleusException(Localiser.msg("021011", method, invokedValue.getClass().getName()));
    }
    List<Expression> args = expr.getArguments();
    if (args == null || args.isEmpty() || args.size() != 1) {
        throw new NucleusException("orElse requires one argument");
    }
    Expression argExpr = args.get(0);
    Object argument = null;
    if (argExpr instanceof Literal) {
        argument = ((Literal) argExpr).getLiteral();
    } else if (argExpr instanceof PrimaryExpression) {
        PrimaryExpression primExpr = (PrimaryExpression) argExpr;
        argument = eval.getValueForPrimaryExpression(primExpr);
    } else if (argExpr instanceof ParameterExpression) {
        ParameterExpression paramExpr = (ParameterExpression) argExpr;
        argument = QueryUtils.getValueForParameterExpression(eval.getParameterValues(), paramExpr);
    } else if (argExpr instanceof InvokeExpression) {
        argument = eval.getValueForInvokeExpression((InvokeExpression) argExpr);
    } else if (argExpr instanceof DyadicExpression) {
        argument = ((DyadicExpression) argExpr).evaluate(eval);
    } else {
        throw new NucleusException(method + "(param1) where param is instanceof " + argExpr.getClass().getName() + " not supported");
    }
    return ((Optional) invokedValue).orElse(argument);
}
Also used : InvokeExpression(org.datanucleus.query.expression.InvokeExpression) Optional(java.util.Optional) PrimaryExpression(org.datanucleus.query.expression.PrimaryExpression) DyadicExpression(org.datanucleus.query.expression.DyadicExpression) ParameterExpression(org.datanucleus.query.expression.ParameterExpression) Expression(org.datanucleus.query.expression.Expression) InvokeExpression(org.datanucleus.query.expression.InvokeExpression) PrimaryExpression(org.datanucleus.query.expression.PrimaryExpression) Literal(org.datanucleus.query.expression.Literal) ParameterExpression(org.datanucleus.query.expression.ParameterExpression) NucleusException(org.datanucleus.exceptions.NucleusException) DyadicExpression(org.datanucleus.query.expression.DyadicExpression)

Example 14 with ParameterExpression

use of org.datanucleus.query.expression.ParameterExpression in project datanucleus-core by datanucleus.

the class LocateFunction method evaluate.

/* (non-Javadoc)
     * @see org.datanucleus.query.evaluator.memory.InvocationEvaluator#evaluate(org.datanucleus.query.expression.InvokeExpression, org.datanucleus.query.evaluator.memory.InMemoryExpressionEvaluator)
     */
public Object evaluate(InvokeExpression expr, Object invokedValue, InMemoryExpressionEvaluator eval) {
    String method = expr.getOperation();
    Object param = expr.getArguments().get(0);
    Object paramValue = null;
    if (param instanceof PrimaryExpression) {
        PrimaryExpression primExpr = (PrimaryExpression) param;
        paramValue = eval.getValueForPrimaryExpression(primExpr);
    } else if (param instanceof ParameterExpression) {
        ParameterExpression paramExpr = (ParameterExpression) param;
        paramValue = QueryUtils.getValueForParameterExpression(eval.getParameterValues(), paramExpr);
    } else if (param instanceof Literal) {
        paramValue = ((Literal) param).getLiteral();
    } else {
        throw new NucleusException(method + "(str1, str2, pos) where str1 is instanceof " + param.getClass().getName() + " not supported");
    }
    if (paramValue == null) {
        return Integer.valueOf(-1);
    }
    Object locStr = expr.getArguments().get(1);
    String locStrValue = null;
    if (locStr instanceof Literal) {
        locStrValue = (String) ((Literal) locStr).getLiteral();
    } else {
        throw new NucleusException(method + "(str, str2, pos) where str2 is instanceof " + locStr.getClass().getName() + " not supported");
    }
    if (expr.getArguments().size() == 3) {
        Object pos = expr.getArguments().get(2);
        int num2Value = -1;
        if (pos instanceof Literal) {
            num2Value = eval.getIntegerForLiteral((Literal) pos);
        } else {
            throw new NucleusException(method + "(str, str2, pos) where pos is instanceof " + pos.getClass().getName() + " not supported");
        }
        return Integer.valueOf(((String) paramValue).indexOf(locStrValue, num2Value));
    }
    return Integer.valueOf(((String) paramValue).indexOf(locStrValue));
}
Also used : PrimaryExpression(org.datanucleus.query.expression.PrimaryExpression) ParameterExpression(org.datanucleus.query.expression.ParameterExpression) Literal(org.datanucleus.query.expression.Literal) NucleusException(org.datanucleus.exceptions.NucleusException)

Example 15 with ParameterExpression

use of org.datanucleus.query.expression.ParameterExpression in project datanucleus-core by datanucleus.

the class LowerFunction method evaluate.

/* (non-Javadoc)
     * @see org.datanucleus.query.evaluator.memory.InvocationEvaluator#evaluate(org.datanucleus.query.expression.InvokeExpression, org.datanucleus.query.evaluator.memory.InMemoryExpressionEvaluator)
     */
public Object evaluate(InvokeExpression expr, Object invokedValue, InMemoryExpressionEvaluator eval) {
    String method = expr.getOperation();
    Object param = expr.getArguments().get(0);
    Object paramValue = null;
    if (param instanceof PrimaryExpression) {
        PrimaryExpression primExpr = (PrimaryExpression) param;
        paramValue = eval.getValueForPrimaryExpression(primExpr);
    } else if (param instanceof ParameterExpression) {
        ParameterExpression paramExpr = (ParameterExpression) param;
        paramValue = QueryUtils.getValueForParameterExpression(eval.getParameterValues(), paramExpr);
    } else if (param instanceof Literal) {
        paramValue = ((Literal) param).getLiteral();
    } else {
        throw new NucleusException(method + "(param) where param is instanceof " + param.getClass().getName() + " not supported");
    }
    if (paramValue == null) {
        return null;
    }
    if (!(paramValue instanceof String)) {
        throw new NucleusException(Localiser.msg("021011", method, paramValue.getClass().getName()));
    }
    return ((String) paramValue).toLowerCase();
}
Also used : PrimaryExpression(org.datanucleus.query.expression.PrimaryExpression) ParameterExpression(org.datanucleus.query.expression.ParameterExpression) Literal(org.datanucleus.query.expression.Literal) NucleusException(org.datanucleus.exceptions.NucleusException)

Aggregations

ParameterExpression (org.datanucleus.query.expression.ParameterExpression)56 PrimaryExpression (org.datanucleus.query.expression.PrimaryExpression)51 Literal (org.datanucleus.query.expression.Literal)43 NucleusException (org.datanucleus.exceptions.NucleusException)42 InvokeExpression (org.datanucleus.query.expression.InvokeExpression)31 VariableExpression (org.datanucleus.query.expression.VariableExpression)25 DyadicExpression (org.datanucleus.query.expression.DyadicExpression)23 Expression (org.datanucleus.query.expression.Expression)23 OrderExpression (org.datanucleus.query.expression.OrderExpression)10 NucleusUserException (org.datanucleus.exceptions.NucleusUserException)8 List (java.util.List)7 VariableNotSetException (org.datanucleus.query.inmemory.VariableNotSetException)7 Map (java.util.Map)6 ArrayExpression (org.datanucleus.query.expression.ArrayExpression)6 CaseExpression (org.datanucleus.query.expression.CaseExpression)6 CreatorExpression (org.datanucleus.query.expression.CreatorExpression)6 JavaQueryCompiler (org.datanucleus.query.compiler.JavaQueryCompiler)5 QueryCompilation (org.datanucleus.query.compiler.QueryCompilation)5 ClassExpression (org.datanucleus.query.expression.ClassExpression)5 JoinExpression (org.datanucleus.query.expression.JoinExpression)5