kstaken 2003/02/05 20:50:45
Modified: java/src/org/apache/xindice/core/filer HashFiler.java Log: Fixing HashFiler. This isn't strictly useful right now, but is helpful for testing and evaluating the state of the BTree code. Revision Changes Path 1.9 +70 -15 xml-xindice/java/src/org/apache/xindice/core/filer/HashFiler.java Index: HashFiler.java =================================================================== RCS file: /home/cvs/xml-xindice/java/src/org/apache/xindice/core/filer/HashFiler.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- HashFiler.java 31 Oct 2002 06:59:57 -0000 1.8 +++ HashFiler.java 6 Feb 2003 04:50:45 -0000 1.9 @@ -103,7 +103,7 @@ private Configuration config; private HashFileHeader fileHeader; - private BTree btree; + //private BTree btree; public HashFiler() { super(); @@ -120,9 +120,9 @@ public void setLocation(File root, String location) { setFile(new File(root, location + ".tbl")); - btree = new BTree(new File(root, location + ".pkx")); + // btree = new BTree(new File(root, location + ".pkx")); } - + public String getName() { return "HashFiler"; } @@ -131,7 +131,7 @@ if ( super.open() ) { // These are the only properties that can be changed after creation fileHeader.setMaxKeySize(config.getShortAttribute(MAXKEYSIZE, fileHeader.getMaxKeySize())); - btree.open(); + // btree.open(); return true; } else @@ -142,7 +142,7 @@ fileHeader.setPageCount(config.getLongAttribute(PAGECOUNT, fileHeader.getPageCount())); fileHeader.setPageSize(config.getIntAttribute(PAGESIZE, fileHeader.getPageSize())); fileHeader.setMaxKeySize(config.getShortAttribute(MAXKEYSIZE, fileHeader.getMaxKeySize())); - btree.create(); + //btree.create(); return super.create(); } @@ -155,9 +155,11 @@ p = getPage(pageNum); ph = (HashPageHeader)p.getPageHeader(); if ( ph.getStatus() == RECORD - && ph.getKeyHash() == key.getHash() - && p.getKey().equals(key) ) + && ph.getKeyHash() == key.getHash() + && p.getKey().equals(key) ) { return p; + } + pageNum = ph.getNextCollision(); if ( pageNum == -1 ) return null; @@ -167,6 +169,7 @@ private Page seekInsertionPage(Key key) throws IOException { int hash = key.getHash(); long pageNum = hash % fileHeader.getPageCount(); +System.out.println("Hash page " + pageNum); Page p = null; HashPageHeader ph = null; while ( true ) { @@ -226,12 +229,16 @@ HashPageHeader ph = (HashPageHeader)p.getPageHeader(); long t = System.currentTimeMillis(); - if ( ph.getStatus() == UNUSED ) { + + // if ( ph.getStatus() == UNUSED ) { // This is a new Record fileHeader.incRecordCount(); - btree.addValue(key, p.getPageNum()); + + // btree.addValue(key, p.getPageNum()); + ph.setCreated(t); - } + + // } ph.setModified(t); ph.setStatus(RECORD); @@ -285,7 +292,7 @@ prev.write(); } - btree.removeValue(key); + //btree.removeValue(key); unlinkPages(page); fileHeader.decRecordCount(); @@ -317,10 +324,58 @@ } /** - * HashFilerRecordSet + * HashFilerRecordSet that does not use a BTree. */ + private class HashFilerRecordSet implements RecordSet { + private List keys = new ArrayList(); + private Iterator enum; - private class HashFilerRecordSet implements RecordSet, BTreeCallback { + public HashFilerRecordSet() { + try { + Page p = null; + HashPageHeader ph = null; + long pageNum = 0; + + while ( pageNum < fileHeader.getTotalCount() ) { + p = getPage(pageNum); + ph = (HashPageHeader)p.getPageHeader(); + if ( ph.getStatus() == RECORD ) { + keys.add(p.getKey()); + } + + pageNum++; + } + + enum = keys.iterator(); + } + catch ( Exception e ) { + if (log.isDebugEnabled()) { + log.debug("No message", e); + } + } + } + + public synchronized Key getNextKey() { + return (Key)enum.next(); + } + + public synchronized Record getNextRecord() throws DBException { + return readRecord((Key)enum.next()); + } + + public synchronized Value getNextValue() throws DBException { + return getNextRecord().getValue(); + } + + public synchronized boolean hasMoreRecords() { + return enum.hasNext(); + } + } + + /** + * HashFilerRecordSet + */ +/* private class HashFilerRecordSet implements RecordSet, BTreeCallback { private List keys = new ArrayList(); private Iterator enum; @@ -356,7 +411,7 @@ public synchronized boolean hasMoreRecords() { return enum.hasNext(); } - } + }*/ ////////////////////////////////////////////////////////////////////