@Override public void visit(TreatExpression expression) { sb.append("TREAT("); expression.getExpression().accept(this); sb.append(" AS "); sb.append(expression.getType()); sb.append(')'); }
@Override public void visit(TreatExpression expression) { sb.append("TREAT("); expression.getExpression().accept(this); sb.append(" AS "); sb.append(expression.getType()); sb.append(')'); }
@Override public void visit(TreatExpression expression) { EntityType<?> type = metamodel.getEntity(expression.getType()); currentPosition.setAttribute(null); currentPosition.setCurrentType(type); }
@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 newExpression = expression.getExpression().accept(this); if (newExpression != expression.getExpression()) { return new TreatExpression(newExpression, expression.getType()); } 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); }
@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); }
result = implicitJoin(null, pathExpression, null, null, new HashSet<String>(), 0, pathElements.size() - 1, false, true); current = result.baseNode; treatType = treatExpression.getType(); } else { throw new IllegalArgumentException("Unexpected expression type[" + expression.getClass().getSimpleName() + "] in treat expression: " + treatExpression);
treatEntityType = treatExpression.getType(); } else { throw new IllegalArgumentException("Unexpected expression type[" + expression.getClass().getSimpleName() + "] in treat expression: " + treatExpression); TreatExpression treatExpression = (TreatExpression) pathElements.get(0); if (treatExpression.getExpression() instanceof PathExpression && (aliasInfo = aliasManager.getAliasInfo(((PathExpression) treatExpression.getExpression()).getExpressions().get(0).toString())) != null) { correlationParent = ((JoinAliasInfo) aliasInfo).getJoinNode().getTreatedJoinNode(metamodel.entity(treatExpression.getType())); start = 1; } else {
if (treatExpression.getType().equals(ex.getTreatType())) { PathExpression pathExpressionToModify = (PathExpression) treatExpression.getExpression(); removeMatchingJoinAttributePathElements(ex, pathExpressionToModify); if (ex.getBaseNode().getTreatType() != null && ex.getBaseNode().getTreatType().getName().equals(treatExpression.getType()) && pathExpressionToModify.getExpressions().size() == 1 && ex.getBaseNode().getAlias().equals(pathExpressionToModify.getExpressions().get(0).toString())) {
implicitJoin(treatedPathExpression, joinAllowed, true, treatExpression.getType(), fromClause, joinType, currentlyResolvingAliases, fromSubquery, fromSelectAlias, true, false, fetch, false); JoinNode treatedJoinNode = (JoinNode) treatedPathExpression.getBaseNode(); if (treatedJoinNode.getTreatType() == null) { EntityType<?> treatType = metamodel.entity(treatExpression.getType()); current = treatedJoinNode.getTreatedJoinNode(treatType); } else {