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