JDBC ResultSet does not honor column value typing for the CF and uses default validator for all column value types. -------------------------------------------------------------------------------------------------------------------
Key: CASSANDRA-2410 URL: https://issues.apache.org/jira/browse/CASSANDRA-2410 Project: Cassandra Issue Type: Bug Components: API Reporter: Rick Shaw Priority: Minor Fix For: 0.8 Assume a CF declared in CQL as : {code} CREATE COLUMNFAMILY TestCF(KEY utf8 PRIMARY KEY,description utf8, anumber int) WITH comparator = ascii AND default_validation = long; {code} If the {{ResultSet}} is fetched thusly: {code} Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); String description; Integer anumber; while (rs.next()) { description = rs.getString(1); System.out.print("description : "+ description); anumber = rs.getInt(2); System.out.print("anumber : "+ anumber); } {code} It will immediately fail with a message of: {code} org.apache.cassandra.db.marshal.MarshalException: A long is exactly 8 bytes: 16 at org.apache.cassandra.db.marshal.LongType.getString(LongType.java:66) at org.apache.cassandra.cql.jdbc.TypedColumn.<init>(TypedColumn.java:45) at org.apache.cassandra.cql.jdbc.ColumnDecoder.makeCol(ColumnDecoder.java:158) at org.apache.cassandra.cql.jdbc.CassandraResultSet.next(CassandraResultSet.java:1073) at da.access.testing.TestJDBC.selectAll(TestJDBC.java:83) ... {code} It appears that the {{makeCol}} method of {{ColumnDecoder.java}} chooses NOT to use the {{CfDef}} to look up the possible occurrence of a column? That's not right. Right? {code} /** constructs a typed column */ public TypedColumn makeCol(String keyspace, String columnFamily, byte[] name, byte[] value) { CfDef cfDef = cfDefs.get(String.format("%s.%s", keyspace, columnFamily)); AbstractType comparator = getComparator(keyspace, columnFamily, Specifier.Comparator, cfDef); AbstractType validator = getComparator(keyspace, columnFamily, Specifier.Validator, null); return new TypedColumn(comparator, name, validator, value); } {code} -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira