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

Dave Watson commented on THRIFT-1477:
-------------------------------------

Like this idea.

Would love a way to have TJsonProtocol be able to read/write names instead of 
field ID's.  Proposal sounds great to me.

I don't see your downside as a huge use-case.  
                
> Allow readFieldBegin() to pass back the field name instead of the field id
> --------------------------------------------------------------------------
>
>                 Key: THRIFT-1477
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1477
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Java - Compiler
>            Reporter: Benjy Weinberger
>            Priority: Minor
>
> [Apologies if this has been addressed in another issue. I couldn't find 
> anything relevant on JIRA or the mailing list archives.]
> Background: I'm implementing a BSON protocol, in order to write Thrift 
> messages to MongoDB (technically the protocol generates the object 
> representation that the MongoDB driver expects, not a raw BSON string 
> directly to the transport, but that's an unimportant detail here). 
> BSON, like JSON, naturally uses human-readable string field names. 
> When reading, the generated Thrift code (at least in Java) requires that 
> readFieldBegin() pass back a TField with the id field set. It ignores the 
> name field. Therefore the ids must appear in the stream. It's possible to 
> contort these protocols to use ids instead of human-readable names (as 
> TJSONProtocol does) but this isn't helpful in dealing with prior BSON or JSON 
> data that we're trying to back-port into Thrift schemata.
> However, the generated read() method already knows how to map names to ids. 
> So I propose allowing a TProtocol's readFieldBegin() method to pass back a 
> TField with the name set and no id set (indicated, say, by id==-1), and let 
> the read() method figure out the id to then switch on. 
> In some cases we could also allow the TField to omit the type information, 
> which, again, is not naturally present in JSON. (BSON does embed type 
> information, but its type system does not align fully with Thrift's, so it 
> can't be used without further context). If the field is unknown, the only use 
> for the type is for skipping the field value. But protocols like JSON and 
> BSON can skip fields without this type information, since fields are 
> delimited in the protocol in a type-independent way.
> Basically, what I propose is that readFieldBegin() be allowed to pass back 
> just an id or just a name (and, for some protocols, no type information), 
> since that is all read() needs in order to figure out how to read or skip the 
> field. 
> I'm wondering what the Thrift elders think of this. Has it been discussed? 
> Thanks!
> PS This does have the downside that if Thrift were to implement a 
> pass-through feature for unrecognized fields (so that new messages read with 
> old protocol versions will serialize back out with no loss) - we wouldn't be 
> able to preserve fields for which we only had a name and no id. Or rather, we 
> wouldn't be able to write them out to a protocol that requires ids, like the 
> binary protocols. However this feature doesn't exist anyway, and I don't know 
> if it's on the roadmap. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to