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

Reply via email to