[ https://issues.apache.org/jira/browse/THRIFT-3304?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14721553#comment-14721553 ]
Jens Geyer edited comment on THRIFT-3304 at 8/30/15 3:10 PM: ------------------------------------------------------------- I can't see any issue. Make the field optional and check the isset flags. > I expect $behaviour Why? was (Author: jensg): I can't see any issue. Make the field optional and check the isset flags. > C# thrift.dll generates default values of fields instead of 'null' > ------------------------------------------------------------------ > > Key: THRIFT-3304 > URL: https://issues.apache.org/jira/browse/THRIFT-3304 > Project: Thrift > Issue Type: Bug > Components: C# - Compiler, C# - Library > Affects Versions: 0.9.2 > Environment: Windows 8, Hive1.1.0, HiveServer2 > Reporter: Kaveen Raajan > Labels: build > > I'm currently using HiveServer2 with thrift.dll library. If I try to make a > tuple from a thrift object, I expect that fields that were not set in the > object, are marked null in tuple. However instead default values are put into > the tuple. E.g. > {code} > HqlConnection con = new HqlConnection("localhost", 10001, > HiveServer.HiveServer2); > con.Open(); > HqlCommand createCommand1 = new HqlCommand("select id,name,age,DOB,marks from > engineer_list", con); > createCommand1.ExecuteNonQuery(); > HqlDataReader reader = createCommand1.ExecuteReader(); > {code} > expected output should be > {(1,'John',24,2010-01-01 10:22:47,45.6), > (2,null,null,null,null)} > but actual result was: > {(1,'John',24,2010-01-01 10:22:47,45.6), > (2,,,0,0)} > When we send request to call numeric column which contain NULL value for a > type (int, double, long, float..) means ‘thrift.dll’ itself return as zero > instead of 'null' or 'DBNull.value'. > For string, timestamp type mean 'thrift.dll' itself return as empty string > instead of 'null' or 'DBNull.value'. > By analyzing the source of thrift.dll, we trigger out the method for reading > the column by following > *Class*: Thrift.Protocol.TBinaryProtocol > *Method*: ReadAll(buffer, offset, length) by default it return as zero. > *Description*: This will get stream of data from thriftServer port > For Int value following method are call this will return as '0' if data > contain 'null' > {code} > private byte[] i32in = new byte[4]; > public override int ReadI32() > { > ReadAll(i32in, 0, 4); > return (int)(((i32in[0] & 0xff) << 24) | ((i32in[1] & 0xff) << 16) | > ((i32in[2] & 0xff) << 8) | ((i32in[3] & 0xff))); > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)