You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2011/12/03 16:06:23 UTC

svn commit: r1209929 [2/2] - in /incubator/lcf/branches/CONNECTORS-286/warthog/src: main/java/org/apache/warthog/interfaces/ main/java/org/apache/warthog/tablestore/ test/java/org/apache/warthog/tests/

Modified: incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableColumnKey.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableColumnKey.java?rev=1209929&r1=1209928&r2=1209929&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableColumnKey.java (original)
+++ incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableColumnKey.java Sat Dec  3 15:06:22 2011
@@ -26,17 +26,14 @@ public class TableColumnKey implements W
 {
   protected long tableID;
   protected long rowID;
-  protected String columnName;
-    
-  protected long hashCodeValue;
+  protected long columnID;
   
   /** Constructor */
-  public TableColumnKey(long tableID, long rowID, String columnName)
+  public TableColumnKey(long tableID, long rowID, long columnID)
   {
     this.tableID = tableID;
     this.rowID = rowID;
-    this.columnName = columnName;
-    //hashCodeValue = calculateHashCode(tableID,rowID,columnName);
+    this.columnID = columnID;
   }
     
   public TableColumnKey(byte[] data)
@@ -44,30 +41,29 @@ public class TableColumnKey implements W
     BufferPointer bp = new BufferPointer(data);
     this.tableID = LongKey.readObject(bp);
     this.rowID = LongKey.readObject(bp);
-    this.columnName = StringKey.readObject(bp);
-    //hashCodeValue = calculateHashCode(tableID,rowID,columnName);
+    this.columnID = LongKey.readObject(bp);
   }
 
   public byte[] serializeObject()
   {
     byte[] rval = new byte[LongKey.sizeObject()+
-      LongKey.sizeObject() + StringKey.sizeObject(columnName)];
+      LongKey.sizeObject() + LongKey.sizeObject()];
     BufferPointer bp = new BufferPointer(rval);
     LongKey.writeObject(bp,tableID);
     LongKey.writeObject(bp,rowID);
-    StringKey.writeObject(bp,columnName);
+    LongKey.writeObject(bp,columnID);
     return rval;
   }
     
   public long getHashCode()
   {
-    return hashCodeValue;
+    return calculateHashCode(tableID,rowID,columnID);
   }
   
-  public static long calculateHashCode(long tableID, long rowID, String columnName)
+  public static long calculateHashCode(long tableID, long rowID, long columnID)
   {
     return LongKey.calculateHashCode(tableID) + LongKey.calculateHashCode(rowID)
-      + StringKey.calculateHashCode(columnName);
+      + LongKey.calculateHashCode(columnID);
   }
     
   public boolean isEquals(WHValue o)
@@ -75,14 +71,14 @@ public class TableColumnKey implements W
     TableColumnKey key = (TableColumnKey)o;
     return key.tableID == tableID &&
       key.rowID == rowID &&
-      key.columnName.equals(columnName);
+      key.columnID == columnID;
   }
   
   public int hashCode()
   {
     return ((int)((tableID << 5) ^ (tableID >>3))) +
       ((int)((rowID << 5) ^ (rowID >> 3))) +
-      columnName.hashCode();
+      ((int)((columnID << 5) ^ (columnID >> 3)));
   }
   
   public boolean equals(Object o)
@@ -92,7 +88,7 @@ public class TableColumnKey implements W
     TableColumnKey other = (TableColumnKey)o;
     return other.tableID == tableID &&
       other.rowID == rowID &&
-      other.columnName.equals(columnName);
+      other.columnID == columnID;
   }
   
 }

Modified: incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableStore.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableStore.java?rev=1209929&r1=1209928&r2=1209929&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableStore.java (original)
+++ incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableStore.java Sat Dec  3 15:06:22 2011
@@ -33,11 +33,11 @@ public class TableStore implements WHTab
   /** The current transaction, if any */
   protected WHTransaction currentTransaction = null;
   
-  /** Map of string to table object, good for the current transaction */
+  /** Map of tableID to table object, good for the current transaction */
   protected Map<LongValue,Table> tables = null;
-  /** Map of string to index object, good for the current transaction */
+  /** Map of tableID to index object, good for the current transaction */
   protected Map<LongValue,Index> indexes = null;
-  /** Map of table name to index set, good for the current transaction */
+  /** Map of table ID to index set, good for the current transaction */
   protected Map<LongValue,Index[]> indexesPerTable = null;
   
   /** Random number generator for this table store instance */
@@ -115,8 +115,13 @@ public class TableStore implements WHTab
       throw new WHException("Table already exists");
     LongValue tableIDValue = allocateNewGeneralID();
     setTableName(tableIDValue,name);
-    currentTransaction.put(new TableKey(tableIDValue.getValue()),new StringArray(columnNames));
-    Table t = new Table(this,tableIDValue,columnNames);
+    long[] columnIDs = new long[columnNames.length];
+    for (int i = 0 ; i < columnIDs.length ; i++)
+    {
+      columnIDs[i] = (long)i;
+    }
+    currentTransaction.put(new TableKey(tableIDValue.getValue()),new TableValue(columnNames,columnIDs,(long)columnNames.length));
+    Table t = new Table(this,tableIDValue,columnNames,columnIDs,(long)columnNames.length);
     tables.put(tableIDValue,t);
     currentTransaction.put(new TableIndexKey(tableIDValue.getValue()),new LongArray(new long[0]));
     currentTransaction.put(new TableRowIDFactoryKey(tableIDValue.getValue()),new LongValue(0L));
@@ -155,9 +160,14 @@ public class TableStore implements WHTab
     if (currentTransaction.get(new IndexLookupKey(name)) != null)
       throw new WHException("Index already exists");
     LongValue indexID = allocateNewGeneralID();
+    long[] columnIDs = new long[columnNames.length];
+    for (int i = 0 ; i < columnIDs.length ; i++)
+    {
+      columnIDs[i] = t.getColumnID(columnNames[i]);
+    }
     setIndexName(indexID,name);
-    currentTransaction.put(new IndexKey(indexID.getValue()),new IndexValue(t.getIDValue(),columnNames,comparatorClasses,unique));
-    Index i = new Index(this,indexID,t,columnNames,comparatorClasses,unique);
+    currentTransaction.put(new IndexKey(indexID.getValue()),new IndexValue(t.getIDValue(),columnIDs,comparatorClasses,unique));
+    Index i = new Index(this,indexID,t,columnIDs,comparatorClasses,unique);
     indexes.put(indexID,i);
     TableIndexKey tik = new TableIndexKey(t.getIDValue());
     LongArray tiv = (LongArray)currentTransaction.get(tik);
@@ -188,16 +198,6 @@ public class TableStore implements WHTab
     deleteIndex(i);
   }
   
-  /** Perform a query */
-  public WHRelationship performQuery(QueryDescription specification)
-    throws WHException
-  {
-    if (currentTransaction == null)
-      throw new WHException("Must be in a transaction");
-    // MHL
-    return null;
-  }
-
   // Non-interface public methods
   
   protected Map<LongValue,LongValue> startMap = new HashMap<LongValue,LongValue>();
@@ -303,7 +303,7 @@ public class TableStore implements WHTab
   
   /** Delete a table row from all the indexes that are based on a table.
   */
-  public void deleteIndexRow(LongValue tableID, LongValue rowID, Set<String> columns)
+  public void deleteIndexRow(LongValue tableID, LongValue rowID, Set<Long> columns)
     throws WHException
   {
     Index[] indexes = findIndexes(tableID);
@@ -316,7 +316,7 @@ public class TableStore implements WHTab
   
   /** Add a table row to all the indexes that are based on a table.
   */
-  public void addIndexRow(LongValue tableID, LongValue rowID, Set<String> columns)
+  public void addIndexRow(LongValue tableID, LongValue rowID, Set<Long> columns)
     throws WHException
   {
     Index[] indexes = findIndexes(tableID);
@@ -327,15 +327,15 @@ public class TableStore implements WHTab
     }
   }
 
-  protected boolean indexAffectedBy(Index index, Set<String> columns)
+  protected boolean indexAffectedBy(Index index, Set<Long> columns)
     throws WHException
   {
     if (columns == null)
       return true;
-    String[] indexColumns = index.getIndexColumns();
-    for (int i = 0 ; i < indexColumns.length ; i++)
+    long[] indexColumnIDs = index.getIndexColumnIDs();
+    for (int i = 0 ; i < indexColumnIDs.length ; i++)
     {
-      if (columns.contains(indexColumns[i]))
+      if (columns.contains(new Long(indexColumnIDs[i])))
         return true;
     }
     return false;
@@ -415,10 +415,10 @@ public class TableStore implements WHTab
     Table t = tables.get(tid);
     if (t != null)
       return t;
-    StringArray tv = (StringArray)currentTransaction.get(new TableKey(tid.getValue()));
+    TableValue tv = (TableValue)currentTransaction.get(new TableKey(tid.getValue()));
     if (tv == null)
       throw new WHConcurrencyException();
-    t = new Table(this,tid,tv.getValue());
+    t = new Table(this,tid,tv.getColumnNames(),tv.getColumnIdentifiers(),tv.getNextColumnIdentifier());
     tables.put(tid,t);
     return t;
   }
@@ -446,7 +446,7 @@ public class TableStore implements WHTab
     Table t = findTable(new LongValue(indexValue.getTableID()));
     if (t == null)
       throw new WHConcurrencyException();
-    i = new Index(this,indexID,t,indexValue.getColumnNames(),indexValue.getComparatorClassNames(),
+    i = new Index(this,indexID,t,indexValue.getColumnIDs(),indexValue.getComparatorClassNames(),
       indexValue.getUnique());
     indexes.put(indexID,i);
     return i;

Added: incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableValue.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableValue.java?rev=1209929&view=auto
==============================================================================
--- incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableValue.java (added)
+++ incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableValue.java Sat Dec  3 15:06:22 2011
@@ -0,0 +1,103 @@
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.apache.warthog.tablestore;
+
+import org.apache.warthog.interfaces.*;
+import org.apache.warthog.common.*;
+
+/** An index definition value */
+public class TableValue implements WHValue
+{
+  protected String[] columnNames;
+  protected long[] columnIdentifiers;
+  protected long nextColumnIdentifier;
+    
+  /** Constructor */
+  public TableValue(String[] columnNames, long[] columnIdentifiers, long nextColumnIdentifier)
+  {
+    this.columnNames = columnNames;
+    this.columnIdentifiers = columnIdentifiers;
+    this.nextColumnIdentifier = nextColumnIdentifier;
+  }
+    
+  public TableValue(byte[] data)
+  {
+    BufferPointer bp = new BufferPointer(data);
+    columnNames = StringArray.readObject(bp);
+    columnIdentifiers = LongArray.readObject(bp);
+    nextColumnIdentifier = LongValue.readObject(bp);
+  }
+    
+  public byte[] serializeObject()
+  {
+    byte[] rval = new byte[StringArray.sizeObject(columnNames)+
+      LongArray.sizeObject(columnIdentifiers.length)+
+      LongValue.sizeObject()
+      ];
+    BufferPointer bp = new BufferPointer(rval);
+    StringArray.writeObject(bp,columnNames);
+    LongArray.writeObject(bp,columnIdentifiers);
+    LongValue.writeObject(bp,nextColumnIdentifier);
+    return rval;
+  }
+
+  /** Check if equals (classes must already agree) */
+  public boolean isEquals(WHValue value)
+  {
+    TableValue other = (TableValue)value;
+    return StringArray.compareObject(other.columnNames,this.columnNames) &&
+      LongArray.compareObject(other.columnIdentifiers,this.columnIdentifiers) &&
+      other.nextColumnIdentifier == this.nextColumnIdentifier;
+  }
+  
+  public String[] getColumnNames()
+  {
+    return columnNames;
+  }
+
+  public long[] getColumnIdentifiers()
+  {
+    return columnIdentifiers;
+  }
+  
+  public long getNextColumnIdentifier()
+  {
+    return nextColumnIdentifier;
+  }
+  
+  public int hashCode()
+  {
+    int rval = 0;
+    for (int i = 0 ; i < columnNames.length ; i++)
+    {
+      rval += columnNames[i].hashCode();
+    }
+    return rval;
+  }
+  
+  public boolean equals(Object o)
+  {
+    if (this.getClass() != o.getClass())
+      return false;
+    TableValue other = (TableValue)o;
+    return StringArray.compareObject(other.columnNames,this.columnNames);
+  }
+  
+}

Propchange: incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableValue.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/branches/CONNECTORS-286/warthog/src/main/java/org/apache/warthog/tablestore/TableValue.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: incubator/lcf/branches/CONNECTORS-286/warthog/src/test/java/org/apache/warthog/tests/MultiThreadTest.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-286/warthog/src/test/java/org/apache/warthog/tests/MultiThreadTest.java?rev=1209929&r1=1209928&r2=1209929&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-286/warthog/src/test/java/org/apache/warthog/tests/MultiThreadTest.java (original)
+++ incubator/lcf/branches/CONNECTORS-286/warthog/src/test/java/org/apache/warthog/tests/MultiThreadTest.java Sat Dec  3 15:06:22 2011
@@ -382,9 +382,13 @@ public class MultiThreadTest
             WHIndex index = ts.lookupIndex("testindex1");
             WHAccessor accessor = index.buildAccessor(new IndexCriteria[]{
               new CriteriaBetween(new StringValue("1"),new StringValue("2")),
-              null});
-            while (accessor.hasNext())
-              accessor.getNext();
+              null},null);
+            while (true)
+            {
+              if (accessor.getCurrentRowID() == null)
+                break;
+              accessor.advance();
+            }
             ts.commitTransaction();
             break;
           }
@@ -408,9 +412,13 @@ public class MultiThreadTest
             WHIndex index = ts.lookupIndex("testindex2");
             WHAccessor accessor = index.buildAccessor(new IndexCriteria[]{
               new CriteriaBetween(new StringValue("23"),new StringValue("25")),
-              null});
-            while (accessor.hasNext())
-              accessor.getNext();
+              null},null);
+            while (true)
+            {
+              if (accessor.getCurrentRowID() == null)
+                break;
+              accessor.advance();
+            }
             ts.commitTransaction();
             break;
           }
@@ -434,9 +442,13 @@ public class MultiThreadTest
             WHIndex index = ts.lookupIndex("testindex3");
             WHAccessor accessor = index.buildAccessor(new IndexCriteria[]{
               new CriteriaBetween(new StringValue("02"),new StringValue("04")),
-              null});
-            while (accessor.hasNext())
-              accessor.getNext();
+              null},null);
+            while (true)
+            {
+              if (accessor.getCurrentRowID() == null)
+                break;
+              accessor.advance();
+            }
             ts.commitTransaction();
             break;
           }

Modified: incubator/lcf/branches/CONNECTORS-286/warthog/src/test/java/org/apache/warthog/tests/SanityTest.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-286/warthog/src/test/java/org/apache/warthog/tests/SanityTest.java?rev=1209929&r1=1209928&r2=1209929&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-286/warthog/src/test/java/org/apache/warthog/tests/SanityTest.java (original)
+++ incubator/lcf/branches/CONNECTORS-286/warthog/src/test/java/org/apache/warthog/tests/SanityTest.java Sat Dec  3 15:06:22 2011
@@ -53,10 +53,12 @@ public class SanityTest
     WHAccessor accessor = table.buildAccessor();
     boolean seen123 = false;
     boolean seen456 = false;
-    while (accessor.hasNext())
+    while (true)
     {
-      WHRowID rowID = accessor.getNext();
-      WHValue value = table.getValue(rowID,"colA");
+      WHRowID rowID = accessor.getCurrentRowID();
+      if (rowID == null)
+        break;
+      WHValue value = accessor.getValue("colA");
       assertNotNull(value);
       assertEquals(value.getClass().getName(),"org.apache.warthog.common.LongValue");
       LongValue lv = (LongValue)value;
@@ -66,6 +68,7 @@ public class SanityTest
         seen456 = true;
       else
         throw new Exception("Unexpected value: "+new Long(lv.getValue()).toString());
+      accessor.advance();
     }
     if (seen123 == false || seen456 == false)
       throw new Exception("Missing rows");
@@ -73,19 +76,22 @@ public class SanityTest
     
     ts.beginTransaction();
     table = ts.lookupTable("testtable");
-    table.updateRows(new String[]{"colC"},new WHValue[]{new StringValue("abcdefg")},table.buildAccessor(),null);
+    table.updateRows(new String[]{"colC"},new WHValue[]{new StringValue("abcdefg")},table.buildAccessor());
     ts.commitTransaction();
     
     ts.beginTransaction();
     table = ts.lookupTable("testtable");
     accessor = table.buildAccessor();
-    while (accessor.hasNext())
+    while (true)
     {
-      WHRowID rowID = accessor.getNext();
-      WHValue value = table.getValue(rowID,"colC");
+      WHRowID rowID = accessor.getCurrentRowID();
+      if (rowID == null)
+        break;
+      WHValue value = accessor.getValue("colC");
       assertNotNull(value);
       assertEquals("org.apache.warthog.common.StringValue",value.getClass().getName());
       assertEquals("abcdefg",((StringValue)value).getValue());
+      accessor.advance();
     }
     ts.abandonTransaction();
     
@@ -112,35 +118,31 @@ public class SanityTest
     ts.beginTransaction();
     WHIndex index = ts.lookupIndex("testindex");
     WHAccessor accessor = index.buildAccessor();
-    assertEquals(accessor.hasNext(),true);
-    WHRowID rowID = accessor.getNext();
-    assertNotNull(rowID);
-    WHValue value = index.getValue(rowID,"colA");
+    assertNotNull(accessor.getCurrentRowID());
+    WHValue value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(111L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(123L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(124L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(456L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
     
     // Now add a row while the index is set up to see if it appears
@@ -153,225 +155,202 @@ public class SanityTest
     ts.beginTransaction();
     index = ts.lookupIndex("testindex");
     accessor = index.buildAccessor();
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(111L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(123L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(124L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(333L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(456L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
     
     // Build a bunch of accessors and see if they do what we expect
     ts.beginTransaction();
     index = ts.lookupIndex("testindex");
-    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaEquals(new LongValue(124L))});
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaEquals(new LongValue(124L))},null);
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(124L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
 
     ts.beginTransaction();
     index = ts.lookupIndex("testindex");
-    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaEqualsOrBefore(new LongValue(124L))});
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaEqualsOrBefore(new LongValue(124L))},null);
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(111L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(123L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(124L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
 
     ts.beginTransaction();
     index = ts.lookupIndex("testindex");
-    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaEqualsOrAfter(new LongValue(124L))});
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaEqualsOrAfter(new LongValue(124L))},null);
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(124L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(333L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(456L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
 
     ts.beginTransaction();
     index = ts.lookupIndex("testindex");
-    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaBefore(new LongValue(124L))});
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaBefore(new LongValue(124L))},null);
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(111L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(123L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
 
     ts.beginTransaction();
     index = ts.lookupIndex("testindex");
-    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaAfter(new LongValue(124L))});
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaAfter(new LongValue(124L))},null);
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(333L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(456L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
     
     ts.beginTransaction();
     index = ts.lookupIndex("testindex");
-    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaEqualsMultiple(new WHValue[]{new LongValue(123L),new LongValue(333L)})});
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaEqualsMultiple(new WHValue[]{new LongValue(123L),new LongValue(333L)})},null);
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(123L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(333L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
 
     ts.beginTransaction();
     index = ts.lookupIndex("testindex");
-    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaBetween(new LongValue(123L),new LongValue(333L))});
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor = index.buildAccessor(new IndexCriteria[]{new CriteriaBetween(new LongValue(123L),new LongValue(333L))},null);
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(124L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
 
     // Delete a table row and see if it goes away from the index
     ts.beginTransaction();
     table = ts.lookupTable("testtable");
     index = ts.lookupIndex("testindex");
-    table.deleteRows(index.buildAccessor(new IndexCriteria[]{new CriteriaEquals(new LongValue(124L))}),null);
+    table.deleteRows(index.buildAccessor(new IndexCriteria[]{new CriteriaEquals(new LongValue(124L))},null));
     ts.commitTransaction();
 
     // Go through the iterator to see if it's gone
     ts.beginTransaction();
     index = ts.lookupIndex("testindex");
     accessor = index.buildAccessor();
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(111L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(123L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(333L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(456L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
 
     ts.beginTransaction();
@@ -401,50 +380,45 @@ public class SanityTest
     ts.beginTransaction();
     WHIndex index = ts.lookupIndex("testindex");
     WHAccessor accessor = index.buildAccessor();
-    assertEquals(accessor.hasNext(),true);
-    WHRowID rowID = accessor.getNext();
-    assertNotNull(rowID);
-    WHValue value = index.getValue(rowID,"colA");
+    assertNotNull(accessor.getCurrentRowID());
+    WHValue value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(124L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(456L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(111L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+    accessor.advance();
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(123L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
 
     ts.beginTransaction();
     index = ts.lookupIndex("testindex");
     accessor = index.buildAccessor(new IndexCriteria[]{
       new CriteriaEquals(new StringValue("hello")),
-      new CriteriaBefore(new LongValue(123L))});
-    assertEquals(accessor.hasNext(),true);
-    rowID = accessor.getNext();
-    assertNotNull(rowID);
-    value = index.getValue(rowID,"colA");
+      new CriteriaBefore(new LongValue(123L))},null);
+    assertNotNull(accessor.getCurrentRowID());
+    value = accessor.getValue("colA");
     assertNotNull(value);
     assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
     assertEquals(111L,((LongValue)value).getValue());
-    assertEquals(accessor.hasNext(),false);
+    accessor.advance();
+    assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
 
     ts.beginTransaction();