You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Jonathan Ellis (JIRA)" <ji...@apache.org> on 2011/04/16 23:58:05 UTC
[jira] [Commented] (CASSANDRA-2410) JDBC ResultSet does not honor
column value typing for the CF and uses default validator for all column
value types.
[ https://issues.apache.org/jira/browse/CASSANDRA-2410?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13020673#comment-13020673 ]
Jonathan Ellis commented on CASSANDRA-2410:
-------------------------------------------
+1
> 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