@Override public void visit(ArrayExpression expression) { // Only need the base to navigate down the path expression.getBase().accept(this); }
@Override public void visit(PropertyExpression expression) { sb.append(expression.getProperty()); }
@Override public Expression visitSimple_path_element(JPQLSelectExpressionParser.Simple_path_elementContext ctx) { return new PropertyExpression(ctx.identifier().getText()); }
elementExpressionString = ((ArrayExpression) elementExpr).getBase().toString(); } else { elementExpressionString = elementExpr.toString(); if (isId(current.getNodeType(), elementExpr)) { elementExpr = new PropertyExpression(current.getAlias()); String joinRelationName = arrayExpr.getBase().toString();
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 int hashCode() { int hash = 3; hash = 61 * hash + (this.base != null ? this.base.hashCode() : 0); hash = 61 * hash + (this.index != null ? this.index.hashCode() : 0); return hash; }
@Override public ArrayExpression clone(boolean resolved) { return new ArrayExpression(base.clone(resolved), index.clone(resolved)); }
@Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final ArrayExpression other = (ArrayExpression) obj; if (this.base != other.base && (this.base == null || !this.base.equals(other.base))) { return false; } if (this.index != other.index && (this.index == null || !this.index.equals(other.index))) { return false; } return true; }
private boolean isExternal(PathExpression path, PathElementExpression firstElem) { String startAlias; if (firstElem instanceof ArrayExpression) { startAlias = ((ArrayExpression) firstElem).getBase().toString(); } else if (firstElem instanceof TreatExpression) { Expression treatedExpression = ((TreatExpression) firstElem).getExpression(); startAlias = ((ArrayExpression) treatedExpression).getBase().toString(); } else if (treatedExpression instanceof TreatExpression) { startAlias = ((TreatExpression) treatedExpression).getExpression().toString();
@Override public int hashCode() { int hash = 3; hash = 61 * hash + (this.base != null ? this.base.hashCode() : 0); hash = 61 * hash + (this.index != null ? this.index.hashCode() : 0); return hash; }
@Override public ArrayExpression clone(boolean resolved) { return new ArrayExpression(base.clone(resolved), index.clone(resolved)); }
@Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final ArrayExpression other = (ArrayExpression) obj; if (this.base != other.base && (this.base == null || !this.base.equals(other.base))) { return false; } if (this.index != other.index && (this.index == null || !this.index.equals(other.index))) { return false; } return true; }
@Override public void visit(ArrayExpression expression) { // Only need the base to navigate down the path expression.getBase().accept(this); }
@Override public void visit(PropertyExpression expression) { sb.append(expression.getProperty()); }
@Override public Expression visitSimple_path_element(JPQLSelectExpressionParser.Simple_path_elementContext ctx) { return new PropertyExpression(ctx.identifier().getText()); }
resultFields.add(arrayExpr.getBase().toString()); joinRelationAttributes = resultFields; resultFields = new ArrayList<>(); joinRelationName = StringUtils.join(".", joinRelationAttributes); } else { joinRelationName = arrayExpr.getBase().toString(); joinRelationAttributes = Arrays.asList(joinRelationName);
@Override public void visit(ArrayExpression expression) { expression.getBase().accept(this); sb.append('['); expression.getIndex().accept(this); sb.append(']'); }
private String getSimpleName(PathElementExpression element) { if (element == null) { return null; } else if (element instanceof ArrayExpression) { return ((ArrayExpression) element).getBase().getProperty(); } else { return element.toString(); } }
@Override public Expression createExpression(String field) { List<PathElementExpression> pathElements = new ArrayList<>(); if (qualificationExpression != null) { List<PathElementExpression> pathElementExpressions = new ArrayList<>(1); pathElementExpressions.add(new PropertyExpression(parent.getAlias())); PathExpression path = new PathExpression(pathElementExpressions); if ("KEY".equalsIgnoreCase(qualificationExpression)) { pathElements.add(new MapKeyExpression(path)); } else if ("INDEX".equalsIgnoreCase(qualificationExpression)) { pathElements.add(new ListIndexExpression(path)); } else if ("ENTRY".equalsIgnoreCase(qualificationExpression)) { pathElements.add(new MapEntryExpression(path)); } } else { pathElements.add(new PropertyExpression(aliasInfo.getAlias())); } if (field != null) { for (String fieldPart : field.split("\\.")) { pathElements.add(new PropertyExpression(fieldPart)); } } if (valuesTypeName != null) { return new FunctionExpression("FUNCTION", Arrays.asList( new StringLiteral("TREAT_" + valuesTypeName.toUpperCase()), new PathExpression(pathElements) )); } else { return new PathExpression(pathElements); } }
@Override public void visit(ArrayExpression expression) { expression.getBase().accept(this); sb.append('['); expression.getIndex().accept(this); sb.append(']'); }