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