Author: gdusbabek
Date: Wed Mar  9 20:23:10 2011
New Revision: 1079975

URL: http://svn.apache.org/viewvc?rev=1079975&view=rev
Log:
implements getXXX methods to return values of the correct types. rearranges the 
JdbcDriverTest. renames SchemaDecoder. patch by gdusbabek, reviewed by eevans. 
CASSANDRA-2124

Added:
    
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/ColumnDecoder.java
      - copied, changed from r1079974, 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/SchemaDecoder.java
Removed:
    
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/SchemaDecoder.java
Modified:
    
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/Connection.java
    
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/Results.java
    
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/jdbc/CassandraResultSet.java
    
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/jdbc/CassandraStatement.java
    
cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/driver/jdbc/EmbeddedServiceBase.java
    
cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/driver/jdbc/JdbcDriverTest.java
    cassandra/trunk/test/conf/cassandra.yaml

Copied: 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/ColumnDecoder.java
 (from r1079974, 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/SchemaDecoder.java)
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/ColumnDecoder.java?p2=cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/ColumnDecoder.java&p1=cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/SchemaDecoder.java&r1=1079974&r2=1079975&rev=1079975&view=diff
==============================================================================
--- 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/SchemaDecoder.java
 (original)
+++ 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/ColumnDecoder.java
 Wed Mar  9 20:23:10 2011
@@ -11,6 +11,7 @@ import org.apache.cassandra.db.marshal.T
 import org.apache.cassandra.db.marshal.UTF8Type;
 import org.apache.cassandra.thrift.CfDef;
 import org.apache.cassandra.thrift.KsDef;
+import org.apache.cassandra.utils.ByteBufferUtil;
 import org.apache.cassandra.utils.FBUtilities;
 import org.apache.cassandra.utils.UUIDGen;
 import org.slf4j.Logger;
@@ -23,9 +24,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-public class SchemaDecoder 
+public class ColumnDecoder 
 {
-    private static final Logger logger = 
LoggerFactory.getLogger(SchemaDecoder.class);
+    private static final Logger logger = 
LoggerFactory.getLogger(ColumnDecoder.class);
     private static final String MapFormatString = "%s.%s.%s";
     
     enum Specifier
@@ -39,7 +40,7 @@ public class SchemaDecoder 
     // cache the comparators for efficiency.
     private Map<String, AbstractType> comparators = new HashMap<String, 
AbstractType>();
     
-    public SchemaDecoder(List<KsDef> defs)
+    public ColumnDecoder(List<KsDef> defs)
     {
         for (KsDef ks : defs) 
             for (CfDef cf : ks.getCf_defs())
@@ -99,6 +100,15 @@ public class SchemaDecoder 
         return comparator.getString(ByteBuffer.wrap(name));
     }
     
+    public static String colValueAsString(Object value) {
+        if (value instanceof String)
+            return (String)value;
+        else if (value instanceof byte[])
+            return ByteBufferUtil.bytesToHex(ByteBuffer.wrap((byte[])value));
+        else
+            return value.toString();
+    }
+    
     public Col makeCol(String keyspace, String columnFamily, byte[] name, 
byte[] value)
     {
         CfDef cfDef = cfDefs.get(String.format("%s.%s", keyspace, 
columnFamily));

Modified: 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/Connection.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/Connection.java?rev=1079975&r1=1079974&r2=1079975&view=diff
==============================================================================
--- 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/Connection.java
 (original)
+++ 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/Connection.java
 Wed Mar  9 20:23:10 2011
@@ -64,7 +64,7 @@ public class Connection
     // todo: encapsulate.
     public String curKeyspace;
     public String curColumnFamily;
-    public SchemaDecoder decoder;
+    public ColumnDecoder decoder;
     
     /**
      * Create a new <code>Connection</code> instance.
@@ -137,7 +137,7 @@ public class Connection
     throws InvalidRequestException, UnavailableException, TimedOutException, 
TException
     {
         if (decoder == null)
-            decoder = new SchemaDecoder(client.describe_keyspaces());
+            decoder = new ColumnDecoder(client.describe_keyspaces());
         
         Matcher isKeyspace = KeyspacePattern.matcher(queryStr);
         if (isKeyspace.matches())

Modified: 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/Results.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/Results.java?rev=1079975&r1=1079974&r2=1079975&view=diff
==============================================================================
--- 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/Results.java 
(original)
+++ 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/Results.java 
Wed Mar  9 20:23:10 2011
@@ -3,11 +3,11 @@ package org.apache.cassandra.cql.driver;
 
 public class Results
 {
-    private final SchemaDecoder decoder;
+    private final ColumnDecoder decoder;
     private final String keyspace;
     private final String columnFamily;
     
-    public Results(SchemaDecoder decoder, String keyspace, String 
columnFamily) 
+    public Results(ColumnDecoder decoder, String keyspace, String 
columnFamily) 
     {
         this.decoder = decoder;
         this.keyspace = keyspace;

Modified: 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/jdbc/CassandraResultSet.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/jdbc/CassandraResultSet.java?rev=1079975&r1=1079974&r2=1079975&view=diff
==============================================================================
--- 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/jdbc/CassandraResultSet.java
 (original)
+++ 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/jdbc/CassandraResultSet.java
 Wed Mar  9 20:23:10 2011
@@ -23,6 +23,7 @@ package org.apache.cassandra.cql.driver.
 import java.io.InputStream;
 import java.io.Reader;
 import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.net.URL;
 import java.sql.Array;
 import java.sql.Blob;
@@ -47,8 +48,7 @@ import java.util.Map;
 import java.util.WeakHashMap;
 
 import org.apache.cassandra.cql.driver.Col;
-import org.apache.cassandra.cql.driver.Results;
-import org.apache.cassandra.cql.driver.SchemaDecoder;
+import org.apache.cassandra.cql.driver.ColumnDecoder;
 import org.apache.cassandra.thrift.Column;
 import org.apache.cassandra.thrift.CqlResult;
 import org.apache.cassandra.thrift.CqlRow;
@@ -62,7 +62,7 @@ class CassandraResultSet implements Resu
     /** The r set. */
     private final CqlResult rSet; 
     
-    private final SchemaDecoder decoder;
+    private final ColumnDecoder decoder;
     private final String keyspace;
     private final String columnFamily;
     
@@ -83,7 +83,7 @@ class CassandraResultSet implements Resu
      *
      * @param resultSet the result set
      */
-    CassandraResultSet(CqlResult resultSet, SchemaDecoder decoder, String 
keyspace, String columnFamily)
+    CassandraResultSet(CqlResult resultSet, ColumnDecoder decoder, String 
keyspace, String columnFamily)
     {
         this.rSet = resultSet;
         this.decoder = decoder;
@@ -356,23 +356,24 @@ class CassandraResultSet implements Resu
     }
 
     /**
-     * @param arg0
+     * @param index
      * @return
      * @throws SQLException
      */
-    public byte[] getBytes(int arg0) throws SQLException
+    public byte[] getBytes(int index) throws SQLException
     {
-        throw new UnsupportedOperationException("method not supported");
+        return values.get(index) != null ? 
(byte[])values.get(index).getValue() : null;
     }
 
     /**
-     * @param arg0
+     * @param name
      * @return
      * @throws SQLException
      */
-    public byte[] getBytes(String arg0) throws SQLException
+    public byte[] getBytes(String name) throws SQLException
     {
-        throw new UnsupportedOperationException("method not supported");
+        String nameAsString = decoder.colNameAsString(keyspace, columnFamily, 
name);
+        return valueMap.get(nameAsString) != null ? 
(byte[])valueMap.get(nameAsString) : null;
     }
 
     /**
@@ -543,43 +544,45 @@ class CassandraResultSet implements Resu
     }
 
     /**
-     * @param arg0
+     * @param index
      * @return
      * @throws SQLException
      */
-    public int getInt(int arg0) throws SQLException
+    public int getInt(int index) throws SQLException
     {
-        throw new UnsupportedOperationException("method not supported");
+        return values.get(index) != null ? 
((BigInteger)values.get(index).getValue()).intValue() : null;
     }
 
     /**
-     * @param arg0
+     * @param name
      * @return
      * @throws SQLException
      */
-    public int getInt(String arg0) throws SQLException
+    public int getInt(String name) throws SQLException
     {
-        throw new UnsupportedOperationException("method not supported");
+        String nameAsString = decoder.colNameAsString(keyspace, columnFamily, 
name);
+        return valueMap.get(nameAsString) != null ? 
((BigInteger)valueMap.get(nameAsString)).intValue() : null;
     }
 
     /**
-     * @param arg0
+     * @param index
      * @return
      * @throws SQLException
      */
-    public long getLong(int arg0) throws SQLException
+    public long getLong(int index) throws SQLException
     {
-        throw new UnsupportedOperationException("method not supported");
+        return values.get(index) != null ? (Long)values.get(index).getValue() 
: null;
     }
 
     /**
-     * @param arg0
+     * @param name
      * @return
      * @throws SQLException
      */
-    public long getLong(String arg0) throws SQLException
+    public long getLong(String name) throws SQLException
     {
-        throw new UnsupportedOperationException("method not supported");
+        String nameAsString = decoder.colNameAsString(keyspace, columnFamily, 
name);
+        return valueMap.get(nameAsString) != null ? 
(Long)valueMap.get(nameAsString) : null;
     }
 
     /**
@@ -652,23 +655,24 @@ class CassandraResultSet implements Resu
     }
 
     /**
-     * @param arg0
+     * @param index
      * @return
      * @throws SQLException
      */
-    public Object getObject(int arg0) throws SQLException
+    public Object getObject(int index) throws SQLException
     {
-        throw new UnsupportedOperationException("method not supported");
+        return values.get(index) == null ? null : values.get(index).getValue();
     }
 
     /**
-     * @param arg0
+     * @param name
      * @return
      * @throws SQLException
      */
-    public Object getObject(String arg0) throws SQLException
+    public Object getObject(String name) throws SQLException
     {
-        throw new UnsupportedOperationException("method not supported");
+        String nameAsString = decoder.colNameAsString(keyspace, columnFamily, 
name);
+        return valueMap.get(nameAsString);
     }
 
     /**
@@ -798,7 +802,7 @@ class CassandraResultSet implements Resu
      */
     public String getString(int index) throws SQLException 
     {
-        return values.get(index) != null ? 
values.get(index).getValue().toString() : null;
+        return values.get(index) != null ? 
ColumnDecoder.colValueAsString(values.get(index).getValue()) : null;
     }
 
     /**
@@ -809,7 +813,7 @@ class CassandraResultSet implements Resu
     public String getString(String name) throws SQLException
     {
         String nameAsString = this.decoder.colNameAsString(this.keyspace, 
this.columnFamily, name);
-        return valueMap.get(nameAsString) != null ? 
valueMap.get(nameAsString).toString() : null;
+        return valueMap.get(nameAsString) != null ? 
ColumnDecoder.colValueAsString(valueMap.get(nameAsString)) : null;
     }
 
     /**

Modified: 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/jdbc/CassandraStatement.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/jdbc/CassandraStatement.java?rev=1079975&r1=1079974&r2=1079975&view=diff
==============================================================================
--- 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/jdbc/CassandraStatement.java
 (original)
+++ 
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/driver/jdbc/CassandraStatement.java
 Wed Mar  9 20:23:10 2011
@@ -171,11 +171,11 @@ class CassandraStatement implements Prep
         } 
         catch (InvalidRequestException e)
         {
-            throw new SQLException(e.getMessage());
+            throw new SQLException(e.getWhy());
         }
         catch (UnavailableException e)
         {
-            throw new SQLException(e.getMessage());
+            throw new SQLException("Cassandra was unavialable", e);
         }
         catch (TimedOutException e)
         {

Modified: 
cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/driver/jdbc/EmbeddedServiceBase.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/driver/jdbc/EmbeddedServiceBase.java?rev=1079975&r1=1079974&r2=1079975&view=diff
==============================================================================
--- 
cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/driver/jdbc/EmbeddedServiceBase.java
 (original)
+++ 
cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/driver/jdbc/EmbeddedServiceBase.java
 Wed Mar  9 20:23:10 2011
@@ -4,8 +4,6 @@ import java.io.IOException;
 import java.net.Socket;
 import java.net.UnknownHostException;
 
-import junit.framework.TestCase;
-
 import org.apache.cassandra.config.CFMetaData;
 import org.apache.cassandra.config.ConfigurationException;
 import org.apache.cassandra.config.DatabaseDescriptor;
@@ -15,7 +13,7 @@ import org.apache.cassandra.service.Embe
 /**
  * The abstract BaseClass.
  */
-public abstract class EmbeddedServiceBase extends TestCase
+public abstract class EmbeddedServiceBase
 {
 
     /** The embedded server cassandra. */
@@ -27,11 +25,10 @@ public abstract class EmbeddedServiceBas
      *
      * @throws Exception the exception
      */
-    protected void startCassandraServer() throws IOException, 
ConfigurationException
+    static void startCassandraServer() throws IOException, 
ConfigurationException
     {
         if (!checkIfServerRunning())
         {
-            System.setProperty("cassandra.config", "cassandra.yaml");
             loadData();
             cassandra = new EmbeddedCassandraService();
             cassandra.start();
@@ -44,7 +41,7 @@ public abstract class EmbeddedServiceBas
      *
      * @throws ConfigurationException the configuration exception
      */
-    private void loadData() throws ConfigurationException
+    static void loadData() throws ConfigurationException
     {
         for (KSMetaData table : DatabaseDescriptor.readTablesFromYaml())
         {
@@ -60,7 +57,7 @@ public abstract class EmbeddedServiceBas
      *
      * @return true, if successful
      */
-    private boolean checkIfServerRunning()
+    static boolean checkIfServerRunning()
     {
         try
         {

Modified: 
cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/driver/jdbc/JdbcDriverTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/driver/jdbc/JdbcDriverTest.java?rev=1079975&r1=1079974&r2=1079975&view=diff
==============================================================================
--- 
cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/driver/jdbc/JdbcDriverTest.java
 (original)
+++ 
cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/driver/jdbc/JdbcDriverTest.java
 Wed Mar  9 20:23:10 2011
@@ -20,7 +20,9 @@ package org.apache.cassandra.cql.driver.
  * 
  */
 
-import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.nio.FloatBuffer;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
@@ -28,7 +30,9 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 
-import org.apache.cassandra.config.ConfigurationException;
+import org.apache.cassandra.utils.FBUtilities;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 /**
@@ -36,134 +40,210 @@ import org.junit.Test;
  */
 public class JdbcDriverTest extends EmbeddedServiceBase
 {
-    private java.sql.Connection con = null;
+    private static java.sql.Connection con = null;
+    private static final String first = 
FBUtilities.bytesToHex("first".getBytes());
+    private static final String firstrec = 
FBUtilities.bytesToHex("firstrec".getBytes());
+    private static final String last = 
FBUtilities.bytesToHex("last".getBytes());
+    private static final String lastrec = 
FBUtilities.bytesToHex("lastrec".getBytes());
 
     /** SetUp */
-    @Override
-    protected void setUp()
+    @BeforeClass
+    public static void startServer() throws Exception
     {
-        try
-        {
-            startCassandraServer();
-            
Class.forName("org.apache.cassandra.cql.driver.jdbc.CassandraDriver");
-            con = 
DriverManager.getConnection("jdbc:cassandra:root/root@localhost:9170/Keyspace1");
-            final String updateQ = "UPDATE Standard1 SET \"first\" = 
\"firstrec\", \"last\" = \"lastrec\" WHERE KEY = \"jsmith\"";
-            executeNoResults(con, updateQ);
-        }
-        catch (ClassNotFoundException e)
-        {
-            fail(e.getMessage());
-        }
-        catch(IOException ioex)
-        {
-            fail(ioex.getMessage());
-        }
-        catch (SQLException e)
-        {
-            fail(e.getMessage());
-        } 
-        catch (ConfigurationException e)
-        {
-            fail(e.getMessage());
-        }
+        startCassandraServer();
+        Class.forName("org.apache.cassandra.cql.driver.jdbc.CassandraDriver");
+        con = 
DriverManager.getConnection("jdbc:cassandra:root/root@localhost:9170/Keyspace1");
+        String[] inserts = 
+        {
+//            String.format("UPDATE Standard1 SET \"%s\" = \"%s\", \"%s\" = 
\"%s\" WHERE KEY = \"jsmith\"", first, firstrec, last, lastrec),    
+            "UPDATE JdbcInteger SET 1 = 11, 2 = 22 WHERE KEY = \"jsmith\"",
+            "UPDATE JdbcInteger SET 3 = 33, 4 = 44 WHERE KEY = \"jsmith\"",
+            "UPDATE JdbcLong SET 1L = 11L, 2L = 22L WHERE KEY = \"jsmith\"",
+            "UPDATE JdbcAscii SET \"first\" = \"firstrec\", \"last\" = 
\"lastrec\" WHERE key = \"jsmith\"",
+//            String.format("UPDATE JdbcBytes SET \"%s\" = \"%s\", \"%s\" = 
\"%s\" WHERE key = \"jsmith\"", first, firstrec, last, lastrec),
+            "UPDATE JdbcUtf8 SET \"first\" = \"firstrec\", \"last\" = 
\"lastrec\" WHERE key = \"jsmith\"",
+        };
+        for (String q : inserts)
+            executeNoResults(con, q);
     }
-
+    
     /** Method to test statement. */
     @Test
-    public void testWithStatement()
+    public void testWithStatement() throws SQLException
     {
-        try
-        {
-            String selectQ = "SELECT \"first\", \"last\" FROM Standard1 WHERE 
KEY=\"jsmith\"";
-            Statement stmt = con.createStatement();
-            scrollResultset(stmt.executeQuery(selectQ), "first", "last");
-        }
-        catch (SQLException e)
-        {
-            fail(e.getMessage());
-        }
+        Statement stmt = con.createStatement();
+        
+//        String selectQ = String.format("SELECT \"%s\", \"%s\" FROM Standard1 
WHERE KEY=\"jsmith\"", first, last);
+//        checkResultSet(stmt.executeQuery(selectQ), "Bytes", 1, first, last);
+        
+        String selectQ = "SELECT 1, 2 FROM JdbcInteger WHERE KEY=\"jsmith\"";
+        checkResultSet(stmt.executeQuery(selectQ), "Int", 1, "1", "2");
+        
+        selectQ = "SELECT 3, 4 FROM JdbcInteger WHERE KEY=\"jsmith\"";
+        checkResultSet(stmt.executeQuery(selectQ), "Int", 1, "3", "4");
+        
+        selectQ = "SELECT 1, 2, 3, 4 FROM JdbcInteger WHERE KEY=\"jsmith\"";
+        checkResultSet(stmt.executeQuery(selectQ), "Int", 1, "1", "2", "3", 
"4");
+        
+        selectQ = "SELECT 1L, 2L FROM JdbcLong WHERE KEY=\"jsmith\"";
+        checkResultSet(stmt.executeQuery(selectQ), "Long", 1, "1", "2");
+        
+        selectQ = "SELECT \"first\", \"last\" FROM JdbcAscii WHERE 
KEY=\"jsmith\"";
+        checkResultSet(stmt.executeQuery(selectQ), "String", 1, "first", 
"last");
+        
+//        selectQ = String.format("SELECT \"%s\", \"%s\" FROM JdbcBytes WHERE 
KEY=\"jsmith\"", first, last);
+//        checkResultSet(stmt.executeQuery(selectQ), "Bytes", 1, first, last);
+        
+        selectQ = "SELECT \"first\", \"last\" FROM JdbcUtf8 WHERE 
KEY=\"jsmith\"";
+        checkResultSet(stmt.executeQuery(selectQ), "String", 1, "first", 
"last");
     }
 
    /** Method to test with prepared statement.*/
    @Test
-    public void testWithPreparedStatement()
-    {
-        try
-        {
-            final String selectQ = "SELECT \"first\", \"last\" FROM Standard1 
WHERE KEY=\"jsmith\"";
-            scrollResultset(executePreparedStatementWithResults(con, selectQ), 
"first", "last");
-        }
-        catch (SQLException e)
-        {
-            fail(e.getMessage());
-        }
-        tearDown();
-    }
-
-    /** Method to test with update statement.*/
-    @Test
-    public void testWithUpdateStatement()
+    public void testWithPreparedStatement() throws SQLException
     {
-        try
-        {
-            final String updateQ = "UPDATE Standard1 SET \"firstN\" = 
\"jdbc\", \"lastN\" = \"m\" WHERE KEY = \"jsmith\"";
-            executeNoResults(con, updateQ);
-            final String updateSelect = "SELECT \"firstN\", \"lastN\" FROM 
Standard1 WHERE KEY=\"jsmith\"";
-            scrollResultset(executePreparedStatementWithResults(con, 
updateSelect), "firstN", "lastN");
-        }
-        catch (SQLException e)
-        {
-            fail(e.getMessage());
-        }
+//        String selectQ = "SELECT \"first\", \"last\" FROM Standard1 WHERE 
KEY=\"jsmith\"";
+//        checkResultSet(executePreparedStatementWithResults(con, selectQ), 
"Bytes", 1, "first", "last");
+        
+        String selectQ = "SELECT 1, 2 FROM JdbcInteger WHERE KEY=\"jsmith\"";
+        checkResultSet(executePreparedStatementWithResults(con, selectQ), 
"Int", 1, "1", "2");
+        
+        selectQ = "SELECT 3, 4 FROM JdbcInteger WHERE KEY=\"jsmith\"";
+        checkResultSet(executePreparedStatementWithResults(con, selectQ), 
"Int", 1, "3", "4");
+        
+        selectQ = "SELECT 1, 2, 3, 4 FROM JdbcInteger WHERE KEY=\"jsmith\"";
+        checkResultSet(executePreparedStatementWithResults(con, selectQ), 
"Int", 1, "1", "2", "3", "4");
+        
+        selectQ = "SELECT 1L, 2L FROM JdbcLong WHERE KEY=\"jsmith\"";
+        checkResultSet(executePreparedStatementWithResults(con, selectQ), 
"Long", 1, "1", "2");
+        
+        selectQ = "SELECT \"first\", \"last\" FROM JdbcAscii WHERE 
KEY=\"jsmith\"";
+        checkResultSet(executePreparedStatementWithResults(con, selectQ), 
"String", 1, "first", "last");
+        
+//        selectQ = "SELECT \"first\", \"last\" FROM JdbcBytes WHERE 
KEY=\"jsmith\"";
+//        checkResultSet(executePreparedStatementWithResults(con, selectQ), 
"Bytes", 1, "first", "last");
+        
+        selectQ = "SELECT \"first\", \"last\" FROM JdbcUtf8 WHERE 
KEY=\"jsmith\"";
+        checkResultSet(executePreparedStatementWithResults(con, selectQ), 
"String", 1, "first", "last");
     }
 
     /* Method to test with Delete statement. */
     @Test
-    public void testWithDeleteStatement()
+    public void testWithDeleteStatement() throws SQLException
     {
-        try
-        {
-            // Delete
-            final String deleteQ = "DELETE \"firstN\", \"lastN\" FROM 
Standard1 WHERE KEY=\"jsmith\"";
-            executeNoResults(con, deleteQ);
-            String updateSelect = "SELECT \"firstN\", \"lastN\" FROM Standard1 
WHERE KEY=\"jsmith\"";
-            scrollResultset(executePreparedStatementWithResults(con, 
updateSelect), "firstN", "lastN");
-        } 
-        catch (SQLException e)
+        // the pattern: 0) a deltion, 1) ensure deletion 2) ensure deletion 
wasn't over-eager.
+        String[] statements = 
         {
-            fail(e.getMessage());
+//                "DELETE \"firstN\", \"lastN\" FROM Standard1 WHERE 
KEY=\"jsmith\"",
+//                "SELECT \"firstN\", \"lastN\" FROM Standard1 WHERE 
KEY=\"jsmith\"",
+//                "SELECT \"first\" FROM Standard1 WHERE KEY=\"jsmith\"",
+                
+                "DELETE 1, 3 FROM JdbcInteger WHERE KEY=\"jsmith\"",
+                "SELECT 1, 3 FROM JdbcInteger WHERE KEY=\"jsmith\"", // fails.
+                "SELECT 2, 4 FROM JdbcInteger WHERE KEY=\"jsmith\"",
+                
+                "DELETE 1L FROM JdbcLong WHERE KEY=\"jsmith\"",
+                "SELECT 1L FROM JdbcLong WHERE KEY=\"jsmith\"",
+                "SELECT 2L FROM JdbcLong WHERE KEY=\"jsmith\"",
+                
+                "DELETE \"first\" FROM JdbcAscii WHERE KEY=\"jsmith\"",
+                "SELECT \"first\" FROM JdbcAscii WHERE KEY=\"jsmith\"",
+                "SELECT \"last\" FROM JdbcAscii WHERE KEY=\"jsmith\"",
+                
+//                "DELETE \"first\" FROM JdbcBytes WHERE KEY=\"jsmith\"",
+//                "SELECT \"first\" FROM JdbcBytes WHERE KEY=\"jsmith\"",
+//                "SELECT \"last\" FROM JdbcBytes WHERE KEY=\"jsmith\"",
+                
+                "DELETE \"first\" FROM JdbcUtf8 WHERE KEY=\"jsmith\"",
+                "SELECT \"first\" FROM JdbcUtf8 WHERE KEY=\"jsmith\"",
+                "SELECT \"last\" FROM JdbcUtf8 WHERE KEY=\"jsmith\"",
+        };
+        
+        for (int i = 0; i < statements.length/3; i++) 
+        {
+            executeNoResults(con, statements[3*i]);
+            ResultSet rs = executePreparedStatementWithResults(con, 
statements[3*i+1]);
+            assert !rs.next() : statements[3*i+1];
+            rs.close();
+            rs = executePreparedStatementWithResults(con, statements[3*i+2]);
+            assert rs.next() : statements[3*i+2];
         }
     }
 
-    @Override
-    protected void tearDown()
+    @AfterClass
+    public static void stopServer() throws SQLException
     {
-        try
+        if (con != null)
         {
-            if (con != null)
+            String[] stmts = 
             {
-                final String updateQ = "TRUNCATE Standard1";
-                executeNoResults(con, updateQ);
-                con.close();
-                con = null;
+//                "TRUNCATE Standard1",
+//                "TRUNCATE JcbcAscii", // todo: this one is broken for some 
reason.
+                "TRUNCATE JdbcInteger",
+                "TRUNCATE JdbcLong",
+//                "TRUNCATE JdbcBytes",
+                "TRUNCATE JdbcUtf8",
+            };
+            for (String stmt : stmts)
+            {
+                try 
+                {
+                    executeNoResults(con, stmt);
+                }
+                catch (SQLException ex)
+                {
+                    throw new SQLException(stmt, ex);
+                }
             }
-        } 
-        catch (SQLException e)
-        {
-            fail(e.getMessage());
+            con.close();
+            con = null;
         }
     }
-
+    
+    // todo: check expected values as well.
     /** iterates over a result set checking columns */
-    private static void scrollResultset(final ResultSet rSet, final String... 
columnNames) throws SQLException
+    private static void checkResultSet(ResultSet rs, String accessor, int 
expectedRows, String... cols) throws SQLException
     {
-        assertNotNull(rSet);
-        while (rSet.next())
+        int actualRows = 0;
+        assert rs != null;
+        while (rs.next())
         {
-            assertNotNull(rSet.getString(0));
-            for (String colName : columnNames)
-                assertNotNull(rSet.getString(colName));
+            actualRows++;
+            for (int c = 0; c < cols.length; c++)
+            {
+                // getString and getObject should always work.
+                assert rs.getString(cols[c]) != null;
+                assert rs.getString(c) != null;
+                assert rs.getObject(cols[c]) != null;
+                assert rs.getObject(c) != null;
+                
+                // now call the accessor.
+                try
+                {
+                    Method byInt = rs.getClass().getDeclaredMethod("get" + 
accessor, int.class);
+                    byInt.setAccessible(true);
+                    assert byInt.invoke(rs, c) != null;
+                    
+                    Method byString = rs.getClass().getDeclaredMethod("get" + 
accessor, String.class);
+                    byString.setAccessible(true);
+                    assert byString.invoke(rs, cols[c]) != null;
+                }
+                catch (NoSuchMethodException ex)
+                {
+                    throw new RuntimeException(ex);
+                }
+                catch (IllegalAccessException ex)
+                {
+                    throw new RuntimeException(ex);
+                }
+                catch (InvocationTargetException ex) 
+                {
+                    throw new RuntimeException(ex);
+                }
+            }
         }
+        
+        assert actualRows == expectedRows;
     }
     
     /** executes a prepared statement */

Modified: cassandra/trunk/test/conf/cassandra.yaml
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/conf/cassandra.yaml?rev=1079975&r1=1079974&r2=1079975&view=diff
==============================================================================
--- cassandra/trunk/test/conf/cassandra.yaml (original)
+++ cassandra/trunk/test/conf/cassandra.yaml Wed Mar  9 20:23:10 2011
@@ -33,6 +33,9 @@ encryption_options:
     truststore: conf/.truststore
     truststore_password: cassandra
 incremental_backups: true
+    
+# Big Fat Note: as you add new colum families, be sure to append only (no 
insertions please), lest you break the 
+# serialization tests which expect columnfamily ids to be constant over time.
 keyspaces:
     - name: Keyspace1
       replica_placement_strategy: org.apache.cassandra.locator.SimpleStrategy
@@ -66,7 +69,7 @@ keyspaces:
           rows_cached: 0
           keys_cached: 0
           compare_with: IntegerType
-
+          
         - name: Super1
           column_type: Super
           compare_subcolumns_with: LongType
@@ -119,6 +122,27 @@ keyspaces:
               # index will be added dynamically
           rows_cached: 0
           keys_cached: 0
+        
+        - name: JdbcInteger
+          compare_with: IntegerType
+          default_validation_class: IntegerType
+          
+        - name: JdbcUtf8
+          compare_with: UTF8Type
+          default_validation_class: UTF8Type
+          
+        - name: JdbcLong
+          compare_with: LongType
+          default_validation_class: LongType
+          
+        - name: JdbcBytes
+          compare_with: BytesType
+          default_validation_class: BytesType
+          
+        - name: JdbcAscii
+          compare_with: AsciiType
+          default_validation_class: AsciiType
+        
 
     - name: Keyspace2
       replica_placement_strategy: org.apache.cassandra.locator.SimpleStrategy


Reply via email to