use of org.datanucleus.query.expression.Expression in project datanucleus-core by datanucleus.
the class TemporalDayMethod 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) {
if (invokedValue == null && expr.getArguments() != null) {
// Specified as static function, so use argument of InvokeExpression
List<Expression> argExprs = expr.getArguments();
if (argExprs.size() > 1) {
throw new NucleusUserException("Incorrect number of arguments to DAY");
}
Expression argExpr = argExprs.get(0);
invokedValue = eval.getValueForExpression(argExpr);
}
if (invokedValue == null) {
return Boolean.FALSE;
}
if (!(invokedValue instanceof Date)) {
throw new NucleusException(Localiser.msg("021011", expr.getOperation(), invokedValue.getClass().getName()));
}
if (invokedValue instanceof Date) {
Calendar cal = Calendar.getInstance();
cal.setTime((Date) invokedValue);
return Integer.valueOf(cal.get(Calendar.DAY_OF_MONTH));
} else if (invokedValue instanceof Calendar) {
return Integer.valueOf(((Calendar) invokedValue).get(Calendar.DAY_OF_MONTH));
} else if (invokedValue instanceof LocalDate) {
return ((LocalDate) invokedValue).getDayOfMonth();
} else if (invokedValue instanceof LocalDateTime) {
return ((LocalDateTime) invokedValue).getDayOfMonth();
} else {
throw new NucleusUserException("We do not currently support DAY() with argument of type " + invokedValue.getClass().getName());
}
}
use of org.datanucleus.query.expression.Expression 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);
}
use of org.datanucleus.query.expression.Expression in project datanucleus-core by datanucleus.
the class TemporalMonthJavaMethod 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) {
if (invokedValue == null && expr.getArguments() != null) {
// Specified as static function, so use argument of InvokeExpression
List<Expression> argExprs = expr.getArguments();
if (argExprs.size() > 1) {
throw new NucleusUserException("Incorrect number of arguments to MONTH_JAVA");
}
Expression argExpr = argExprs.get(0);
invokedValue = eval.getValueForExpression(argExpr);
}
if (invokedValue == null) {
return Boolean.FALSE;
}
if (!(invokedValue instanceof Date)) {
throw new NucleusException(Localiser.msg("021011", expr.getOperation(), invokedValue.getClass().getName()));
}
if (invokedValue instanceof Date) {
Calendar cal = Calendar.getInstance();
cal.setTime((Date) invokedValue);
return Integer.valueOf(cal.get(Calendar.MONTH));
} else if (invokedValue instanceof Calendar) {
return Integer.valueOf(((Calendar) invokedValue).get(Calendar.MONTH));
} else if (invokedValue instanceof LocalDate) {
return ((LocalDate) invokedValue).getMonthValue() - 1;
} else if (invokedValue instanceof LocalDateTime) {
return ((LocalDateTime) invokedValue).getMonthValue() - 1;
} else {
throw new NucleusUserException("We do not currently support MONTH_JAVA() with argument of type " + invokedValue.getClass().getName());
}
}
use of org.datanucleus.query.expression.Expression in project datanucleus-core by datanucleus.
the class TemporalMonthMethod 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) {
if (invokedValue == null && expr.getArguments() != null) {
// Specified as static function, so use argument of InvokeExpression
List<Expression> argExprs = expr.getArguments();
if (argExprs.size() > 1) {
throw new NucleusUserException("Incorrect number of arguments to MONTH");
}
Expression argExpr = argExprs.get(0);
invokedValue = eval.getValueForExpression(argExpr);
}
if (invokedValue == null) {
return Boolean.FALSE;
}
if (!(invokedValue instanceof Date)) {
throw new NucleusException(Localiser.msg("021011", expr.getOperation(), invokedValue.getClass().getName()));
}
if (invokedValue instanceof Date) {
Calendar cal = Calendar.getInstance();
cal.setTime((Date) invokedValue);
return Integer.valueOf(cal.get(Calendar.MONTH)) + 1;
} else if (invokedValue instanceof Calendar) {
return Integer.valueOf(((Calendar) invokedValue).get(Calendar.MONTH)) + 1;
} else if (invokedValue instanceof LocalDate) {
return ((LocalDate) invokedValue).getMonthValue();
} else if (invokedValue instanceof LocalDateTime) {
return ((LocalDateTime) invokedValue).getMonthValue();
} else {
throw new NucleusUserException("We do not currently support MONTH() with argument of type " + invokedValue.getClass().getName());
}
}
use of org.datanucleus.query.expression.Expression in project datanucleus-core by datanucleus.
the class TemporalYearMethod 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) {
if (invokedValue == null && expr.getArguments() != null) {
// Specified as static function, so use argument of InvokeExpression
List<Expression> argExprs = expr.getArguments();
if (argExprs.size() > 1) {
throw new NucleusUserException("Incorrect number of arguments to YEAR");
}
Expression argExpr = argExprs.get(0);
invokedValue = eval.getValueForExpression(argExpr);
}
if (invokedValue == null) {
return Boolean.FALSE;
}
if (!(invokedValue instanceof Date)) {
throw new NucleusException(Localiser.msg("021011", expr.getOperation(), invokedValue.getClass().getName()));
}
if (invokedValue instanceof Date) {
Calendar cal = Calendar.getInstance();
cal.setTime((Date) invokedValue);
return Integer.valueOf(cal.get(Calendar.YEAR));
} else if (invokedValue instanceof Calendar) {
return Integer.valueOf(((Calendar) invokedValue).get(Calendar.YEAR));
} else if (invokedValue instanceof LocalDate) {
return ((LocalDate) invokedValue).getYear();
} else if (invokedValue instanceof LocalDateTime) {
return ((LocalDateTime) invokedValue).getYear();
} else {
throw new NucleusUserException("We do not currently support YEAR() with argument of type " + invokedValue.getClass().getName());
}
}
Aggregations