@Override public final boolean equals(Object o) { if (o == this) { return true; } else if (o instanceof Operation<?>) { Operation<?> op = (Operation<?>)o; return op.getOperator() == operator && op.getArgs().equals(args) && op.getType().equals(getType()); } else { return false; } }
@SuppressWarnings("unchecked") private <T> Expr<?> regexToLike(Operation<T> operation) { List<Expr<?>> args = new ArrayList<Expr<?>>(); for (Expr<?> arg : operation.getArgs()){ if (!arg.getType().equals(String.class)){ args.add(arg); }else if (arg instanceof Constant){ args.add(regexToLike(arg.toString())); }else if (arg instanceof Operation){ args.add(regexToLike((Operation)arg)); }else{ args.add(arg); } } return OSimple.create( operation.getType(), operation.getOperator(), args.<Expr<?>>toArray(new Expr[args.size()])); }
@Override public Void visit(Operation<?> expr, Void context) { visitOperation(expr.getType(), expr.getOperator(), expr.getArgs()); return null; }
@SuppressWarnings("unchecked") @Override public Expression<?> visit(Operation<?> expr, Context context) { final Expression<?>[] args = new Expression<?>[expr.getArgs().size()]; for (int i = 0; i < args.length; i++) { Context c = new Context(); args[i] = expr.getArg(i).accept(this, c); context.add(c); } if (context.replace) { if (expr.getType().equals(Boolean.class)) { Predicate predicate = new PredicateOperation((Operator)expr.getOperator(), ImmutableList.copyOf(args)); return !context.paths.isEmpty() ? exists(context, predicate) : predicate; } else { return new OperationImpl(expr.getType(), expr.getOperator(), ImmutableList.copyOf(args)); } } else { return expr; } }
@SuppressWarnings("rawtypes") @Override public Expression<?> visit(Operation<?> expr, Context context) { Expression<?>[] args = new Expression<?>[expr.getArgs().size()]; for (int i = 0; i < args.length; i++) { Context c = new Context(); args[i] = expr.getArg(i).accept(this, c); context.add(c); } if (context.replace) { if (expr.getType().equals(Boolean.class)) { Predicate predicate = new PredicateOperation((Operator<Boolean>)expr.getOperator(), ImmutableList.copyOf(args)); return !context.paths.isEmpty() ? exists(context, predicate) : predicate; } else { return new OperationImpl(expr.getType(), expr.getOperator(), ImmutableList.copyOf(args)); } } else { return expr; } }
@Override public Expression<?> visit(Operation<?> expr, @Nullable Void context) { ImmutableList<Expression<?>> args = visit(expr.getArgs()); if (args.equals(expr.getArgs())) { return expr; } else if (expr instanceof Predicate) { return new PredicateOperation((Operator)expr.getOperator(), args); } else { return new OperationImpl(expr.getType(), expr.getOperator(), args); } }
expr = new OperationImpl(expr.getType(), Ops.COALESCE, ImmutableList.copyOf(transformList(expr.getArg(0), elements))); if (expr.getType().equals(Boolean.class)) { return new PredicateOperation((Operator) expr.getOperator(), ImmutableList.copyOf(args)); } else { return new OperationImpl(expr.getType(), expr.getOperator(), ImmutableList.copyOf(args));