[
https://issues.apache.org/jira/browse/CASSANDRA-2410?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Gary Dusbabek updated CASSANDRA-2410:
-------------------------------------
Attachment: v1-0001-honor-specific-column-validators-in-JDBC-driver.txt
> 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
> Assignee: Gary Dusbabek
> Priority: Minor
> Labels: cql
> Fix For: 0.8
>
> Attachments:
> v1-0001-honor-specific-column-validators-in-JDBC-driver.txt
>
>
> 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