} else {
assert (var instanceof BindingVariable || var instanceof PathVariable);
}
buf.append(" in ");
//indentln();
XQExpression inExpr = ((ForClause) cause).getInExpr();
inExpr.visit(this, ctxt);
//indent--;
break;
case Binding.LET_CLAUSE:
if(prev_type != type) {
buf.append("let $"); // fist appearence.
} else {
buf.append(" $");
}
buf.append(var.getName());
buf.append(" := ");
//indentln();
var.getValue().visit(this, ctxt);
//indent--;
break;
default:
throw new IllegalStateException();
}
prev_type = type;
}
XQExpression filteredRet = expr.getFilteredReturnExpr();
// where
if(filteredRet == null) {
XQExpression filter = expr.getWhereExpr();
if(filter != null) {
lineFeed();
buf.append("where ");
indentln();
filter.visit(this, ctxt);
indent--;
}
}
// order by
List orders = expr.getOrderSpecs();
for(int i = 0; i < orders.size(); i++) {
if(i == 0) {
lineFeed();
if(expr.isStableOrdering()) {
buf.append("stable ");
}
buf.append("order by");
} else {
buf.append(',');
}
indentln();
OrderSpec spec = (OrderSpec) orders.get(i);
spec.getKeyExpr().visit(this, ctxt);
indent--;
if(spec.isDescending()) {
buf.append(" descending");
}
if(spec.isEmptyGreatest()) {
buf.append(" empty greatest");
}
URI collation = spec.getCollation();
if(collation != null) {
buf.append(" collation ");
buf.append(collation.toString());
}
}
// return
lineFeed();
buf.append("return ");
indentln();
XQExpression ret = (filteredRet == null) ? expr.getReturnExpr() : filteredRet;
ret.visit(this, ctxt);
indent--;
return expr;
}