thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Buğra Gedik (JIRA) <j...@apache.org>
Subject [jira] [Comment Edited] (THRIFT-4675) JS code generators not handling int64 type properly for constants and for TypeScript type mappings
Date Thu, 29 Nov 2018 16:48:00 GMT

    [ https://issues.apache.org/jira/browse/THRIFT-4675?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16703481#comment-16703481
] 

Buğra Gedik edited comment on THRIFT-4675 at 11/29/18 4:47 PM:
---------------------------------------------------------------

[~jking3] Could you please advise in two areas:
  * Do you agree that this should be fixed. If you agree, we are willing to submit a patch
 
  * Do you think this requires an option or should it be the default behavior. I happen to
think that it should be the default behavior, as it is a correctness problem. 


was (Author: bgedik):
[~jking3] Can you advise in 2 areas:
  * Do you agree that this should be fixed. If you agree, we are willing to submit a patch
 
  * Do you think this requires an option or should it be the default behavior. I happen to
think that it should be the default behavior, as it is a correctness problem. 

> JS code generators not handling int64 type properly for constants and for TypeScript
type mappings
> --------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-4675
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4675
>             Project: Thrift
>          Issue Type: Bug
>          Components: JavaScript - Compiler
>    Affects Versions: 0.11.0
>            Reporter: Buğra Gedik
>            Priority: Major
>
> The code generated for JS constants involving the {{int64}} Thrift type do not rely on
the {{Int64}} JS type (from the {{node-int64}} package Thrift uses for handling 64-bit integers).

> For example, consider the following Thrift constant definitions:
> {code}
>     const i64 MAX_INT64 = 9223372036854775807
>     const i64 SMALL_INT64 = 15
> {code}
> This results in generating the following code:
> For node.js:
> {code}
>     ttypes.MAX_INT64 = 9223372036854775807;  
>     ttypes.SMALL_INT64 = 15;  
> {code}
> For the browser:
> {code}
>     MAX_INT64 = 9223372036854775807;
>     SMALL_INT64 = 15;  
> {code}
> Since the JS {{number}} type cannot natively represent integers that do not fit into
a double precision floating point, this will result in lost precision for certain values.
E.g., printing {{MAX_INT64}} would produce {{922337203685477}}*{{6000}}*. 
> The correct output should be (showing for node.js):
> {code}
>     ttypes.MAX_INT64 = new Int64(''7FFFFFFFFFFFFFFF'');  
>     ttypes.SMALL_INT64 = new Int64(15);  
> {code}
> Besides this, none of the Typescript type bindings ({{.d.ts}} files) contain the types
for int64 types. This includes constants, types, and service method parameters. 
> Note that fixing this may break some of the existing code. In my mind, this is how it
should work by default, but I don't know the policy in Thrift regarding backward compatibility.
It could also be added as an option.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message