@Override public List<Expression<?>> getArgs() { return expr.getArgs(); }
@Override public T newInstance(Object... a) { return inner.newInstance(compress(inner.getArgs(), a)); }
@Override public T newInstance(Object... args) { return expr.newInstance(args); } }
private FactoryExpressionAdapter(FactoryExpression<T> expr, List<Expression<?>> args) { super(expr.getType()); this.expr = expr; this.args = args; }
@Override public <R, C> R accept(Visitor<R, C> v, C context) { return expr.accept(v, context); }
@Override public Object transformTuple(Object[] tuple, String[] aliases) { return constructor.newInstance(tuple); }
FactoryExpressionAdapter(FactoryExpression<T> inner, List<Expression<?>> args) { super(inner.getType()); this.inner = inner; this.args = expand(args); }
@Nullable @Override public <R, C> R accept(Visitor<R, C> v, @Nullable C context) { return expr.accept(v, context); }
@Override public List<Expression<?>> getArgs() { return expr.getArgs(); }
private <RT> RT newInstance(FactoryExpression<RT> c, ResultSet rs, int offset) throws InstantiationException, IllegalAccessException, InvocationTargetException, SQLException{ Object[] args = new Object[c.getArgs().size()]; for (int i = 0; i < args.length; i++) { args[i] = get(rs, c.getArgs().get(i), offset + i + 1, c.getArgs().get(i).getType()); } return c.newInstance(args); }
@Nullable @Override public T newInstance(Object... args) { if (args != null) { for (Object arg : args) { if (arg != null) { return expr.newInstance(args); } } } return null; }
public FactoryExpressionWrapper(FactoryExpression<T> expr) { super(expr.getType()); this.expr = expr; }
private Collection<Expression<?>> expandProjection(Collection<Expression<?>> exprs) { if (exprs.size() == 1 && exprs.iterator().next() instanceof FactoryExpression) { return ((FactoryExpression) exprs.iterator().next()).getArgs(); } else { return exprs; } }
@Override public T newInstance(Object... args) { for (int i = 0; i < args.length; i++) { Class<?> type = expr.getArgs().get(i).getType(); if (Enum.class.isAssignableFrom(type) && !type.isInstance(args[i])) { if (args[i] instanceof String) { args[i] = Enum.valueOf((Class)type, (String)args[i]); } else if (args[i] instanceof Number) { args[i] = getValues((Class)type)[((Number)args[i]).intValue()]; } } else if (args[i] instanceof Number && !type.isInstance(args[i])) { if (type.equals(Boolean.class)) { args[i] = ((Number)args[i]).intValue() > 0; } else if (Number.class.isAssignableFrom(type)){ args[i] = MathUtils.cast((Number)args[i], (Class)type); } } } return expr.newInstance(args); }
private Object project(FactoryExpression<?> expr, Object row) { if (row == null) { return null; } else if (row.getClass().isArray()) { return expr.newInstance((Object[])row); } else { return expr.newInstance(new Object[]{row}); } }
public NumberConversions(FactoryExpression<T> expr) { super(expr.getType()); this.expr = expr; }
@Override public Set<Expression<?>> visit(FactoryExpression<?> expr, Set<Expression<?>> known) { for (Expression<?> arg : expr.getArgs()) { known = arg.accept(this, known); } return known; }