You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "James E. King III (JIRA)" <ji...@apache.org> on 2019/02/02 00:33:00 UTC
[jira] [Closed] (THRIFT-1470) Thrift generates wrong Erlang specs
out of the Cassandra interface
[ https://issues.apache.org/jira/browse/THRIFT-1470?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
James E. King III closed THRIFT-1470.
-------------------------------------
Resolution: Duplicate
Assignee: James E. King III
Fix Version/s: 0.9
> Thrift generates wrong Erlang specs out of the Cassandra interface
> ------------------------------------------------------------------
>
> Key: THRIFT-1470
> URL: https://issues.apache.org/jira/browse/THRIFT-1470
> Project: Thrift
> Issue Type: Bug
> Components: Erlang - Compiler
> Affects Versions: 0.8
> Environment: OSX Snow Leopard, Thrift 0.8, Cassandra 1.0.5, Erlang R14B04
> Reporter: Roberto Ostinelli
> Assignee: James E. King III
> Priority: Major
> Fix For: 0.9
>
>
> I'm building an Erlang CQL client for Cassandra (https://github.com/ostinelli/erlcassa). I've generated the Erlang Thrift code with the command:
> thrift --gen erl cassandra/interface/cassandra.thrift
> One of the generate files, cassandra_types.hrl, seems to have incorrect record definitions. To be more precise:
> -record(cqlMetadata, {name_types = dict:new() :: dict(),
> value_types = dict:new() :: dict(),
> default_name_type = undefined :: string(),
> default_value_type = undefined :: string()}).
> -record(column, {name = undefined :: string(),
> value = undefined :: string(),
> timestamp = undefined :: integer(),
> ttl = undefined :: integer()}).
> These two records specify string() in name and value columns, but the real returned values from Cassandra are binary(). Not sure about it, but every time there's a string() specification in this file, it really seems that it should be binary(), which is what Thrift calls return from Cassandra.
> Also, the default_name_type and default_value_type of cqlMetadata can actually be undefined (when the record first gets created, these are not specified and hence are undefined).
> These specs being incorrect, Dialyzer complains while performing checks on code built on top of these specs.
> Here are the specs corrected in a way that make Dialyzer pass the tests:
> https://github.com/ostinelli/erlcassa/blob/master/include/cassandra_types.hrl
> Yet again, many of the string() specs on the cassandra_types.hrl file have been left untouched as I've not has the chance to dig if changes are needed.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)