protected AliasNode getOrCreateAlias(SearchContext ctx, String path, boolean setFetch) {
AliasNode foundNode = getAliasForPathIfItExists(ctx, path);
if (foundNode != null) {
if (setFetch)
setFetchOnAliasNodeAndAllAncestors(foundNode);
return foundNode;
} else {
String[] parts = splitPath(ctx, path);
int pos = parts[1].lastIndexOf('.');
String alias = "a" + (ctx.nextAliasNum++) + "_" + (pos == -1 ? parts[1] : parts[1].substring(pos + 1));
AliasNode node = new AliasNode(parts[1], alias);
getOrCreateAlias(ctx, parts[0], setFetch).addChild(node);
if (setFetch)
setFetchOnAliasNodeAndAllAncestors(node);
ctx.aliases.put(path, node);
return node;
}
}