You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by gd...@apache.org on 2011/03/17 16:13:59 UTC

svn commit: r1082528 - in /cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc: CassandraResultSet.java ColumnDecoder.java TypedColumn.java

Author: gdusbabek
Date: Thu Mar 17 15:13:59 2011
New Revision: 1082528

URL: http://svn.apache.org/viewvc?rev=1082528&view=rev
Log:
cache comparator and validator in the resultset

Modified:
    cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java
    cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java
    cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java

Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java?rev=1082528&r1=1082527&r2=1082528&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java Thu Mar 17 15:13:59 2011
@@ -63,7 +63,7 @@ import org.apache.cassandra.thrift.CqlRo
 /**
  * The Class CassandraResultSet.
  */
-class CassandraResultSet<N, V> implements ResultSet
+class CassandraResultSet implements ResultSet
 {
     
     /** The r set. */
@@ -80,12 +80,15 @@ class CassandraResultSet<N, V> implement
     private byte[] curRowKey = null;
     
     /** The values. */
-    private List<TypedColumn<N, V>> values = new ArrayList<TypedColumn<N, V>>();
+    private List<TypedColumn> values = new ArrayList<TypedColumn>();
     
     /** The value map. */
     private Map<String, Object> valueMap = new WeakHashMap<String, Object>();
     
     private final RsMetaData meta;
+    
+    private final AbstractType nameType;
+    private final AbstractType valueType;
 
     /**
      * Instantiates a new cassandra result set.
@@ -100,6 +103,8 @@ class CassandraResultSet<N, V> implement
         this.columnFamily = columnFamily;
         rSetIter = rSet.getRowsIterator();
         meta = new RsMetaData();
+        nameType = decoder.getComparator(keyspace, columnFamily, ColumnDecoder.Specifier.Comparator, null);
+        valueType = decoder.getComparator(keyspace, columnFamily, ColumnDecoder.Specifier.Validator, null);
     }
 
     /**
@@ -2023,28 +2028,28 @@ class CassandraResultSet<N, V> implement
         {
             column--;
             checkIndex(column);
-            if (values.get(column).getNameType() instanceof ColumnMetaData)
-                return ((ColumnMetaData)values.get(column).getNameType()).isCaseSensitive();
+            if (nameType instanceof ColumnMetaData)
+                return ((ColumnMetaData)nameType).isCaseSensitive();
             else 
-                return values.get(column).getNameType().getType().equals(String.class);
+                return nameType.getType().equals(String.class);
         }
         
         public boolean isValueCaseSensitive(int column) throws SQLException
         {
             column--;
             checkIndex(column);
-            if (values.get(column).getValueType() instanceof ColumnMetaData)
-                return ((ColumnMetaData)values.get(column).getValueType()).isCaseSensitive();
+            if (valueType instanceof ColumnMetaData)
+                return ((ColumnMetaData)valueType).isCaseSensitive();
             else 
-                return values.get(column).getValueType().getType().equals(String.class);
+                return valueType.getType().equals(String.class);
         }
 
         public boolean isNameCurrency(int column) throws SQLException
         {
             column--;
             checkIndex(column);
-            if (values.get(column).getNameType() instanceof ColumnMetaData)
-                return ((ColumnMetaData)values.get(column).getNameType()).isCurrency();
+            if (nameType instanceof ColumnMetaData)
+                return ((ColumnMetaData)nameType).isCurrency();
             else
                 return false;
         }
@@ -2053,8 +2058,8 @@ class CassandraResultSet<N, V> implement
         {
             column--;
             checkIndex(column);
-            if (values.get(column).getValueType() instanceof ColumnMetaData)
-                return ((ColumnMetaData)values.get(column).getValueType()).isCurrency();
+            if (valueType instanceof ColumnMetaData)
+                return ((ColumnMetaData)valueType).isCurrency();
             else
                 return false;
         }
@@ -2064,10 +2069,10 @@ class CassandraResultSet<N, V> implement
             column--;
             checkIndex(column);
             TypedColumn col = values.get(column);
-            if (col.getNameType() == IntegerType.instance || col.getNameType() == LongType.instance)
+            if (nameType == IntegerType.instance || nameType == LongType.instance)
                 return true;
-            else if (col.getNameType() instanceof ColumnMetaData) 
-                return ((ColumnMetaData)col.getNameType()).isSigned();
+            else if (nameType instanceof ColumnMetaData) 
+                return ((ColumnMetaData)nameType).isSigned();
             else
                 return false;
         }
@@ -2077,10 +2082,10 @@ class CassandraResultSet<N, V> implement
             column--;
             checkIndex(column);
             TypedColumn col = values.get(column);
-            if (col.getValueType() == IntegerType.instance || col.getValueType() == LongType.instance)
+            if (valueType == IntegerType.instance || valueType == LongType.instance)
                 return true;
-            else if (col.getValueType() instanceof ColumnMetaData) 
-                return ((ColumnMetaData)col.getValueType()).isSigned();
+            else if (valueType instanceof ColumnMetaData) 
+                return ((ColumnMetaData)valueType).isSigned();
             else
                 return false;
         }
@@ -2102,15 +2107,15 @@ class CassandraResultSet<N, V> implement
             column--;
             checkIndex(column);
             TypedColumn col = values.get(column);
-            if (col.getNameType() instanceof ColumnMetaData)
-                return ((ColumnMetaData)col.getNameType()).getPrecision();
-            else if (col.getNameType().getType().equals(String.class))
+            if (nameType instanceof ColumnMetaData)
+                return ((ColumnMetaData)nameType).getPrecision();
+            else if (nameType.getType().equals(String.class))
                 return col.getNameString().length();
-            else if (col.getNameType() == BytesType.instance)
+            else if (nameType == BytesType.instance)
                 return col.getNameString().length();
-            else if (col.getNameType().getType().equals(UUID.class))
+            else if (nameType.getType().equals(UUID.class))
                 return 36; // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
-            else if (col.getNameType() == LongType.instance)
+            else if (nameType == LongType.instance)
                 return 19; // number of digits in 2**63-1.
             else 
                 return 0;
@@ -2121,15 +2126,15 @@ class CassandraResultSet<N, V> implement
             column--;
             checkIndex(column);
             TypedColumn col = values.get(column);
-            if (col.getValueType() instanceof ColumnMetaData)
-                return ((ColumnMetaData)col.getValueType()).getPrecision();
-            else if (col.getValueType().getType().equals(String.class))
+            if (valueType instanceof ColumnMetaData)
+                return ((ColumnMetaData)valueType).getPrecision();
+            else if (valueType.getType().equals(String.class))
                 return col.getValueString().length();
-            else if (col.getValueType() == BytesType.instance)
+            else if (valueType == BytesType.instance)
                 return col.getValueString().length();
-            else if (col.getValueType().getType().equals(UUID.class))
+            else if (valueType.getType().equals(UUID.class))
                 return 36; // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
-            else if (col.getValueType() == LongType.instance)
+            else if (valueType == LongType.instance)
                 return 19; // number of digits in 2**63-1.
             else 
                 return 0;
@@ -2139,8 +2144,8 @@ class CassandraResultSet<N, V> implement
         {
             column--;
             checkIndex(column);
-            if (values.get(column).getValueType() instanceof ColumnMetaData)
-                return ((ColumnMetaData)values.get(column).getNameType()).getScale();
+            if (valueType instanceof ColumnMetaData)
+                return ((ColumnMetaData)nameType).getScale();
             else
                 return 0;
         }
@@ -2149,8 +2154,8 @@ class CassandraResultSet<N, V> implement
         {
             column--;
             checkIndex(column);
-            if (values.get(column).getValueType() instanceof ColumnMetaData)
-                return ((ColumnMetaData)values.get(column).getValueType()).getScale();
+            if (valueType instanceof ColumnMetaData)
+                return ((ColumnMetaData)valueType).getScale();
             else
                 return 0;
         }
@@ -2159,14 +2164,14 @@ class CassandraResultSet<N, V> implement
         {
             column--;
             checkIndex(column);
-            return getJdbcType(values.get(column).getNameType());
+            return getJdbcType(nameType);
         }
         
         public int getValueType(int column) throws SQLException
         {
             column--;
             checkIndex(column);
-            return getJdbcType(values.get(column).getValueType());
+            return getJdbcType(valueType);
         }
         
         private int getJdbcType(AbstractType type) throws SQLException
@@ -2192,28 +2197,28 @@ class CassandraResultSet<N, V> implement
         {
             column--;
             checkIndex(column);
-            return values.get(column).getNameType().getClass().getSimpleName();
+            return nameType.getClass().getSimpleName();
         }
         
         public String getValueTypeName(int column) throws SQLException
         {
             column--;
             checkIndex(column);
-            return values.get(column).getValueType().getClass().getSimpleName();
+            return valueType.getClass().getSimpleName();
         }
 
         public String getNameClassName(int column) throws SQLException
         {
             column--;
             checkIndex(column);
-            return values.get(column).getNameType().getType().getName();
+            return nameType.getType().getName();
         }
 
         public String getValueClassName(int column) throws SQLException
         {
             column--;
             checkIndex(column);
-            return values.get(column).getValueType().getType().getName();
+            return valueType.getType().getName();
         }
         
         //
@@ -2235,7 +2240,7 @@ class CassandraResultSet<N, V> implement
         {
             column--;
             checkIndex(column);
-            return values.get(column).getValueType() instanceof CounterColumnType; // todo: check Value is correct.
+            return valueType instanceof CounterColumnType; // todo: check Value is correct.
         }
 
         public boolean isCaseSensitive(int column) throws SQLException

Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java?rev=1082528&r1=1082527&r2=1082528&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java Thu Mar 17 15:13:59 2011
@@ -47,7 +47,7 @@ class ColumnDecoder 
      * @param def avoids additional map lookup if specified. null is ok though.
      * @return
      */
-    private AbstractType getComparator(String keyspace, String columnFamily, Specifier specifier, CfDef def) 
+    AbstractType getComparator(String keyspace, String columnFamily, Specifier specifier, CfDef def) 
     {
         // check cache first.
         String key = String.format(MapFormatString, keyspace, columnFamily, specifier.name());

Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java?rev=1082528&r1=1082527&r2=1082528&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java Thu Mar 17 15:13:59 2011
@@ -8,8 +8,9 @@ class TypedColumn<N, V>
 {
     private final N name;
     private final V value;
-    private final AbstractType<N> nameType;
-    private final AbstractType<V> valueType;
+    
+    // we cache the string versions of the byte buffers here.  It turns out that {N|V}.toString() isn't always the same
+    // (a good example is byte buffers) as the stringified versions supplied by the AbstractTypes.
     private final String nameString;
     private final String valueString;
     
@@ -19,8 +20,6 @@ class TypedColumn<N, V>
         ByteBuffer bbValue = ByteBuffer.wrap(value);
         this.name = comparator.compose(bbName);
         this.value = validator.compose(bbValue);
-        nameType = comparator;
-        valueType = validator;
         nameString = comparator.getString(bbName);
         valueString = validator.getString(bbValue);
     }
@@ -35,16 +34,6 @@ class TypedColumn<N, V>
         return value;
     }
     
-    public AbstractType<N> getNameType()
-    {
-        return nameType;
-    }
-    
-    public AbstractType<V> getValueType()
-    {
-        return valueType;
-    }
-    
     public String getNameString()
     {
         return nameString;