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