You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Rick Shaw (JIRA)" <ji...@apache.org> on 2011/03/31 22:57:09 UTC
[jira] [Created] (CASSANDRA-2410) JDBC ResultSet does not honor
column value typing for the CF and uses default validator for all column
value types.
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
[jira] [Commented] (CASSANDRA-2410) JDBC ResultSet does not honor
column value typing for the CF and uses default validator for all column
value types.
Posted by "Jonathan Ellis (JIRA)" <ji...@apache.org>.
[ 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
[jira] [Commented] (CASSANDRA-2410) JDBC ResultSet does not honor
column value typing for the CF and uses default validator for all column
value types.
Posted by "Hudson (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CASSANDRA-2410?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13020702#comment-13020702 ]
Hudson commented on CASSANDRA-2410:
-----------------------------------
Integrated in Cassandra-0.8 #10 (See [https://hudson.apache.org/hudson/job/Cassandra-0.8/10/])
honor specific column validators in JDBC driver. patch by gdusbabek, reviewed by jbellis. CASSANDRA-2410
> 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
[jira] [Updated] (CASSANDRA-2410) JDBC ResultSet does not honor
column value typing for the CF and uses default validator for all column
value types.
Posted by "Gary Dusbabek (JIRA)" <ji...@apache.org>.
[ 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
[jira] [Assigned] (CASSANDRA-2410) JDBC ResultSet does not honor
column value typing for the CF and uses default validator for all column
value types.
Posted by "Jonathan Ellis (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CASSANDRA-2410?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jonathan Ellis reassigned CASSANDRA-2410:
-----------------------------------------
Assignee: Gary Dusbabek
> 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
>
>
> 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