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:39 UTC

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

Author: gdusbabek
Date: Thu Mar 17 15:13:39 2011
New Revision: 1082525

URL: http://svn.apache.org/viewvc?rev=1082525&view=rev
Log:
expose CassandraResultSetMetaData to inspect type information of column names and values

Modified:
    cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java
    cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java
    cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSetMetaData.java
    cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java

Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java?rev=1082525&r1=1082524&r2=1082525&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java Thu Mar 17 15:13:39 2011
@@ -50,7 +50,7 @@ import org.apache.thrift.transport.TTran
 /**
  * Implementation class for {@link Connection}.
  */
-public class CassandraConnection implements Connection
+class CassandraConnection implements Connection
 {
     
     /** The cassandra con. */

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=1082525&r1=1082524&r2=1082525&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:39 2011
@@ -2321,16 +2321,15 @@ class CassandraResultSet<N, V> implement
         // todo: once the kinks are worked out, allow unwrapping as CassandraResultSetMetaData.
         public <T> T unwrap(Class<T> iface) throws SQLException
         {
-//            if (iface.equals(CassandraResultSetMetaData.class))
-//                return (T)this;
-//            else
+            if (iface.equals(CassandraResultSetMetaData.class))
+                return (T)this;
+            else
                 throw new SQLFeatureNotSupportedException("No wrappers");
         }
 
         public boolean isWrapperFor(Class<?> iface) throws SQLException
         {
-//            return CassandraResultSetMetaData.class.isAssignableFrom(iface);
-            return false;
+            return CassandraResultSetMetaData.class.isAssignableFrom(iface);
         }
     }
 }

Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSetMetaData.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSetMetaData.java?rev=1082525&r1=1082524&r2=1082525&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSetMetaData.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSetMetaData.java Thu Mar 17 15:13:39 2011
@@ -6,7 +6,7 @@ import java.sql.SQLException;
  * ResultSetMetaData give lots of nice detailed type inforamtion about column values.
  * This interface aims to do the same thing but distinguishes column names and values.
  */
-interface CassandraResultSetMetaData
+public interface CassandraResultSetMetaData
 {
     /** exposes row key */
     public byte[] getKey();

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=1082525&r1=1082524&r2=1082525&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 Thu Mar 17 15:13:39 2011
@@ -35,6 +35,7 @@ import java.sql.Statement;
 import java.sql.Types;
 import java.util.Arrays;
 
+import org.apache.cassandra.cql.jdbc.CassandraResultSetMetaData;
 import org.apache.cassandra.db.marshal.AsciiType;
 import org.apache.cassandra.db.marshal.BytesType;
 import org.apache.cassandra.db.marshal.IntegerType;
@@ -91,6 +92,23 @@ public class JdbcDriverTest extends Embe
         assert md.isCaseSensitive(col) == caseSensitive;
     }
     
+    private static void expectedMetaData(CassandraResultSetMetaData md, int col,
+                                         String nameClass, int nameType, String nameTypeName, boolean nameSigned, boolean nameCaseSense,
+                                         String valuClass, int valuType, String valuTypeName, boolean valuSigned, boolean valuCaseSense) throws SQLException
+    {
+        assert nameClass.equals(md.getNameClassName(col));
+        assert nameType == md.getNameType(col);
+        assert nameTypeName.equals(md.getNameTypeName(col));
+        assert nameSigned == md.isNameSigned(col);
+        assert nameCaseSense == md.isNameCaseSensitive(col);
+        
+        assert valuClass.equals(md.getValueClassName(col));
+        assert valuType == md.getValueType(col);
+        assert valuTypeName.equals(md.getValueTypeName(col));
+        assert valuSigned == md.isValueSigned(col);
+        assert valuCaseSense == md.isValueCaseSensitive(col);
+    }
+    
     @Test 
     public void testIntegerMetadata() throws SQLException
     {
@@ -105,6 +123,14 @@ public class JdbcDriverTest extends Embe
         assert md.getColumnCount() == 2;
         expectedMetaData(md, 0, BigInteger.class.getName(), "JdbcInteger", "Keyspace1", "1", Types.BIGINT, IntegerType.class.getSimpleName(), true, false);
         expectedMetaData(md, 1, BigInteger.class.getName(), "JdbcInteger", "Keyspace1", "2", Types.BIGINT, IntegerType.class.getSimpleName(), true, false);
+
+        CassandraResultSetMetaData cmd = md.unwrap(CassandraResultSetMetaData.class);
+        for (int i = 0; i < md.getColumnCount(); i++)
+            expectedMetaData(
+                    cmd, i, 
+                    BigInteger.class.getName(), Types.BIGINT, IntegerType.class.getSimpleName(), true, false,
+                    BigInteger.class.getName(), Types.BIGINT, IntegerType.class.getSimpleName(), true, false);
+        
     }
     
     @Test
@@ -121,6 +147,13 @@ public class JdbcDriverTest extends Embe
         assert md.getColumnCount() == 2;
         expectedMetaData(md, 0, Long.class.getName(), "JdbcLong", "Keyspace1", "1", Types.BIGINT, LongType.class.getSimpleName(), true, false);
         expectedMetaData(md, 1, Long.class.getName(), "JdbcLong", "Keyspace1", "2", Types.BIGINT, LongType.class.getSimpleName(), true, false);
+        
+        CassandraResultSetMetaData cmd = md.unwrap(CassandraResultSetMetaData.class);
+        for (int i = 0; i < md.getColumnCount(); i++)
+            expectedMetaData(
+                    cmd, i,
+                    Long.class.getName(), Types.BIGINT, LongType.class.getSimpleName(), true, false,
+                    Long.class.getName(), Types.BIGINT, LongType.class.getSimpleName(), true, false);
     }
     
     @Test
@@ -146,6 +179,19 @@ public class JdbcDriverTest extends Embe
         assert md.getColumnCount() == 2;
         expectedMetaData(md, 0, String.class.getName(), "JdbcUtf8", "Keyspace1", "a", Types.VARCHAR, UTF8Type.class.getSimpleName(), false, true);
         expectedMetaData(md, 1, String.class.getName(), "JdbcUtf8", "Keyspace1", "b", Types.VARCHAR, UTF8Type.class.getSimpleName(), false, true);
+        
+        CassandraResultSetMetaData cmd0 = rs0.getMetaData().unwrap(CassandraResultSetMetaData.class);
+        CassandraResultSetMetaData cmd1 = rs1.getMetaData().unwrap(CassandraResultSetMetaData.class);
+        for (int i = 0; i < 2; i++)
+        {
+            expectedMetaData(cmd0, i,
+                    String.class.getName(), Types.VARCHAR, AsciiType.class.getSimpleName(), false, true,
+                    String.class.getName(), Types.VARCHAR, AsciiType.class.getSimpleName(), false, true);
+            expectedMetaData(cmd1, i,
+                    String.class.getName(), Types.VARCHAR, UTF8Type.class.getSimpleName(), false, true,
+                    String.class.getName(), Types.VARCHAR, UTF8Type.class.getSimpleName(), false, true);
+            
+        }
     }
     
     @Test
@@ -175,6 +221,12 @@ public class JdbcDriverTest extends Embe
         assert md.getColumnCount() == 2;
         expectedMetaData(md, 0, ByteBuffer.class.getName(), "JdbcBytes", "Keyspace1", FBUtilities.bytesToHex(a), Types.BINARY, BytesType.class.getSimpleName(), false, false);
         expectedMetaData(md, 1, ByteBuffer.class.getName(), "JdbcBytes", "Keyspace1", FBUtilities.bytesToHex(b), Types.BINARY, BytesType.class.getSimpleName(), false, false);
+        
+        CassandraResultSetMetaData cmd = md.unwrap(CassandraResultSetMetaData.class);
+        for (int i = 0; i < md.getColumnCount(); i++)
+            expectedMetaData(cmd, 0,
+                    ByteBuffer.class.getName(), Types.BINARY, BytesType.class.getSimpleName(), false, false,
+                    ByteBuffer.class.getName(), Types.BINARY, BytesType.class.getSimpleName(), false, false);
     }
     
     /** Method to test statement. */