}
}
private Sequence execute(DBBroker broker, XQuery xqueryService, Source querySource, XQueryContext innerContext, Sequence exprContext, boolean cache) throws XPathException {
CompiledXQuery compiled = null;
final XQueryPool pool = xqueryService.getXQueryPool();
try {
compiled = cache ? pool.borrowCompiledXQuery(broker, querySource) : null;
if(compiled == null) {
compiled = xqueryService.compile(innerContext, querySource);
} else {
compiled.getContext().updateContext(innerContext);
}
Sequence sequence = xqueryService.execute(compiled, exprContext, false);
ValueSequence newSeq = new ValueSequence();
newSeq.keepUnOrdered(unordered);
boolean hasSupplements = false;
for (int i = 0; i < sequence.getItemCount(); i++) {
//if (sequence.itemAt(i) instanceof StringValue) {
if (Type.subTypeOf(sequence.itemAt(i).getType(),Type.STRING)) {
newSeq.add(new StringValue(((StringValue) sequence.itemAt(i)).getStringValue(true)));
hasSupplements = true;
} else {
newSeq.add(sequence.itemAt(i));
}
}
if(hasSupplements) {
sequence = newSeq;
}
return sequence;
} catch(final IOException ioe) {
throw new XPathException(this, ioe);
} catch (final PermissionDeniedException e) {
throw new XPathException(this, e);
} finally {
if(compiled != null) {
if(cache) {
pool.returnCompiledXQuery(querySource, compiled);
} else {
compiled.reset();
}
}
}
}