use of org.datanucleus.query.expression.PrimaryExpression in project datanucleus-core by datanucleus.
the class StringEqualsMethod 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);
return ((String) invokedValue).equals(arg1) ? Boolean.TRUE : Boolean.FALSE;
}
use of org.datanucleus.query.expression.PrimaryExpression in project datanucleus-core by datanucleus.
the class StringIndexOfMethod 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 Integer.valueOf(-1);
}
if (!(invokedValue instanceof String)) {
throw new NucleusException(Localiser.msg("021011", method, invokedValue.getClass().getName()));
}
// Evaluate the first argument
String arg1 = null;
Object arg1Obj = null;
Object param = expr.getArguments().get(0);
if (param instanceof PrimaryExpression) {
PrimaryExpression primExpr = (PrimaryExpression) param;
arg1Obj = eval.getValueForPrimaryExpression(primExpr);
} else if (param instanceof ParameterExpression) {
ParameterExpression paramExpr = (ParameterExpression) param;
arg1Obj = QueryUtils.getValueForParameterExpression(eval.getParameterValues(), paramExpr);
} else if (param instanceof Literal) {
arg1Obj = ((Literal) param).getLiteral();
} else if (param instanceof InvokeExpression) {
arg1Obj = eval.getValueForInvokeExpression((InvokeExpression) param);
} else {
throw new NucleusException(method + "(param[, num1]) where param is instanceof " + param.getClass().getName() + " not supported");
}
arg1 = QueryUtils.getStringValue(arg1Obj);
Integer result = null;
if (expr.getArguments().size() == 2) {
// Evaluate the second argument
int arg2 = -1;
param = expr.getArguments().get(1);
Object arg2Obj = null;
if (param instanceof PrimaryExpression) {
PrimaryExpression primExpr = (PrimaryExpression) param;
arg2Obj = eval.getValueForPrimaryExpression(primExpr);
} else if (param instanceof ParameterExpression) {
ParameterExpression paramExpr = (ParameterExpression) param;
arg2Obj = QueryUtils.getValueForParameterExpression(eval.getParameterValues(), paramExpr);
} else if (param instanceof Literal) {
arg2Obj = ((Literal) param).getLiteral();
} else if (param instanceof DyadicExpression) {
arg2Obj = ((DyadicExpression) param).evaluate(eval);
} else {
throw new NucleusException(method + "(param1, param2) where param2 is instanceof " + param.getClass().getName() + " not supported");
}
if (!(arg2Obj instanceof Number)) {
throw new NucleusException(method + "(param1,param2) : param2 must be numeric");
}
arg2 = ((Number) arg2Obj).intValue();
result = Integer.valueOf(((String) invokedValue).indexOf(arg1, arg2));
} else {
result = Integer.valueOf(((String) invokedValue).indexOf(arg1));
}
return result;
}
use of org.datanucleus.query.expression.PrimaryExpression in project datanucleus-core by datanucleus.
the class StringMatchesMethod 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 arg = null;
Object argObj = null;
Object param = expr.getArguments().get(0);
if (expr.getArguments().size() > 1) {
NucleusLogger.QUERY.info("Please note that any escape character is currently ignored");
// TODO Cater for optional second argument that is the escape character
}
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");
}
arg = QueryUtils.getStringValue(argObj);
if (eval.getQueryLanguage().equalsIgnoreCase(Query.LANGUAGE_JPQL)) {
// Convert JPQL like expression to String.matches input
String matchesArg = arg;
matchesArg = StringUtils.replaceAll(matchesArg, "%", ".*");
matchesArg = matchesArg.replace('_', '.');
arg = matchesArg;
}
return ((String) invokedValue).matches(arg) ? Boolean.TRUE : Boolean.FALSE;
}
use of org.datanucleus.query.expression.PrimaryExpression in project datanucleus-core by datanucleus.
the class SubstringFunction 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, num1, num2) where param is instanceof " + param.getClass().getName() + " not supported");
}
if (paramValue == null) {
return null;
}
Object num1 = expr.getArguments().get(1);
int num1Value = -1;
if (num1 instanceof Literal) {
// Extract Integer from arithmetic Literal
num1Value = eval.getIntegerForLiteral((Literal) num1);
} else {
throw new NucleusException(method + "(param, num1, num2) where num1 is instanceof " + num1.getClass().getName() + " not supported");
}
Object num2 = expr.getArguments().get(2);
int num2Value = -1;
if (num2 instanceof Literal) {
num2Value = eval.getIntegerForLiteral((Literal) num2);
} else {
throw new NucleusException(method + "(param, num1, num2) where num2 is instanceof " + num2.getClass().getName() + " not supported");
}
return ((String) paramValue).substring(num1Value, num2Value);
}
use of org.datanucleus.query.expression.PrimaryExpression in project datanucleus-core by datanucleus.
the class SizeFunction 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 Collection) {
return Integer.valueOf(((Collection) paramValue).size());
} else if (paramValue instanceof Map) {
return Integer.valueOf(((Map) paramValue).size());
}
return null;
}
Aggregations