From: Wolfgang M. M. <wol...@us...> - 2004-05-03 13:08:54
|
Update of /cvsroot/exist/eXist-1.0/src/org/exist/xquery In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19067/src/org/exist/xquery Modified Files: RootNode.java LocationStep.java EnclosedExpr.java Log Message: Implemented lazy evaluation for XQuery enclosed expressions. Index: LocationStep.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xquery/LocationStep.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** LocationStep.java 27 Apr 2004 15:46:58 -0000 1.4 --- LocationStep.java 3 May 2004 13:08:45 -0000 1.5 *************** *** 272,275 **** --- 272,282 ---- axis == Constants.DESCENDANT_SELF_AXIS, inPredicate); + // DocumentSet docs = contextSet.getDocumentSet(); + // NodeSelector selector = axis == Constants.DESCENDANT_SELF_AXIS ? + // new DescendantOrSelfSelector(contextSet, inPredicate) : + // new DescendantSelector(contextSet, inPredicate); + // NodeSet result = context.getBroker().findElementsByTagName( + // ElementValue.ELEMENT, docs, test.getName(), selector + // ); return result; } Index: EnclosedExpr.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xquery/EnclosedExpr.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** EnclosedExpr.java 27 Apr 2004 15:46:59 -0000 1.3 --- EnclosedExpr.java 3 May 2004 13:08:45 -0000 1.4 *************** *** 53,59 **** --- 53,61 ---- throws XPathException { long start = System.currentTimeMillis(); + // evaluate the expression context.pushDocumentContext(); Sequence result = super.eval(null, null); context.popDocumentContext(); + // create the output MemTreeBuilder builder = context.getDocumentBuilder(); Receiver receiver = new Receiver(builder); *************** *** 74,77 **** --- 76,81 ---- buf.append(next.getStringValue()); next = i.nextItem(); + // if item is a node, flush any collected character data and + // copy the node to the target doc. } else if (Type.subTypeOf(next.getType(), Type.NODE)) { if (buf != null && buf.length() > 0) { *************** *** 83,89 **** --- 87,95 ---- } } + // flush remaining character data if (buf != null && buf.length() > 0) receiver.characters(buf); } catch (SAXException e) { + LOG.warn("SAXException during serialization: " + e.getMessage(), e); throw new XPathException(getASTNode(), "Encountered SAX exception while serializing enclosed expression: " Index: RootNode.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xquery/RootNode.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** RootNode.java 29 Jan 2004 15:06:42 -0000 1.1 --- RootNode.java 3 May 2004 13:08:45 -0000 1.2 *************** *** 23,29 **** import java.util.Iterator; import org.exist.dom.DocumentImpl; import org.exist.dom.DocumentSet; - import org.exist.dom.ExtArrayNodeSet; import org.exist.dom.NodeProxy; import org.exist.dom.NodeSet; --- 23,29 ---- import java.util.Iterator; + import org.exist.dom.ArraySet; import org.exist.dom.DocumentImpl; import org.exist.dom.DocumentSet; import org.exist.dom.NodeProxy; import org.exist.dom.NodeSet; *************** *** 51,55 **** if(ds == null || ds.getLength() == 0) return Sequence.EMPTY_SEQUENCE; ! NodeSet result = new ExtArrayNodeSet(ds.getLength(), 1); for (Iterator i = ds.iterator(); i.hasNext();) { result.add(new NodeProxy((DocumentImpl) i.next(), -1)); --- 51,56 ---- if(ds == null || ds.getLength() == 0) return Sequence.EMPTY_SEQUENCE; ! //NodeSet result = new ExtArrayNodeSet(ds.getLength(), 1); ! NodeSet result = new ArraySet(ds.getLength()); for (Iterator i = ds.iterator(); i.hasNext();) { result.add(new NodeProxy((DocumentImpl) i.next(), -1)); |