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/14 20:46:42 UTC

svn commit: r1081543 - in /cassandra/trunk/drivers/java: src/org/apache/cassandra/cql/jdbc/ test/org/apache/cassandra/cql/

Author: gdusbabek
Date: Mon Mar 14 19:46:42 2011
New Revision: 1081543

URL: http://svn.apache.org/viewvc?rev=1081543&view=rev
Log:
make RowMetaData typed

Modified:
    cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java
    cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/RowMetaData.java
    cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java
    cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.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=1081543&r1=1081542&r2=1081543&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 Mon Mar 14 19:46:42 2011
@@ -55,7 +55,7 @@ import org.apache.cassandra.thrift.CqlRo
 /**
  * The Class CassandraResultSet.
  */
-class CassandraResultSet implements ResultSet
+class CassandraResultSet<N, V> implements ResultSet
 {
     
     /** The r set. */
@@ -72,7 +72,7 @@ class CassandraResultSet implements Resu
     private byte[] curRowKey = null;
     
     /** The values. */
-    private List<TypedColumn> values = new ArrayList<TypedColumn>();
+    private List<TypedColumn<N, V>> values = new ArrayList<TypedColumn<N, V>>();
     
     /** The value map. */
     private Map<String, Object> valueMap = new WeakHashMap<String, Object>();
@@ -2000,13 +2000,18 @@ class CassandraResultSet implements Resu
         throw new UnsupportedOperationException("method not supported");
     }
 
-    private class CassandraRowMetaData implements RowMetaData
+    private class CassandraRowMetaData<N, V> implements RowMetaData<N, V>
     {
-        private final List<TypedColumn> cols;
+        private final List<TypedColumn<N, V>> cols;
         private final byte[] key;
+        private final Class colClass;
+        private final Class valClass;
         
         private CassandraRowMetaData(CassandraResultSet rs) {
-            cols = new ArrayList<TypedColumn>(rs.values);
+            cols = new ArrayList<TypedColumn<N, V>>(rs.values);
+            assert rs.values.size() > 0;
+            colClass = rs.values.get(0).getClass();
+            valClass = rs.values.get(0).getClass();
             key = curRowKey;
         }
 
@@ -2015,6 +2020,26 @@ class CassandraResultSet implements Resu
             return cols.size();
         }
 
+        public N getColumnName(int index)
+        {
+            return cols.get(index).getName();
+        }
+
+        public V getColumnValue(int index)
+        {
+            return cols.get(index).getValue();
+        }
+
+        public Class getColumnNameClass()
+        {
+            return colClass;
+        }
+
+        public Class getColumnValueClass()
+        {
+            return valClass;
+        }
+
         public TypedColumn getColumn(int index)
         {
             return cols.get(index);

Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/RowMetaData.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/RowMetaData.java?rev=1081543&r1=1081542&r2=1081543&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/RowMetaData.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/RowMetaData.java Mon Mar 14 19:46:42 2011
@@ -8,13 +8,20 @@ package org.apache.cassandra.cql.jdbc;
  * methods for both column names and values a la ResultSetMetaData.  If we did want that, I recommend an optional
  * method in AbstractType called getSqlType() or something like that.
  */
-public interface RowMetaData
+public interface RowMetaData<N, V>
 {
     /** number of columns in a row of data */
     public int getColumnCount();
     
-    /** column name and value */
-    public TypedColumn getColumn(int index);
+    /** get typed column name */
+    public N getColumnName(int index);
+    
+    /** get typed column value */
+    public V getColumnValue(int index);
+    
+    public Class<N> getColumnNameClass();
+    
+    public Class<V> getColumnValueClass();
     
     /** key */
     public byte[] getKey(); // todo: update when typed keys are available.

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=1081543&r1=1081542&r2=1081543&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 Mon Mar 14 19:46:42 2011
@@ -1,6 +1,6 @@
 package org.apache.cassandra.cql.jdbc;
 
-public class TypedColumn<N, V>
+class TypedColumn<N, V>
 {
     public final N name;
     public final V value;

Modified: cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java?rev=1081543&r1=1081542&r2=1081543&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java (original)
+++ cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java Mon Mar 14 19:46:42 2011
@@ -80,12 +80,12 @@ public class JdbcDriverTest extends Embe
         assert rs.next();
         assert rs.getInt("1") == 111;
         assert rs.getInt("2") == 222;
-        RowMetaData rd = rs.unwrap(RowMetaData.class);
+        RowMetaData<BigInteger, BigInteger> rd = rs.unwrap(RowMetaData.class);
         assert rd.getColumnCount() == 2;
-        assert rd.getColumn(0).getName().equals(new BigInteger("1"));
-        assert rd.getColumn(0).getValue().equals(new BigInteger("111"));
-        assert rd.getColumn(1).getName().equals(new BigInteger("2"));
-        assert rd.getColumn(1).getValue().equals(new BigInteger("222"));
+        assert rd.getColumnName(0).equals(new BigInteger("1"));
+        assert rd.getColumnValue(0).equals(new BigInteger("111"));
+        assert rd.getColumnName(1).equals(new BigInteger("2"));
+        assert rd.getColumnValue(1).equals(new BigInteger("222"));
     }
     
     @Test
@@ -97,16 +97,16 @@ public class JdbcDriverTest extends Embe
         assert rs.next();
         assert rs.getLong("1") == 111;
         assert rs.getLong("2") == 222;
-        RowMetaData rd = rs.unwrap(RowMetaData.class);
+        RowMetaData<Long, Long> rd = rs.unwrap(RowMetaData.class);
         assert rd.getColumnCount() == 2;
-        assert rd.getColumn(0).getName().equals(new Long("1"));
-        assert rd.getColumn(0).getValue().equals(new Long("111"));
-        assert rd.getColumn(1).getName().equals(new Long("2"));
-        assert rd.getColumn(1).getValue().equals(new Long("222"));
-        assert (Long)rd.getColumn(0).getName() == 1L;
-        assert (Long)rd.getColumn(0).getValue() == 111L;
-        assert (Long)rd.getColumn(1).getName() == 2L;
-        assert (Long)rd.getColumn(1).getValue() == 222L;
+        assert rd.getColumnName(0).equals(new Long("1"));
+        assert rd.getColumnValue(0).equals(new Long("111"));
+        assert rd.getColumnName(1).equals(new Long("2"));
+        assert rd.getColumnValue(1).equals(new Long("222"));
+        assert rd.getColumnName(0) == 1L;
+        assert rd.getColumnValue(0) == 111L;
+        assert rd.getColumnName(1) == 2L;
+        assert rd.getColumnValue(1) == 222L;
     }
     
     @Test
@@ -122,12 +122,12 @@ public class JdbcDriverTest extends Embe
             assert rs.next();
             assert rs.getString("a").equals("aa");
             assert rs.getString("b").equals("bb");
-            RowMetaData rd = rs.unwrap(RowMetaData.class);
+            RowMetaData<String, String> rd = rs.unwrap(RowMetaData.class);
             assert rd.getColumnCount() == 2;
-            assert rd.getColumn(0).getName().equals("a");
-            assert rd.getColumn(0).getValue().equals("aa");
-            assert rd.getColumn(1).getName().equals("b");
-            assert rd.getColumn(1).getValue().equals("bb");
+            assert rd.getColumnName(0).equals("a");
+            assert rd.getColumnValue(0).equals("aa");
+            assert rd.getColumnName(1).equals("b");
+            assert rd.getColumnValue(1).equals("bb");
         }
     }
     
@@ -154,11 +154,11 @@ public class JdbcDriverTest extends Embe
         assert Arrays.equals(bb, rs.getBytes(1));
         assert Arrays.equals(aa, rs.getBytes(FBUtilities.bytesToHex(a)));
         assert Arrays.equals(bb, rs.getBytes(FBUtilities.bytesToHex(b)));
-        RowMetaData rd = rs.unwrap(RowMetaData.class);
-        assert rd.getColumn(0).getName().equals(ByteBuffer.wrap(a));
-        assert rd.getColumn(1).getName().equals(ByteBuffer.wrap(b));
-        assert rd.getColumn(0).getValue().equals(ByteBuffer.wrap(aa));
-        assert rd.getColumn(1).getValue().equals(ByteBuffer.wrap(bb));
+        RowMetaData<ByteBuffer, ByteBuffer> rd = rs.unwrap(RowMetaData.class);
+        assert rd.getColumnName(0).equals(ByteBuffer.wrap(a));
+        assert rd.getColumnName(1).equals(ByteBuffer.wrap(b));
+        assert rd.getColumnValue(0).equals(ByteBuffer.wrap(aa));
+        assert rd.getColumnValue(1).equals(ByteBuffer.wrap(bb));
     }
     
     /** Method to test statement. */