Compiled javascript code does not write falsy values
----------------------------------------------------

                 Key: THRIFT-1297
                 URL: https://issues.apache.org/jira/browse/THRIFT-1297
             Project: Thrift
          Issue Type: Bug
          Components: JavaScript - Compiler
    Affects Versions: 0.7
         Environment: Windows 0.7 thrift compiler (pre built)
http://www.apache.org/dyn/closer.cgi?path=/thrift/0.7.0/thrift-0.7.0.exe

Thrift 0.7 compiled on Ubuntu shows same symptoms
            Reporter: Joris van der Wel
            Priority: Critical


I compiled cassandra.thrift using "thrift --gen js:node cassandra.thrift".

When I use this code this results in the following error from cassandra / 
thrift:
{code}
{ name: 'TApplicationException',  type: 7,
  message: 'Required field \'reversed\' was not found in serialized data! 
Struct : SliceRange(start:null, finish:null, reversed:false, count:100)' }
{code}

If I look in the generated code, I find 

{code}
SliceRange.prototype.write = function(output) {
  output.writeStructBegin('SliceRange');
  if (this.start) {
    output.writeFieldBegin('start', Thrift.Type.STRING, 1);
    output.writeString(this.start);
    output.writeFieldEnd();
  }
  if (this.finish) {
    output.writeFieldBegin('finish', Thrift.Type.STRING, 2);
    output.writeString(this.finish);
    output.writeFieldEnd();
  }
  if (this.reversed) {
    output.writeFieldBegin('reversed', Thrift.Type.BOOL, 3);
    output.writeBool(this.reversed);
    output.writeFieldEnd();
  }
  if (this.count) {
    output.writeFieldBegin('count', Thrift.Type.I32, 4);
    output.writeI32(this.count);
    output.writeFieldEnd();
  }
  output.writeFieldStop();
  output.writeStructEnd();
  return;
};
{code}
this.reversed is false and subsequently does not get sent
If I look at the compiled version that was generated by 0.6.1 I see:

{code}
SliceRange.prototype.write = function(output){ 
  output.writeStructBegin('SliceRange')
  if (null != this.start) {
    output.writeFieldBegin('start', Thrift.Type.STRING, 1)
    output.writeString(this.start)
    output.writeFieldEnd()
  }
  if (null != this.finish) {
    output.writeFieldBegin('finish', Thrift.Type.STRING, 2)
    output.writeString(this.finish)
    output.writeFieldEnd()
  }
  if (null != this.reversed) {
    output.writeFieldBegin('reversed', Thrift.Type.BOOL, 3)
    output.writeBool(this.reversed)
    output.writeFieldEnd()
  }
  if (null != this.count) {
    output.writeFieldBegin('count', Thrift.Type.I32, 4)
    output.writeI32(this.count)
    output.writeFieldEnd()
  }
  output.writeFieldStop()
  output.writeStructEnd()
  return
}
{code}

null is also not be completely correct, the solution would be:
{code}
...
if (undefined !== this.reversed)
...
{code}

Unless this change was intentional and breaks things because cassandra is 
perhaps using an old thrift version?

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to