incubator-connectors-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kwri...@apache.org
Subject svn commit: r1228611 - in /incubator/lcf/warthog/trunk/src: main/java/org/apache/warthog/api/ main/java/org/apache/warthog/common/ test/java/org/apache/warthog/tests/
Date Sat, 07 Jan 2012 13:15:48 GMT
Author: kwright
Date: Sat Jan  7 13:15:48 2012
New Revision: 1228611

URL: http://svn.apache.org/viewvc?rev=1228611&view=rev
Log:
Make some classes generic and move them back to the API, and revamp the tests to only work
through the API.

Added:
    incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/ColumnCount.java
      - copied, changed from r1228521, incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/ColumnCount.java
    incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/ColumnSumLong.java
      - copied, changed from r1228521, incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/ColumnSumLong.java
    incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/LongComparatorAscending.java
      - copied, changed from r1228521, incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/LongComparatorAscending.java
    incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/StringComparatorAscending.java
      - copied, changed from r1228521, incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/StringComparatorAscending.java
Removed:
    incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/ColumnCount.java
    incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/ColumnSumLong.java
    incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/LongComparatorAscending.java
    incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/StringComparatorAscending.java
Modified:
    incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/MultiThreadTest.java
    incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/PerformanceTest.java
    incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/SanityTest.java

Copied: incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/ColumnCount.java
(from r1228521, incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/ColumnCount.java)
URL: http://svn.apache.org/viewvc/incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/ColumnCount.java?p2=incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/ColumnCount.java&p1=incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/ColumnCount.java&r1=1228521&r2=1228611&rev=1228611&view=diff
==============================================================================
--- incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/ColumnCount.java (original)
+++ incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/ColumnCount.java Sat
Jan  7 13:15:48 2012
@@ -17,19 +17,19 @@
 * limitations under the License.
 */
 
-package org.apache.warthog.common;
-
-import org.apache.warthog.api.*;
+package org.apache.warthog.api;
 
 /** This class is used to count the rows found.
 */
 public class ColumnCount implements WHColumnDescription
 {
+  protected WHTableStore tableStore;
   protected String returnColumnName;
   
   /** Constructor */
-  public ColumnCount(String returnColumnName)
+  public ColumnCount(WHTableStore tableStore, String returnColumnName)
   {
+    this.tableStore = tableStore;
     this.returnColumnName = returnColumnName;
   }
   
@@ -45,15 +45,17 @@ public class ColumnCount implements WHCo
   public WHColumnCalculator createCalculator()
     throws WHException
   {
-    return new CountCalculator();
+    return new CountCalculator(tableStore);
   }
   
   protected static class CountCalculator implements WHColumnCalculator
   {
+    protected WHTableStore tableStore;
     protected long counter = 0L;
     
-    public CountCalculator()
+    public CountCalculator(WHTableStore tableStore)
     {
+      this.tableStore = tableStore;
     }
 
     /** Check whether a row can be added to to the column calculator.
@@ -90,7 +92,7 @@ public class ColumnCount implements WHCo
     public WHValue tally()
       throws WHException
     {
-      WHValue rval = new LongValue(counter);
+      WHValue rval = tableStore.make(counter);
       counter = 0L;
       return rval;
     }

Copied: incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/ColumnSumLong.java
(from r1228521, incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/ColumnSumLong.java)
URL: http://svn.apache.org/viewvc/incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/ColumnSumLong.java?p2=incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/ColumnSumLong.java&p1=incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/ColumnSumLong.java&r1=1228521&r2=1228611&rev=1228611&view=diff
==============================================================================
--- incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/ColumnSumLong.java
(original)
+++ incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/ColumnSumLong.java Sat
Jan  7 13:15:48 2012
@@ -17,21 +17,21 @@
 * limitations under the License.
 */
 
-package org.apache.warthog.common;
-
-import org.apache.warthog.api.*;
+package org.apache.warthog.api;
 
 /** This class is used to create a column which sums long values found in the specified
 * base column.
 */
 public class ColumnSumLong implements WHColumnDescription
 {
+  protected WHTableStore tableStore;
   protected String baseColumnName;
   protected String returnColumnName;
   
   /** Constructor */
-  public ColumnSumLong(String baseColumnName, String returnColumnName)
+  public ColumnSumLong(WHTableStore tableStore, String baseColumnName, String returnColumnName)
   {
+    this.tableStore = tableStore;
     this.baseColumnName = baseColumnName;
     this.returnColumnName = returnColumnName;
   }
@@ -48,17 +48,19 @@ public class ColumnSumLong implements WH
   public WHColumnCalculator createCalculator()
     throws WHException
   {
-    return new SumLongCalculator(baseColumnName);
+    return new SumLongCalculator(tableStore,baseColumnName);
   }
   
   protected static class SumLongCalculator implements WHColumnCalculator
   {
+    protected WHTableStore tableStore;
     protected String baseColumnName;
     
     protected long sum = 0L;
     
-    public SumLongCalculator(String baseColumnName)
+    public SumLongCalculator(WHTableStore tableStore, String baseColumnName)
     {
+      this.tableStore = tableStore;
       this.baseColumnName = baseColumnName;
     }
 
@@ -92,9 +94,7 @@ public class ColumnSumLong implements WH
       WHValue value = accessor.getValue(baseColumnName);
       if (value != null)
       {
-        if (!(value instanceof LongValue))
-          throw new WHException("ColumnSumLong can only be used with values of LongValue
type");
-        sum += ((LongValue)value).getValue();
+        sum += value.longValue();
       }
     }
     
@@ -104,7 +104,7 @@ public class ColumnSumLong implements WH
     public WHValue tally()
       throws WHException
     {
-      WHValue rval = new LongValue(sum);
+      WHValue rval = tableStore.make(sum);
       sum = 0L;
       return rval;
     }

Copied: incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/LongComparatorAscending.java
(from r1228521, incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/LongComparatorAscending.java)
URL: http://svn.apache.org/viewvc/incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/LongComparatorAscending.java?p2=incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/LongComparatorAscending.java&p1=incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/LongComparatorAscending.java&r1=1228521&r2=1228611&rev=1228611&view=diff
==============================================================================
--- incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/LongComparatorAscending.java
(original)
+++ incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/LongComparatorAscending.java
Sat Jan  7 13:15:48 2012
@@ -17,9 +17,7 @@
 * limitations under the License.
 */
 
-package org.apache.warthog.common;
-
-import org.apache.warthog.api.*;
+package org.apache.warthog.api;
 
 /** Class that compares long values, and sorts in ascending order.
 */
@@ -38,10 +36,8 @@ public class LongComparatorAscending imp
       return RESULT_LESS;
     if (rightValue == null)
       return RESULT_GREATER;
-    if (!(leftValue instanceof LongValue) || !(rightValue instanceof LongValue))
-      throw new WHException("Cannot compare anything other than LongValues here");
-    long leftLongValue = ((LongValue)leftValue).getValue();
-    long rightLongValue = ((LongValue)rightValue).getValue();
+    long leftLongValue = leftValue.longValue();
+    long rightLongValue = rightValue.longValue();
     if (leftLongValue == rightLongValue)
       return RESULT_EQUALS;
     return (leftLongValue < rightLongValue)?RESULT_GREATER:RESULT_LESS;

Copied: incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/StringComparatorAscending.java
(from r1228521, incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/StringComparatorAscending.java)
URL: http://svn.apache.org/viewvc/incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/StringComparatorAscending.java?p2=incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/StringComparatorAscending.java&p1=incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/StringComparatorAscending.java&r1=1228521&r2=1228611&rev=1228611&view=diff
==============================================================================
--- incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/common/StringComparatorAscending.java
(original)
+++ incubator/lcf/warthog/trunk/src/main/java/org/apache/warthog/api/StringComparatorAscending.java
Sat Jan  7 13:15:48 2012
@@ -17,9 +17,7 @@
 * limitations under the License.
 */
 
-package org.apache.warthog.common;
-
-import org.apache.warthog.api.*;
+package org.apache.warthog.api;
 
 /** Class that compares string values, and sorts in ascending order.
 */
@@ -38,10 +36,8 @@ public class StringComparatorAscending i
       return RESULT_LESS;
     if (rightValue == null)
       return RESULT_GREATER;
-    if (!(leftValue instanceof StringValue) || !(rightValue instanceof StringValue))
-      throw new WHException("Cannot compare anything other than StringValues here");
-    String leftStringValue = ((StringValue)leftValue).getValue();
-    String rightStringValue = ((StringValue)rightValue).getValue();
+    String leftStringValue = leftValue.stringValue();
+    String rightStringValue = rightValue.stringValue();
     int compare = leftStringValue.compareTo(rightStringValue);
     if (compare == 0)
       return RESULT_EQUALS;

Modified: incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/MultiThreadTest.java
URL: http://svn.apache.org/viewvc/incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/MultiThreadTest.java?rev=1228611&r1=1228610&r2=1228611&view=diff
==============================================================================
--- incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/MultiThreadTest.java
(original)
+++ incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/MultiThreadTest.java
Sat Jan  7 13:15:48 2012
@@ -22,7 +22,6 @@ import org.apache.warthog.api.*;
 import org.apache.warthog.transactionalkeyvaluestore.*;
 import org.apache.warthog.keyvaluetablestore.*;
 import org.apache.warthog.keyvalue.*;
-import org.apache.warthog.common.*;
 import org.junit.*;
 import static org.junit.Assert.*;
 import java.util.*;
@@ -112,24 +111,24 @@ public class MultiThreadTest
     WHTable table = ts.lookupTable("testtable");
     ts.createIndex("testindex1",table,
       new String[]{"colB","colA"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex2",table,
       new String[]{"colD","colC"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex3",table,
       new String[]{"colF","colE"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex4",table,
       new String[]{"colH","colG"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex5",table,
       new String[]{"colJ","colI"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.commitTransaction();
 
     InsertThread[] threads = new InsertThread[threadCount];
@@ -189,24 +188,24 @@ public class MultiThreadTest
     WHTable table = ts.lookupTable("testtable");
     ts.createIndex("testindex1",table,
       new String[]{"colB","colA"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex2",table,
       new String[]{"colD","colC"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex3",table,
       new String[]{"colF","colE"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex4",table,
       new String[]{"colH","colG"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex5",table,
       new String[]{"colJ","colI"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.commitTransaction();
 
     TaskThread[] threads = new TaskThread[threadCount];

Modified: incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/PerformanceTest.java
URL: http://svn.apache.org/viewvc/incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/PerformanceTest.java?rev=1228611&r1=1228610&r2=1228611&view=diff
==============================================================================
--- incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/PerformanceTest.java
(original)
+++ incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/PerformanceTest.java
Sat Jan  7 13:15:48 2012
@@ -22,7 +22,6 @@ import org.apache.warthog.api.*;
 import org.apache.warthog.transactionalkeyvaluestore.*;
 import org.apache.warthog.keyvaluetablestore.*;
 import org.apache.warthog.keyvalue.*;
-import org.apache.warthog.common.*;
 import org.junit.*;
 import static org.junit.Assert.*;
 import java.util.*;
@@ -44,24 +43,24 @@ public class PerformanceTest
     WHTable table = ts.lookupTable("testtable");
     ts.createIndex("testindex1",table,
       new String[]{"colB","colA"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex2",table,
       new String[]{"colD","colC"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex3",table,
       new String[]{"colF","colE"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex4",table,
       new String[]{"colH","colG"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.createIndex("testindex5",table,
       new String[]{"colJ","colI"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},false);
     ts.commitTransaction();
 
     int rowCount = 10000;

Modified: incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/SanityTest.java
URL: http://svn.apache.org/viewvc/incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/SanityTest.java?rev=1228611&r1=1228610&r2=1228611&view=diff
==============================================================================
--- incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/SanityTest.java (original)
+++ incubator/lcf/warthog/trunk/src/test/java/org/apache/warthog/tests/SanityTest.java Sat
Jan  7 13:15:48 2012
@@ -22,7 +22,6 @@ import org.apache.warthog.api.*;
 import org.apache.warthog.transactionalkeyvaluestore.*;
 import org.apache.warthog.keyvaluetablestore.*;
 import org.apache.warthog.keyvalue.*;
-import org.apache.warthog.common.*;
 import org.junit.*;
 import static org.junit.Assert.*;
 import java.util.*;
@@ -47,7 +46,7 @@ public class SanityTest
     
     ts.beginTransaction(true);
     table = ts.lookupTable("testtable");
-    table.insertRow(new String[]{"colA","colC","colB"},new WHValue[]{ts.make(456L),ts.make("goodbye"),new
BooleanValue(true)});
+    table.insertRow(new String[]{"colA","colC","colB"},new WHValue[]{ts.make(456L),ts.make("goodbye"),ts.make(true)});
     ts.commitTransaction();
 
     ts.beginTransaction(true);
@@ -62,14 +61,12 @@ public class SanityTest
         break;
       WHValue value = accessor.getValue("colA");
       assertNotNull(value);
-      assertEquals(value.getClass().getName(),"org.apache.warthog.common.LongValue");
-      LongValue lv = (LongValue)value;
-      if (lv.getValue() == 123L)
+      if (value.longValue() == 123L)
         seen123 = true;
-      else if (lv.getValue() == 456L)
+      else if (value.longValue() == 456L)
         seen456 = true;
       else
-        throw new Exception("Unexpected value: "+new Long(lv.getValue()).toString());
+        throw new Exception("Unexpected value: "+new Long(value.longValue()).toString());
       accessor.advance();
     }
     if (seen123 == false || seen456 == false)
@@ -91,8 +88,8 @@ public class SanityTest
         break;
       WHValue value = accessor.getValue("colC");
       assertNotNull(value);
-      assertEquals("org.apache.warthog.common.StringValue",value.getClass().getName());
-      assertEquals("abcdefg",((StringValue)value).getValue());
+  
+      assertEquals("abcdefg",value.stringValue());
       accessor.advance();
     }
     ts.abandonTransaction();
@@ -113,7 +110,7 @@ public class SanityTest
     // Now build a one-column unique index on colA
     ts.beginTransaction(true);
     WHTable table = ts.lookupTable("testtable");
-    ts.createIndex("testindex",table,new String[]{"colA"},new String[]{"org.apache.warthog.common.LongComparatorAscending"},true);
+    ts.createIndex("testindex",table,new String[]{"colA"},new String[]{"org.apache.warthog.api.LongComparatorAscending"},true);
     ts.commitTransaction();
     
     // Read in index order
@@ -123,26 +120,26 @@ public class SanityTest
     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(111L,value.longValue());
     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(123L,value.longValue());
     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(124L,value.longValue());
     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(456L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -160,32 +157,32 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(111L,((LongValue)value).getValue());
+
+    assertEquals(111L,value.longValue());
     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(123L,value.longValue());
     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(124L,value.longValue());
     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(333L,value.longValue());
     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(456L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -197,8 +194,8 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(124L,((LongValue)value).getValue());
+
+    assertEquals(124L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -210,20 +207,20 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(111L,((LongValue)value).getValue());
+
+    assertEquals(111L,value.longValue());
     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(123L,value.longValue());
     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(124L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -234,20 +231,20 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(124L,((LongValue)value).getValue());
+
+    assertEquals(124L,value.longValue());
     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(333L,value.longValue());
     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(456L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -258,14 +255,14 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(111L,((LongValue)value).getValue());
+
+    assertEquals(111L,value.longValue());
     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(123L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -276,14 +273,14 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(333L,((LongValue)value).getValue());
+
+    assertEquals(333L,value.longValue());
     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(456L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -294,14 +291,14 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(123L,((LongValue)value).getValue());
+
+    assertEquals(123L,value.longValue());
     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(333L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -312,8 +309,8 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(124L,((LongValue)value).getValue());
+
+    assertEquals(124L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -332,26 +329,26 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(111L,((LongValue)value).getValue());
+
+    assertEquals(111L,value.longValue());
     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(123L,value.longValue());
     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(333L,value.longValue());
     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(456L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -375,8 +372,8 @@ public class SanityTest
     WHTable table = ts.lookupTable("testtable");
     ts.createIndex("testindex",table,
       new String[]{"colB","colA"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending",
-        "org.apache.warthog.common.LongComparatorAscending"},true);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending",
+        "org.apache.warthog.api.LongComparatorAscending"},true);
     ts.commitTransaction();
     
     // Read in index order
@@ -386,26 +383,26 @@ public class SanityTest
     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(124L,value.longValue());
     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(456L,value.longValue());
     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(111L,value.longValue());
     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(123L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -418,8 +415,8 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(111L,((LongValue)value).getValue());
+
+    assertEquals(111L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -466,36 +463,36 @@ public class SanityTest
     table = ts.lookupTable("testtable");
     ts.createIndex("testindex",table,
       new String[]{"colB"},
-      new String[]{"org.apache.warthog.common.StringComparatorAscending"},false);
+      new String[]{"org.apache.warthog.api.StringComparatorAscending"},false);
     ts.commitTransaction();
 
     // Now use the index as a relationship (to provide ordering), and build an aggregate
relationship based on it
     ts.beginTransaction(true);
     WHIndex index = ts.lookupIndex("testindex");
     WHRelationship aggregateRelationship = new AggregateRelationship(index,new WHColumnDescription[]{
-      new ColumnSumLong("colA","sumA"),
+      new ColumnSumLong(ts,"colA","sumA"),
       new ColumnBreakOnChange("colB","uniqueB")});
     // Grab the accessor and verify it is correct
     WHAccessor accessor = aggregateRelationship.buildAccessor();
     assertNotNull(accessor.getCurrentRowID());
     WHValue value = accessor.getValue("sumA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(6L,((LongValue)value).getValue());
+
+    assertEquals(6L,value.longValue());
     value = accessor.getValue("uniqueB");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.StringValue",value.getClass().getName());
-    assertEquals("goodbye",((StringValue)value).getValue());
+
+    assertEquals("goodbye",value.stringValue());
     accessor.advance();
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("sumA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(4L,((LongValue)value).getValue());
+
+    assertEquals(4L,value.longValue());
     value = accessor.getValue("uniqueB");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.StringValue",value.getClass().getName());
-    assertEquals("hello",((StringValue)value).getValue());
+
+    assertEquals("hello",value.stringValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.commitTransaction();
@@ -504,29 +501,29 @@ public class SanityTest
     ts.beginTransaction(true);
     index = ts.lookupIndex("testindex");
     aggregateRelationship = new AggregateRelationship(index,new WHColumnDescription[]{
-      new ColumnCount("countA"),
+      new ColumnCount(ts,"countA"),
       new ColumnBreakOnChange("colB","uniqueB")});
     // Grab the accessor and verify it is correct
     accessor = aggregateRelationship.buildAccessor();
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("countA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(2L,((LongValue)value).getValue());
+
+    assertEquals(2L,value.longValue());
     value = accessor.getValue("uniqueB");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.StringValue",value.getClass().getName());
-    assertEquals("goodbye",((StringValue)value).getValue());
+
+    assertEquals("goodbye",value.stringValue());
     accessor.advance();
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("countA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(2L,((LongValue)value).getValue());
+
+    assertEquals(2L,value.longValue());
     value = accessor.getValue("uniqueB");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.StringValue",value.getClass().getName());
-    assertEquals("hello",((StringValue)value).getValue());
+
+    assertEquals("hello",value.stringValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.commitTransaction();
@@ -535,14 +532,14 @@ public class SanityTest
     ts.beginTransaction(true);
     table = ts.lookupTable("testtable");
     aggregateRelationship = new AggregateRelationship(table,new WHColumnDescription[]{
-      new ColumnCount("count")});
+      new ColumnCount(ts,"count")});
     // Grab the accessor and verify it is correct
     accessor = aggregateRelationship.buildAccessor();
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("count");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(4L,((LongValue)value).getValue());
+
+    assertEquals(4L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.commitTransaction();
@@ -558,12 +555,12 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("minA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(1L,((LongValue)value).getValue());
+
+    assertEquals(1L,value.longValue());
     value = accessor.getValue("maxA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(4L,((LongValue)value).getValue());
+
+    assertEquals(4L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.commitTransaction();
@@ -581,7 +578,7 @@ public class SanityTest
     // Now build a one-column unique index on colA
     ts.beginTransaction(true);
     WHTable table = ts.lookupTable("testtable");
-    ts.createIndex("testindex",table,new String[]{"colA"},new String[]{"org.apache.warthog.common.LongComparatorAscending"},true);
+    ts.createIndex("testindex",table,new String[]{"colA"},new String[]{"org.apache.warthog.api.LongComparatorAscending"},true);
     ts.commitTransaction();
 
     WHIndex index;
@@ -597,20 +594,20 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(111L,((LongValue)value).getValue());
+
+    assertEquals(111L,value.longValue());
     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(123L,value.longValue());
     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(124L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -623,14 +620,14 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(124L,((LongValue)value).getValue());
+
+    assertEquals(124L,value.longValue());
     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(456L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -643,14 +640,14 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(111L,((LongValue)value).getValue());
+
+    assertEquals(111L,value.longValue());
     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(123L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -662,8 +659,8 @@ public class SanityTest
     accessor = filterRelationship.buildAccessor();
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(456L,((LongValue)value).getValue());
+
+    assertEquals(456L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -676,8 +673,8 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(123L,((LongValue)value).getValue());
+
+    assertEquals(123L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -690,8 +687,8 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colA");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(124L,((LongValue)value).getValue());
+
+    assertEquals(124L,value.longValue());
     accessor.advance();
     assertNull(accessor.getCurrentRowID());
     ts.abandonTransaction();
@@ -761,13 +758,13 @@ public class SanityTest
     // Build indexes on both of these so we establish order for the test
     ts.beginTransaction(true);
     table = ts.lookupTable("testtable1");
-    ts.createIndex("testindex1",table,new String[]{"colC"},new String[]{"org.apache.warthog.common.LongComparatorAscending"},true);
+    ts.createIndex("testindex1",table,new String[]{"colC"},new String[]{"org.apache.warthog.api.LongComparatorAscending"},true);
     ts.commitTransaction();
 
     ts.beginTransaction(true);
     table = ts.lookupTable("testtable2");
-    ts.createIndex("testindex2",table,new String[]{"colA","colB"},new String[]{"org.apache.warthog.common.LongComparatorAscending",
-      "org.apache.warthog.common.StringComparatorAscending"},false);
+    ts.createIndex("testindex2",table,new String[]{"colA","colB"},new String[]{"org.apache.warthog.api.LongComparatorAscending",
+      "org.apache.warthog.api.StringComparatorAscending"},false);
     ts.commitTransaction();
 
     // Now, build the join and iterate over it.
@@ -794,56 +791,56 @@ public class SanityTest
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colC");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(123L,((LongValue)value).getValue());
+
+    assertEquals(123L,value.longValue());
     value = accessor.getValue("join-colB");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.StringValue",value.getClass().getName());
-    assertEquals("hello",((StringValue)value).getValue());
+
+    assertEquals("hello",value.stringValue());
     accessor.advance();
 
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colC");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(123L,((LongValue)value).getValue());
+
+    assertEquals(123L,value.longValue());
     value = accessor.getValue("join-colB");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.StringValue",value.getClass().getName());
-    assertEquals("world",((StringValue)value).getValue());
+
+    assertEquals("world",value.stringValue());
     accessor.advance();
 
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colC");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(124L,((LongValue)value).getValue());
+
+    assertEquals(124L,value.longValue());
     value = accessor.getValue("join-colB");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.StringValue",value.getClass().getName());
-    assertEquals("...",((StringValue)value).getValue());
+
+    assertEquals("...",value.stringValue());
     accessor.advance();
 
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colC");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(456L,((LongValue)value).getValue());
+
+    assertEquals(456L,value.longValue());
     value = accessor.getValue("join-colB");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.StringValue",value.getClass().getName());
-    assertEquals("goodbye",((StringValue)value).getValue());
+
+    assertEquals("goodbye",value.stringValue());
     accessor.advance();
 
     assertNotNull(accessor.getCurrentRowID());
     value = accessor.getValue("colC");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.LongValue",value.getClass().getName());
-    assertEquals(456L,((LongValue)value).getValue());
+
+    assertEquals(456L,value.longValue());
     value = accessor.getValue("join-colB");
     assertNotNull(value);
-    assertEquals("org.apache.warthog.common.StringValue",value.getClass().getName());
-    assertEquals("world",((StringValue)value).getValue());
+
+    assertEquals("world",value.stringValue());
     accessor.advance();
 
     assertNull(accessor.getCurrentRowID());



Mime
View raw message