From: Wolfgang M. M. <wol...@us...> - 2004-11-22 22:27:25
|
Update of /cvsroot/exist/eXist-1.0/src/org/exist/dom In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11012/src/org/exist/dom Modified Files: AbstractNodeSet.java ElementImpl.java NodeImpl.java NodeSet.java DocumentImpl.java NodeProxy.java Log Message: Work on typed range indexes continued: many errors fixed; index also works with negative values now; added support for namespaces in index definitions; XUpdate working again. Index: AbstractNodeSet.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/dom/AbstractNodeSet.java,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** AbstractNodeSet.java 21 Nov 2004 17:15:05 -0000 1.35 --- AbstractNodeSet.java 22 Nov 2004 22:26:42 -0000 1.36 *************** *** 45,51 **** protected final static Logger LOG = Logger.getLogger(AbstractNodeSet.class); ! // indicates if the nodes in this set and their descendant nodes ! // have been fulltext indexed ! private int indexType = Type.ITEM; private boolean isCached = false; --- 45,53 ---- protected final static Logger LOG = Logger.getLogger(AbstractNodeSet.class); ! // indicates the type of an optional value index that may have ! // been defined on the nodes in this set. ! private int indexType = Type.ANY_TYPE; ! ! private boolean hasTextIndex = false; private boolean isCached = false; *************** *** 693,697 **** */ public int getIndexType() { ! if(indexType == Type.ITEM) { int type; NodeProxy p; --- 695,699 ---- */ public int getIndexType() { ! if(indexType == Type.ANY_TYPE) { int type; NodeProxy p; *************** *** 699,703 **** p = (NodeProxy) i.next(); type = p.getIndexType(); ! if(indexType == Type.ITEM) indexType = type; else if(indexType != type) { --- 701,705 ---- p = (NodeProxy) i.next(); type = p.getIndexType(); ! if(indexType == Type.ANY_TYPE) indexType = type; else if(indexType != type) { *************** *** 709,711 **** --- 711,727 ---- return indexType; } + + public boolean hasTextIndex() { + if(indexType == Type.ANY_TYPE) { + int type; + NodeProxy p; + for (Iterator i = iterator(); i.hasNext();) { + p = (NodeProxy) i.next(); + hasTextIndex = p.hasTextIndex(); + if(!hasTextIndex) + break; + } + } + return hasTextIndex; + } } Index: NodeImpl.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/dom/NodeImpl.java,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** NodeImpl.java 1 Sep 2004 17:41:30 -0000 1.29 --- NodeImpl.java 22 Nov 2004 22:26:43 -0000 1.30 *************** *** 310,317 **** public NodePath getPath() { NodePath path = new NodePath(); ! Node parent = getParentNode(); while (parent.getNodeType() != Node.DOCUMENT_NODE) { ! path.addComponent(parent.getNodeName()); ! parent = parent.getParentNode(); } return path; --- 310,317 ---- public NodePath getPath() { NodePath path = new NodePath(); ! NodeImpl parent = (NodeImpl)getParentNode(); while (parent.getNodeType() != Node.DOCUMENT_NODE) { ! path.addComponent(parent.getQName()); ! parent = (NodeImpl)parent.getParentNode(); } return path; Index: NodeProxy.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/dom/NodeProxy.java,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** NodeProxy.java 21 Nov 2004 17:15:05 -0000 1.42 --- NodeProxy.java 22 Nov 2004 22:26:43 -0000 1.43 *************** *** 25,28 **** --- 25,31 ---- import org.exist.memtree.DocumentBuilderReceiver; import org.exist.storage.DBBroker; + import org.exist.storage.IndexSpec; + import org.exist.storage.Indexable; + import org.exist.storage.ValueIndexSpec; import org.exist.storage.serializers.Serializer; import org.exist.storage.store.StorageAddress; *************** *** 322,330 **** public int getIndexType() { ! return StorageAddress.indexTypeFromPointer(internalAddress); } ! public boolean hasIndex() { ! return (internalAddress & 0x10000L) > 0; } --- 325,337 ---- public int getIndexType() { ! return ValueIndexSpec.indexTypeToXPath( ! StorageAddress.indexTypeFromPointer(internalAddress) ! ); } ! public boolean hasTextIndex() { ! return ValueIndexSpec.hasFulltextIndex( ! StorageAddress.indexTypeFromPointer(internalAddress) ! ); } Index: ElementImpl.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/dom/ElementImpl.java,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** ElementImpl.java 26 Sep 2004 15:12:55 -0000 1.50 --- ElementImpl.java 22 Nov 2004 22:26:42 -0000 1.51 *************** *** 412,416 **** elem.setChildCount(ch.getLength()); elem.setAttributes((short) (elem.getAttributesCount() + attribs.getLength())); ! lastPath.addComponent(elem.getNodeName()); // insert the node ownerDocument.broker.insertAfter(last, elem); --- 412,416 ---- elem.setChildCount(ch.getLength()); elem.setAttributes((short) (elem.getAttributesCount() + attribs.getLength())); ! lastPath.addComponent(elem.getQName()); // insert the node ownerDocument.broker.insertAfter(last, elem); *************** *** 1225,1229 **** } if (child.getNodeType() == Node.ELEMENT_NODE) ! path.addComponent(child.getNodeName()); removeAll(child, path); if (child.getNodeType() == Node.ELEMENT_NODE) --- 1225,1229 ---- } if (child.getNodeType() == Node.ELEMENT_NODE) ! path.addComponent(child.getQName()); removeAll(child, path); if (child.getNodeType() == Node.ELEMENT_NODE) *************** *** 1265,1269 **** newNode.gid = old.gid; ownerDocument.broker.insertAfter(previous, newNode); ! ownerDocument.broker.index(newNode); ownerDocument.broker.flush(); } --- 1265,1269 ---- newNode.gid = old.gid; ownerDocument.broker.insertAfter(previous, newNode); ! ownerDocument.broker.index(newNode, newNode.getPath()); ownerDocument.broker.flush(); } *************** *** 1303,1307 **** child = (NodeImpl) children.item(i); if (child.nodeType == Node.ELEMENT_NODE) { ! currentPath.addComponent(((ElementImpl) child).getNodeName()); removeAll(child, currentPath); currentPath.removeLastComponent(); --- 1303,1307 ---- child = (NodeImpl) children.item(i); if (child.nodeType == Node.ELEMENT_NODE) { ! currentPath.addComponent(((ElementImpl) child).getQName()); removeAll(child, currentPath); currentPath.removeLastComponent(); Index: DocumentImpl.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/dom/DocumentImpl.java,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** DocumentImpl.java 10 Nov 2004 22:30:59 -0000 1.59 --- DocumentImpl.java 22 Nov 2004 22:26:43 -0000 1.60 *************** *** 802,806 **** newNode.gid = old.gid; broker.insertAfter(previous, newNode); ! broker.index(newNode); broker.flush(); } else { --- 802,806 ---- newNode.gid = old.gid; broker.insertAfter(previous, newNode); ! broker.index(newNode, newNode.getPath()); broker.flush(); } else { Index: NodeSet.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/dom/NodeSet.java,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** NodeSet.java 21 Nov 2004 17:15:05 -0000 1.32 --- NodeSet.java 22 Nov 2004 22:26:43 -0000 1.33 *************** *** 292,295 **** --- 292,297 ---- public int getIndexType(); + public boolean hasTextIndex(); + /** * Return a sub-range of this node set containing the range of nodes greater than or including |