@Override public Expression get() { return target.getExpression(); }
@Override public Expression get() { return target.getExpression(); }
@Override public Expression visit(TreatExpression expression) { expression.getExpression().accept(this); return expression; }
@Override public void visit(TreatExpression expression) { Expression subExpression = expression.getExpression(); boolean beforeContained = expressions.contains(subExpression); subExpression.accept(this); if (expressions.contains(subExpression)) { // If the expression only got added for this TREAT expression, we replace it with the treat expression if (!beforeContained) { expressions.remove(subExpression); } expressions.add(expression); } }
@Override public Expression visit(TreatExpression expression) { expression.getExpression().accept(this); return expression; }
@Override public void visit(TreatExpression expression) { expression.getExpression().accept(this); }
@Override public Boolean visit(TreatExpression expression) { return expression.getExpression().accept(this); }
@Override public void visit(TreatExpression expression) { expression.getExpression().accept(this); }
@Override public Boolean visit(TreatExpression expression) { return expression.getExpression().accept(this); }
@Override public void visit(TreatExpression expression) { sb.append("TREAT("); expression.getExpression().accept(this); sb.append(" AS "); sb.append(expression.getType()); sb.append(')'); }
@Override public Expression visit(TreatExpression expression) { Expression newExpression = expression.getExpression().accept(this); if (newExpression != expression.getExpression()) { return new TreatExpression(newExpression, expression.getType()); } return expression; }
@Override public void visit(TreatExpression expression) { sb.append("TREAT("); expression.getExpression().accept(this); sb.append(" AS "); sb.append(expression.getType()); sb.append(')'); }
@Override public Expression visit(TreatExpression expression) { Expression newExpression = expression.getExpression().accept(this); if (newExpression != expression.getExpression()) { return new TreatExpression(newExpression, expression.getType()); } return expression; }
@Override public Expression visit(TreatExpression expression) { expression.setExpression(expression.getExpression().accept(this)); return expression; }
@Override public Expression visit(TreatExpression expression) { expression.setExpression(expression.getExpression().accept(this)); return expression; }
@Override public void visit(TreatExpression expression) { boolean handled = false; if (expression.getExpression() instanceof PathExpression) { PathExpression treatPath = (PathExpression) expression.getExpression(); if (treatPath.getExpressions().size() == 1 && skipBaseNodeAlias.equals(treatPath.getExpressions().get(0).toString())) { // When we encounter a naked root treat like "TREAT(alias AS Subtype)" we always skip it handled = true; } } if (!handled) { expression.getExpression().accept(this); } EntityType<?> type = metamodel.getEntity(expression.getType()); // TODO: should we check if the type is actually a sub- or super type? currentPosition.setCurrentType(type); currentPosition.setValueType(type); }
private boolean isExternal(TreatExpression treatExpression) { Expression expression = treatExpression.getExpression(); if (expression instanceof PathExpression) { PathExpression path = (PathExpression) expression; PathElementExpression firstElem = path.getExpressions().get(0); return isExternal(path, firstElem); } else if (expression instanceof FunctionExpression) { // Can only be key or value function PathExpression path = (PathExpression) ((FunctionExpression) expression).getExpressions().get(0); PathElementExpression firstElem = path.getExpressions().get(0); return isExternal(path, firstElem); } else { throw new IllegalArgumentException("Unexpected expression type[" + expression.getClass().getSimpleName() + "] in treat expression: " + treatExpression); } }
@Override public Boolean visit(TreatExpression expression) { if (Boolean.TRUE == expression.getExpression().accept(this)) { onModifier(new TreatExpressionModifier(expression)); } return Boolean.FALSE; }
@Override public Boolean visit(TreatExpression expression) { if (Boolean.TRUE == expression.getExpression().accept(this)) { onModifier(new TreatExpressionModifier(expression)); } return Boolean.FALSE; }
@Override public void visit(TreatExpression expression) { if (jpaProvider.supportsRootTreat()) { super.visit(expression); } else if (jpaProvider.supportsSubtypePropertyResolving()) { // NOTE: this might be wrong when having multiple same named properties expression.getExpression().accept(this); } else { throw new IllegalArgumentException("Can not render treat expression[" + expression.toString() + "] as the JPA provider does not support it!"); } }