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();
}
- }
+ }*/
////////////////////////////////////////////////////////////////////