/** * Create a new root variable based on the given path and suffix * * @param path base path * @param suffix suffix for variable name * @return path expression */ public static String createRootVariable(Path<?> path, int suffix) { String variable = path.accept(ToStringVisitor.DEFAULT, TEMPLATES).replace('.', '_'); return variable + "_" + suffix; }
/** * Create a new root variable based on the given path * * @param path * @return */ public static String createRootVariable(Path<?> path) { String variable = path.accept(ToStringVisitor.DEFAULT, TEMPLATES).replace('.', '_'); String suffix = UUID.randomUUID().toString().replace("-", "").substring(0, 5); return variable + "_" + suffix; }
private Path<?> normalizePath(Path<?> expr) { Context context = new Context(); Path<?> replaced = (Path<?>)expr.accept(CollectionAnyVisitor.DEFAULT, context); if (!replaced.equals(expr)) { for (int i = 0; i < context.paths.size(); i++) { Path path = context.paths.get(i).getMetadata().getParent(); Path replacement = context.replacements.get(i); this.innerJoin(path, replacement); } return replaced; } else { return expr; } }
@Override public Set<RelationalPath<?>> visit(Path<?> expr, Set<RelationalPath<?>> known) { if (expr.getMetadata().isRoot()) { if (expr instanceof RelationalPath) { known = add(known, (RelationalPath<?>)expr); } } else { known = expr.getMetadata().getParent().accept(this, known); } return known; }
@SuppressWarnings("unchecked") @Override public Expression<?> visit(Path<?> expr, Context context) { final PathType pathType = expr.getMetadata().getPathType(); if (pathType == PathType.LISTVALUE_CONSTANT || pathType == PathType.LISTVALUE) { final String variable = expr.accept(ToStringVisitor.DEFAULT, TEMPLATE).replace('.', '_'); final EntityPath<?> replacement = new EntityPathBase(expr.getType(), variable); context.add(expr, replacement); return replacement; } else if (expr.getMetadata().getParent() != null) { Context c = new Context(); final Path<?> parent = (Path<?>) expr.getMetadata().getParent().accept(this, c); if (c.replace) { context.add(c); return replaceParent(expr, parent); } } return expr; }
@Override public Expression<?> visit(Path<?> expr, @Nullable Void context) { if (expr.getMetadata().isRoot()) { return expr; } else { PathMetadata metadata = expr.getMetadata(); Path<?> parent = (Path)metadata.getParent().accept(this, null); Object element = metadata.getElement(); if (element instanceof Expression<?>) { element = ((Expression) element).accept(this, null); } if (parent.equals(metadata.getParent()) && Objects.equal(element, metadata.getElement())) { return expr; } else { metadata = new PathMetadata(parent, element, metadata.getPathType()); return new PathImpl(expr.getType(), metadata); } } }
@Override public Expression<?> visit(Path<?> expr, Context context) { if (expr.getMetadata().getPathType() == PathType.COLLECTION_ANY) { Path<?> parent = (Path<?>) expr.getMetadata().getParent().accept(this, context); expr = new PathImpl<Object>(expr.getType(), PathMetadataFactory.forCollectionAny(parent)); EntityPath<?> replacement = new EntityPathBase<Object>(expr.getType(), ExpressionUtils.createRootVariable(expr)); context.add(expr, replacement); return replacement; } else if (expr.getMetadata().getParent() != null) { Context c = new Context(); Path<?> parent = (Path<?>) expr.getMetadata().getParent().accept(this, c); if (c.replace) { context.add(c); return replaceParent(expr, parent); } } return expr; }
append("("); append("(").append(path.getType().getName()).append(")"); path.getMetadata().getParent().accept(this, context); append(")");
pathNode = rdfPath; } else if (i == predPath.size() - 1) { String var = path.accept(ToStringVisitor.DEFAULT, TEMPLATES); pathNode = var(var); varNames.disallow(var);