@Override public Expression get() { return target.getIndex(); }
@Override public Expression get() { return target.getIndex(); }
@Override public void visit(ArrayExpression expression) { expression.getBase().accept(this); sb.append('['); expression.getIndex().accept(this); sb.append(']'); }
@Override public void visit(ArrayExpression expression) { expression.getBase().accept(this); sb.append('['); expression.getIndex().accept(this); sb.append(']'); }
@Override public Expression visit(ArrayExpression expression) { Expression newBase = expression.getBase().accept(this); Expression newIndex = expression.getIndex().accept(this); if (expression.getBase() != newBase || expression.getIndex() != newIndex) { return new ArrayExpression((PropertyExpression) newBase, newIndex); } return expression; }
@Override public Expression visit(ArrayExpression expression) { Expression newBase = expression.getBase().accept(this); Expression newIndex = expression.getIndex().accept(this); if (expression.getBase() != newBase || expression.getIndex() != newIndex) { return new ArrayExpression((PropertyExpression) newBase, newIndex); } return expression; }
@Override public void visit(ArrayExpression expression) { expression.getBase().accept(this); expression.getIndex().accept(this); }
@Override public Boolean visit(ArrayExpression expression) { if (expression.getBase().accept(this)) { return true; } return expression.getIndex().accept(this); }
@Override public Boolean visit(ArrayExpression expression) { if (expression.getBase().accept(this)) { return true; } return expression.getIndex().accept(this); }
@Override public void visit(ArrayExpression expression) { expression.getBase().accept(this); // The index will always end up in the on clause ClauseType oldClauseType = secondClauseType; secondClauseType = ClauseType.JOIN; expression.getIndex().accept(this); secondClauseType = oldClauseType; }
@Override public void visit(ArrayExpression expression) { expression.getBase().accept(this); expression.getIndex().accept(this); }
@Override public Expression visit(ArrayExpression expression) { return new ArrayExpression(expression.getBase(), expression.getIndex().accept(this)); }
@Override public Expression visit(ArrayExpression expression) { return new ArrayExpression(expression.getBase(), expression.getIndex().accept(this)); }
private String getJoinAlias(ArrayExpression expr) { StringBuilder sb = new StringBuilder(expr.getBase().toString()); Expression indexExpr = expr.getIndex(); if (indexExpr instanceof ParameterExpression) { ParameterExpression indexParamExpr = (ParameterExpression) indexExpr; sb.append('_'); sb.append(indexParamExpr.getName()); } else if (indexExpr instanceof PathExpression) { PathExpression indexPathExpr = (PathExpression) indexExpr; sb.append('_'); sb.append(((JoinNode) indexPathExpr.getBaseNode()).getAliasInfo().getAlias()); if (indexPathExpr.getField() != null) { sb.append('_'); sb.append(indexPathExpr.getField().replaceAll("\\.", "_")); } } else if (indexExpr instanceof NumericLiteral) { sb.append('_'); sb.append(((NumericLiteral) indexExpr).getValue()); } else if (indexExpr instanceof StringLiteral) { sb.append('_'); sb.append(((StringLiteral) indexExpr).getValue()); } else { throw new IllegalStateException("Invalid array index expression " + indexExpr.toString()); } return sb.toString(); }
@Override public void visit(ArrayExpression expression) { boolean wasParamsAllowed = parametersAllowed; List<PathPosition> currentPositions = pathPositions; PathPosition position = currentPosition; parametersAllowed = true; pathPositions = new ArrayList<>(); pathPositions.add(currentPosition = new PathPosition(managedType, null)); // Validate index against metamodel expression.getIndex().accept(this); parametersAllowed = wasParamsAllowed; currentPosition = position; pathPositions = currentPositions; // Only need the base to navigate down the path expression.getBase().accept(this); currentPosition.setCurrentType(currentPosition.getCurrentType()); }
@Override public Expression visit(ArrayExpression expression) { expression.setBase((PropertyExpression) expression.getBase().accept(this)); expression.setIndex(expression.getIndex().accept(this)); return expression; }
@Override public Expression visit(ArrayExpression expression) { expression.setBase((PropertyExpression) expression.getBase().accept(this)); expression.setIndex(expression.getIndex().accept(this)); return expression; }
private EqPredicate getArrayExpressionPredicate(JoinNode joinNode, ArrayExpression arrayExpr) { PathExpression keyPath = new PathExpression(new ArrayList<PathElementExpression>(), true); keyPath.getExpressions().add(new PropertyExpression(joinNode.getAliasInfo().getAlias())); keyPath.setPathReference(new SimplePathReference(joinNode, null, joinNode.getNodeType())); Attribute<?, ?> arrayBaseAttribute = joinNode.getParentTreeNode().getAttribute(); Expression keyExpression; if (arrayBaseAttribute instanceof ListAttribute<?, ?>) { keyExpression = new ListIndexExpression(keyPath); } else { keyExpression = new MapKeyExpression(keyPath); } return new EqPredicate(keyExpression, arrayExpr.getIndex()); }
@Override public Boolean visit(ArrayExpression expression) { if (Boolean.TRUE == expression.getBase().accept(this)) { onModifier(new ArrayExpressionBaseModifier(expression)); } if (Boolean.TRUE == expression.getIndex().accept(this)) { onModifier(new ArrayExpressionIndexModifier(expression)); } return Boolean.FALSE; }
@Override public Boolean visit(ArrayExpression expression) { if (Boolean.TRUE == expression.getBase().accept(this)) { onModifier(new ArrayExpressionBaseModifier(expression)); } if (Boolean.TRUE == expression.getIndex().accept(this)) { onModifier(new ArrayExpressionIndexModifier(expression)); } return Boolean.FALSE; }