You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by sm...@apache.org on 2014/09/30 09:26:20 UTC

[18/21] git commit: DRILL-1297: C++ Client. Hide Dependencies From Public API to enable using C++ Client as a DLL

DRILL-1297: C++ Client. Hide Dependencies From Public API to enable using C++ Client as a DLL


Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/4862b2b0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/4862b2b0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/4862b2b0

Branch: refs/heads/master
Commit: 4862b2b08bf16e9ef8906d257bf547a948939517
Parents: ef25464
Author: Alexander Zarei <az...@ece.ubc.ca>
Authored: Thu Aug 7 16:32:00 2014 -0700
Committer: Steven Phillips <sp...@maprtech.com>
Committed: Mon Sep 29 18:21:46 2014 -0700

----------------------------------------------------------------------
 .../native/client/example/querySubmitter.cpp    |   10 +-
 contrib/native/client/readme.win.txt            |   25 +-
 contrib/native/client/scripts/cpProtofiles.sh   |    2 -
 .../native/client/src/clientlib/drillClient.cpp |   11 +-
 .../native/client/src/clientlib/recordBatch.cpp |   33 +
 .../client/src/include/drill/drillClient.hpp    |   25 +-
 .../native/client/src/include/drill/drillc.hpp  |    1 -
 .../client/src/include/drill/protobuf/User.pb.h | 1278 ------------------
 .../client/src/include/drill/recordBatch.hpp    |   36 +-
 .../native/client/src/protobuf/CMakeLists.txt   |    2 +-
 contrib/native/client/src/protobuf/User.pb.h    | 1278 ++++++++++++++++++
 11 files changed, 1374 insertions(+), 1327 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4862b2b0/contrib/native/client/example/querySubmitter.cpp
----------------------------------------------------------------------
diff --git a/contrib/native/client/example/querySubmitter.cpp b/contrib/native/client/example/querySubmitter.cpp
index 9feb61d..f886e81 100644
--- a/contrib/native/client/example/querySubmitter.cpp
+++ b/contrib/native/client/example/querySubmitter.cpp
@@ -253,7 +253,7 @@ int main(int argc, char* argv[]) {
         std::string logLevel=qsOptionValues["logLevel"];
         std::string testCancel=qsOptionValues["testCancel"];
 
-        exec::shared::QueryType type;
+        Drill::QueryType type;
 
         if(!validate(type_str, queryList, planList)){
             exit(1);
@@ -264,16 +264,16 @@ int main(int argc, char* argv[]) {
         std::vector<std::string> queryInputs;
         if(type_str=="sql" ){
             readQueries(queryList, queryInputs);
-            type=exec::shared::SQL;
+            type=Drill::SQL;
         }else if(type_str=="physical" ){
             readPlans(planList, queryInputs);
-            type=exec::shared::PHYSICAL;
+            type=Drill::PHYSICAL;
         }else if(type_str == "logical"){
             readPlans(planList, queryInputs);
-            type=exec::shared::LOGICAL;
+            type=Drill::LOGICAL;
         }else{
             readQueries(queryList, queryInputs);
-            type=exec::shared::SQL;
+            type=Drill::SQL;
         }
 
         bTestCancel = !strcmp(testCancel.c_str(), "true")?true:false;

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4862b2b0/contrib/native/client/readme.win.txt
----------------------------------------------------------------------
diff --git a/contrib/native/client/readme.win.txt b/contrib/native/client/readme.win.txt
index df6ee64..f1fdef8 100644
--- a/contrib/native/client/readme.win.txt
+++ b/contrib/native/client/readme.win.txt
@@ -35,6 +35,7 @@ Windows platforms should be more or less similar.
     Note: For 64 bit builds, change the platform toolset to Windows SDK for your
     project.
     (Root node, i.e. the projectname) Properties ->Configuration Properties->General->Platform Toolset = Windows7.1SDK
+    If you are running Windows 7 and having problem isntalling windows SDK follow the instructions here http://stackoverflow.com/questions/19366006/error-when-installing-windows-sdk-7-1
 
 1.3 [Optional] Windows Driver kit 
     The Windows Driver kit is required to get the 64 bit assembler ml64. The
@@ -76,7 +77,9 @@ Windows platforms should be more or less similar.
 
 2.1 Boost (version 1.55)
     a) Download Boost from:
-        http://www.boost.org/users/history/version_1_55_0.html
+        i) http://www.boost.org/users/history/version_1_55_0.html
+        ii) open boost_1_55_0\boost/archive/iterators/transform_width.hpp and add the following to the include statements: #include <algorithm>
+        iii) Yes somehow this header was not included and has been missed! See here for more info: https://svn.boost.org/trac/boost/ticket/8757
     b) i) Boost 32 bit build - 
         Open a  Visual Studio command prompt from the Visual Studio IDE
       ii) Boost 64 bit build -
@@ -89,19 +92,19 @@ Windows platforms should be more or less similar.
     and build the libraries. Boost build will write the libraries to
     <BOOST_HOME>/stage/lib. Copy them to an appropriately named directory
 
-        C:> .\b2 variant=debug link=static threading=multi address-model=64 toolset=msvc runtime-link=shared
+        C:> .\b2 variant=debug link=static threading=multi address-model=64 toolset=msvc-10.0 runtime-link=shared
         C:>  mkdir Debug64
         C:>  copy stage\lib\* Debug64
 
-        C:> .\b2 variant=release link=static threading=multi address-model=64 toolset=msvc runtime-link=shared
+        C:> .\b2 variant=release link=static threading=multi address-model=64 toolset=msvc-10.0 runtime-link=shared
         C:>  mkdir Release64
         C:>  copy stage\lib\* Release64
 
-        C:> .\b2 variant=debug link=static threading=multi address-model=32 toolset=msvc runtime-link=shared
+        C:> .\b2 variant=debug link=static threading=multi address-model=32 toolset=msvc-10.0 runtime-link=shared
         C:>  mkdir Debug32
         C:>  copy stage\lib\* Debug32
 
-        C:> .\b2 variant=release link=static threading=multi address-model=32 toolset=msvc runtime-link=shared
+        C:> .\b2 variant=release link=static threading=multi address-model=32 toolset=msvc-10.0 runtime-link=shared
         C:>  mkdir Release32
         C:>  copy stage\lib\* Release32
     e) Notes: 
@@ -113,12 +116,16 @@ Windows platforms should be more or less similar.
         build. It is safe to ignore it as boost-context is not needed for Drill
 
 2.2 Protobuf (2.5.0)
+    Get protobuf from here: https://protobuf.googlecode.com/files/protobuf-2.5.0.zip
+
+
     a) Protobuf builds static libraries
     b) In Visual Studio, open <PROTOBUF_HOME>/vsprojects/protobuf.sln. The IDE may
     update the solution file. This should go thru successfully.
     c) If build for 64 bit, add a 64 bit project configuration for each project. (Make sure the
         platform toolset is set to Windows7.1SDK)
-    d) Build
+    d) Build the protobuf project first (not the solution)
+    e) Build the solution!
 
 2.3 Zookeeper (3.4.6) 
     a) Set the ZOOKEEPER_HOME environment variable
@@ -132,7 +139,7 @@ Windows platforms should be more or less similar.
        ii) Change the output type for the zookeeper project to a static lib
             Properties->Configuration Properties->General->Configuration Type = Static Library
       iii) In the cli project add the preprocessor define USE_STATIC_LIB
-     iiii) Build. Build zookeeper lib first, then build cli
+      iv) Build. Build zookeeper lib first, then build cli 
 
 3 Building Drill Clientlib
 3.1 SET the following environment variables
@@ -176,4 +183,6 @@ Windows platforms should be more or less similar.
     Check the libraries are all the same as your configuration (all debug, or all
     release). 
     In particular, for debug builds, check the path of the protobuf library.
-        
+	
+5 Testing with querySubmitter
+querySubmitter query="select * from INFORMAITON_SCHEMA.SCHEMATA" type=sql connectStr=local=192.168.39.43:31010 api=sync logLevel=trace
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4862b2b0/contrib/native/client/scripts/cpProtofiles.sh
----------------------------------------------------------------------
diff --git a/contrib/native/client/scripts/cpProtofiles.sh b/contrib/native/client/scripts/cpProtofiles.sh
index 4b0df36..1e2d01e 100755
--- a/contrib/native/client/scripts/cpProtofiles.sh
+++ b/contrib/native/client/scripts/cpProtofiles.sh
@@ -40,8 +40,6 @@ main() {
     fi
 
     mv ${TARGDIR}/Types.pb.h ${INCDIR}
-    mv ${TARGDIR}/User.pb.h ${INCDIR}
-
 }
 
 main

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4862b2b0/contrib/native/client/src/clientlib/drillClient.cpp
----------------------------------------------------------------------
diff --git a/contrib/native/client/src/clientlib/drillClient.cpp b/contrib/native/client/src/clientlib/drillClient.cpp
index a7aafaa..db7d5a8 100644
--- a/contrib/native/client/src/clientlib/drillClient.cpp
+++ b/contrib/native/client/src/clientlib/drillClient.cpp
@@ -276,15 +276,18 @@ void DrillClient::close() {
     this->m_pImpl->Close();
 }
 
-status_t DrillClient::submitQuery(::exec::shared::QueryType t, const std::string& plan, pfnQueryResultsListener listener, void* listenerCtx, QueryHandle_t* qHandle){
-    DrillClientQueryResult* pResult=this->m_pImpl->SubmitQuery(t, plan, listener, listenerCtx);
+status_t DrillClient::submitQuery(Drill::QueryType t, const std::string& plan, pfnQueryResultsListener listener, void* listenerCtx, QueryHandle_t* qHandle){
+
+    ::exec::shared::QueryType castedType = static_cast<::exec::shared::QueryType> (t);
+    DrillClientQueryResult* pResult=this->m_pImpl->SubmitQuery(castedType, plan, listener, listenerCtx);
     *qHandle=(QueryHandle_t)pResult;
     return QRY_SUCCESS;
 }
 
-RecordIterator* DrillClient::submitQuery(::exec::shared::QueryType t, const std::string& plan, DrillClientError* err){
+RecordIterator* DrillClient::submitQuery(Drill::QueryType t, const std::string& plan, DrillClientError* err){
     RecordIterator* pIter=NULL;
-    DrillClientQueryResult* pResult=this->m_pImpl->SubmitQuery(t, plan, NULL, NULL);
+    ::exec::shared::QueryType castedType = static_cast<::exec::shared::QueryType> (t);
+    DrillClientQueryResult* pResult=this->m_pImpl->SubmitQuery(castedType, plan, NULL, NULL);
     if(pResult){
         pIter=new RecordIterator(pResult);
     }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4862b2b0/contrib/native/client/src/clientlib/recordBatch.cpp
----------------------------------------------------------------------
diff --git a/contrib/native/client/src/clientlib/recordBatch.cpp b/contrib/native/client/src/clientlib/recordBatch.cpp
index 4c55f04..dfa12fd 100644
--- a/contrib/native/client/src/clientlib/recordBatch.cpp
+++ b/contrib/native/client/src/clientlib/recordBatch.cpp
@@ -19,6 +19,7 @@
 #include "drill/common.hpp"
 #include "drill/recordBatch.hpp"
 #include "utils.hpp"
+#include "../protobuf/User.pb.h"
 
 const int32_t YEARS_TO_MONTHS=12;
 const int32_t DAYS_TO_MILLIS=24*60*60*1000;
@@ -300,6 +301,18 @@ ret_t FieldBatch::load(){
     return RET_SUCCESS;
 }
 
+RecordBatch::RecordBatch(exec::shared::QueryResult* pResult, AllocatedBufferPtr r, ByteBuf_t b)
+    :m_fieldDefs(new(std::vector<Drill::FieldMetadata*>)){
+        m_pQueryResult=pResult;
+        m_pRecordBatchDef=&pResult->def();
+        m_numRecords=pResult->row_count();
+        m_allocatedBuffer=r;
+        m_buffer=b;
+        m_numFields=pResult->def().field_size();
+        m_bHasSchemaChanged=false;
+}
+
+
 RecordBatch::~RecordBatch(){
     m_buffer=NULL;
     //free memory allocated for FieldBatch objects saved in m_fields;
@@ -369,6 +382,26 @@ void RecordBatch::print(std::ostream& s, size_t num){
         s<<values<<std::endl;
     }
 }
+size_t RecordBatch::getNumFields(){
+    return m_pRecordBatchDef->field_size(); 
+}
+
+bool RecordBatch::isLastChunk(){
+    return m_pQueryResult->is_last_chunk(); 
+}
+
+
+
+void FieldMetadata::set(const exec::shared::SerializedField& f){
+    m_name=f.name_part().name();
+    m_minorType=f.major_type().minor_type();
+    m_dataMode=f.major_type().mode();
+    m_valueCount=f.value_count();
+    m_scale=f.major_type().scale();
+    m_precision=f.major_type().precision();
+    m_bufferLength=f.buffer_length();
+}
+
 
 void DateHolder::load(){
     m_year=1970;

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4862b2b0/contrib/native/client/src/include/drill/drillClient.hpp
----------------------------------------------------------------------
diff --git a/contrib/native/client/src/include/drill/drillClient.hpp b/contrib/native/client/src/include/drill/drillClient.hpp
index d03f88d..f1369ee 100644
--- a/contrib/native/client/src/include/drill/drillClient.hpp
+++ b/contrib/native/client/src/include/drill/drillClient.hpp
@@ -23,7 +23,7 @@
 #include <vector>
 #include <boost/thread.hpp>
 #include "drill/common.hpp"
-#include "drill/protobuf/User.pb.h"
+#include "drill/protobuf/Types.pb.h"
 
 
 #if defined _WIN32 || defined __CYGWIN__
@@ -44,7 +44,14 @@
   #endif
 #endif
 
-namespace Drill {
+namespace exec{
+    namespace shared{
+        class DrillPBError;
+        enum QueryType;
+    };
+};
+
+namespace Drill{
 
 //struct UserServerEndPoint;
 class  DrillClientImpl;
@@ -53,6 +60,12 @@ class  FieldMetadata;
 class  RecordBatch;
 class  SchemaDef;
 
+enum QueryType{
+    SQL = 1,
+    LOGICAL = 2,
+    PHYSICAL = 3
+};
+
 class DECLSPEC_DRILL_CLIENT DrillClientError{
     public:
         static const uint32_t CONN_ERROR_START = 100;
@@ -222,16 +235,16 @@ class DECLSPEC_DRILL_CLIENT DrillClient{
         void close() ;
 
         /*
-         * Submit a query asynchronously and wait for results to be returned thru a callback. A query context handle is passed
+         * Submit a query asynchronously and wait for results to be returned through a callback. A query context handle is passed
          * back. The listener callback will return the handle in the ctx parameter.
          */
-        status_t submitQuery(::exec::shared::QueryType t, const std::string& plan, pfnQueryResultsListener listener, void* listenerCtx, QueryHandle_t* qHandle);
+        status_t submitQuery(Drill::QueryType t, const std::string& plan, pfnQueryResultsListener listener, void* listenerCtx, QueryHandle_t* qHandle);
 
         /*
-         * Submit a query asynchronously and wait for results to be returned thru an iterator that returns
+         * Submit a query asynchronously and wait for results to be returned through an iterator that returns
          * results synchronously. The client app needs to call delete on the iterator when done.
          */
-        RecordIterator* submitQuery(::exec::shared::QueryType t, const std::string& plan, DrillClientError* err);
+        RecordIterator* submitQuery(Drill::QueryType t, const std::string& plan, DrillClientError* err);
 
         /*
          * The client application should call this function to wait for results if it has registered a

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4862b2b0/contrib/native/client/src/include/drill/drillc.hpp
----------------------------------------------------------------------
diff --git a/contrib/native/client/src/include/drill/drillc.hpp b/contrib/native/client/src/include/drill/drillc.hpp
index 93a6b79..3697ee8 100644
--- a/contrib/native/client/src/include/drill/drillc.hpp
+++ b/contrib/native/client/src/include/drill/drillc.hpp
@@ -23,7 +23,6 @@
 #include "drill/drillClient.hpp"
 #include "drill/recordBatch.hpp"
 #include "drill/protobuf/Types.pb.h"
-#include "drill/protobuf/User.pb.h"
 
 #endif
 

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4862b2b0/contrib/native/client/src/include/drill/protobuf/User.pb.h
----------------------------------------------------------------------
diff --git a/contrib/native/client/src/include/drill/protobuf/User.pb.h b/contrib/native/client/src/include/drill/protobuf/User.pb.h
deleted file mode 100644
index eca199d..0000000
--- a/contrib/native/client/src/include/drill/protobuf/User.pb.h
+++ /dev/null
@@ -1,1278 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: User.proto
-
-#ifndef PROTOBUF_User_2eproto__INCLUDED
-#define PROTOBUF_User_2eproto__INCLUDED
-
-#include <string>
-
-#include <google/protobuf/stubs/common.h>
-
-#if GOOGLE_PROTOBUF_VERSION < 2005000
-#error This file was generated by a newer version of protoc which is
-#error incompatible with your Protocol Buffer headers.  Please update
-#error your headers.
-#endif
-#if 2005000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
-#error This file was generated by an older version of protoc which is
-#error incompatible with your Protocol Buffer headers.  Please
-#error regenerate this file with a newer version of protoc.
-#endif
-
-#include <google/protobuf/generated_message_util.h>
-#include <google/protobuf/message.h>
-#include <google/protobuf/repeated_field.h>
-#include <google/protobuf/extension_set.h>
-#include <google/protobuf/generated_enum_reflection.h>
-#include <google/protobuf/unknown_field_set.h>
-#include "SchemaDef.pb.h"
-#include "UserBitShared.pb.h"
-// @@protoc_insertion_point(includes)
-
-namespace exec {
-namespace user {
-
-// Internal implementation detail -- do not call these.
-void  protobuf_AddDesc_User_2eproto();
-void protobuf_AssignDesc_User_2eproto();
-void protobuf_ShutdownFile_User_2eproto();
-
-class Property;
-class UserProperties;
-class UserToBitHandshake;
-class RequestResults;
-class RunQuery;
-class BitToUserHandshake;
-
-enum RpcType {
-  HANDSHAKE = 0,
-  ACK = 1,
-  GOODBYE = 2,
-  RUN_QUERY = 3,
-  CANCEL_QUERY = 4,
-  REQUEST_RESULTS = 5,
-  QUERY_RESULT = 6,
-  QUERY_HANDLE = 7,
-  REQ_META_FUNCTIONS = 8,
-  RESP_FUNCTION_LIST = 9
-};
-bool RpcType_IsValid(int value);
-const RpcType RpcType_MIN = HANDSHAKE;
-const RpcType RpcType_MAX = RESP_FUNCTION_LIST;
-const int RpcType_ARRAYSIZE = RpcType_MAX + 1;
-
-const ::google::protobuf::EnumDescriptor* RpcType_descriptor();
-inline const ::std::string& RpcType_Name(RpcType value) {
-  return ::google::protobuf::internal::NameOfEnum(
-    RpcType_descriptor(), value);
-}
-inline bool RpcType_Parse(
-    const ::std::string& name, RpcType* value) {
-  return ::google::protobuf::internal::ParseNamedEnum<RpcType>(
-    RpcType_descriptor(), name, value);
-}
-enum QueryResultsMode {
-  STREAM_FULL = 1
-};
-bool QueryResultsMode_IsValid(int value);
-const QueryResultsMode QueryResultsMode_MIN = STREAM_FULL;
-const QueryResultsMode QueryResultsMode_MAX = STREAM_FULL;
-const int QueryResultsMode_ARRAYSIZE = QueryResultsMode_MAX + 1;
-
-const ::google::protobuf::EnumDescriptor* QueryResultsMode_descriptor();
-inline const ::std::string& QueryResultsMode_Name(QueryResultsMode value) {
-  return ::google::protobuf::internal::NameOfEnum(
-    QueryResultsMode_descriptor(), value);
-}
-inline bool QueryResultsMode_Parse(
-    const ::std::string& name, QueryResultsMode* value) {
-  return ::google::protobuf::internal::ParseNamedEnum<QueryResultsMode>(
-    QueryResultsMode_descriptor(), name, value);
-}
-// ===================================================================
-
-class Property : public ::google::protobuf::Message {
- public:
-  Property();
-  virtual ~Property();
-
-  Property(const Property& from);
-
-  inline Property& operator=(const Property& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const Property& default_instance();
-
-  void Swap(Property* other);
-
-  // implements Message ----------------------------------------------
-
-  Property* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const Property& from);
-  void MergeFrom(const Property& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // required string key = 1;
-  inline bool has_key() const;
-  inline void clear_key();
-  static const int kKeyFieldNumber = 1;
-  inline const ::std::string& key() const;
-  inline void set_key(const ::std::string& value);
-  inline void set_key(const char* value);
-  inline void set_key(const char* value, size_t size);
-  inline ::std::string* mutable_key();
-  inline ::std::string* release_key();
-  inline void set_allocated_key(::std::string* key);
-
-  // required string value = 2;
-  inline bool has_value() const;
-  inline void clear_value();
-  static const int kValueFieldNumber = 2;
-  inline const ::std::string& value() const;
-  inline void set_value(const ::std::string& value);
-  inline void set_value(const char* value);
-  inline void set_value(const char* value, size_t size);
-  inline ::std::string* mutable_value();
-  inline ::std::string* release_value();
-  inline void set_allocated_value(::std::string* value);
-
-  // @@protoc_insertion_point(class_scope:exec.user.Property)
- private:
-  inline void set_has_key();
-  inline void clear_has_key();
-  inline void set_has_value();
-  inline void clear_has_value();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::std::string* key_;
-  ::std::string* value_;
-
-  mutable int _cached_size_;
-  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
-
-  friend void  protobuf_AddDesc_User_2eproto();
-  friend void protobuf_AssignDesc_User_2eproto();
-  friend void protobuf_ShutdownFile_User_2eproto();
-
-  void InitAsDefaultInstance();
-  static Property* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class UserProperties : public ::google::protobuf::Message {
- public:
-  UserProperties();
-  virtual ~UserProperties();
-
-  UserProperties(const UserProperties& from);
-
-  inline UserProperties& operator=(const UserProperties& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const UserProperties& default_instance();
-
-  void Swap(UserProperties* other);
-
-  // implements Message ----------------------------------------------
-
-  UserProperties* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const UserProperties& from);
-  void MergeFrom(const UserProperties& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // repeated .exec.user.Property properties = 1;
-  inline int properties_size() const;
-  inline void clear_properties();
-  static const int kPropertiesFieldNumber = 1;
-  inline const ::exec::user::Property& properties(int index) const;
-  inline ::exec::user::Property* mutable_properties(int index);
-  inline ::exec::user::Property* add_properties();
-  inline const ::google::protobuf::RepeatedPtrField< ::exec::user::Property >&
-      properties() const;
-  inline ::google::protobuf::RepeatedPtrField< ::exec::user::Property >*
-      mutable_properties();
-
-  // @@protoc_insertion_point(class_scope:exec.user.UserProperties)
- private:
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::RepeatedPtrField< ::exec::user::Property > properties_;
-
-  mutable int _cached_size_;
-  ::google::protobuf::uint32 _has_bits_[(1 + 31) / 32];
-
-  friend void  protobuf_AddDesc_User_2eproto();
-  friend void protobuf_AssignDesc_User_2eproto();
-  friend void protobuf_ShutdownFile_User_2eproto();
-
-  void InitAsDefaultInstance();
-  static UserProperties* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class UserToBitHandshake : public ::google::protobuf::Message {
- public:
-  UserToBitHandshake();
-  virtual ~UserToBitHandshake();
-
-  UserToBitHandshake(const UserToBitHandshake& from);
-
-  inline UserToBitHandshake& operator=(const UserToBitHandshake& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const UserToBitHandshake& default_instance();
-
-  void Swap(UserToBitHandshake* other);
-
-  // implements Message ----------------------------------------------
-
-  UserToBitHandshake* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const UserToBitHandshake& from);
-  void MergeFrom(const UserToBitHandshake& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional .exec.shared.RpcChannel channel = 1 [default = USER];
-  inline bool has_channel() const;
-  inline void clear_channel();
-  static const int kChannelFieldNumber = 1;
-  inline ::exec::shared::RpcChannel channel() const;
-  inline void set_channel(::exec::shared::RpcChannel value);
-
-  // optional bool support_listening = 2;
-  inline bool has_support_listening() const;
-  inline void clear_support_listening();
-  static const int kSupportListeningFieldNumber = 2;
-  inline bool support_listening() const;
-  inline void set_support_listening(bool value);
-
-  // optional int32 rpc_version = 3;
-  inline bool has_rpc_version() const;
-  inline void clear_rpc_version();
-  static const int kRpcVersionFieldNumber = 3;
-  inline ::google::protobuf::int32 rpc_version() const;
-  inline void set_rpc_version(::google::protobuf::int32 value);
-
-  // optional .exec.shared.UserCredentials credentials = 4;
-  inline bool has_credentials() const;
-  inline void clear_credentials();
-  static const int kCredentialsFieldNumber = 4;
-  inline const ::exec::shared::UserCredentials& credentials() const;
-  inline ::exec::shared::UserCredentials* mutable_credentials();
-  inline ::exec::shared::UserCredentials* release_credentials();
-  inline void set_allocated_credentials(::exec::shared::UserCredentials* credentials);
-
-  // optional .exec.user.UserProperties properties = 5;
-  inline bool has_properties() const;
-  inline void clear_properties();
-  static const int kPropertiesFieldNumber = 5;
-  inline const ::exec::user::UserProperties& properties() const;
-  inline ::exec::user::UserProperties* mutable_properties();
-  inline ::exec::user::UserProperties* release_properties();
-  inline void set_allocated_properties(::exec::user::UserProperties* properties);
-
-  // optional bool support_complex_types = 6 [default = false];
-  inline bool has_support_complex_types() const;
-  inline void clear_support_complex_types();
-  static const int kSupportComplexTypesFieldNumber = 6;
-  inline bool support_complex_types() const;
-  inline void set_support_complex_types(bool value);
-
-  // @@protoc_insertion_point(class_scope:exec.user.UserToBitHandshake)
- private:
-  inline void set_has_channel();
-  inline void clear_has_channel();
-  inline void set_has_support_listening();
-  inline void clear_has_support_listening();
-  inline void set_has_rpc_version();
-  inline void clear_has_rpc_version();
-  inline void set_has_credentials();
-  inline void clear_has_credentials();
-  inline void set_has_properties();
-  inline void clear_has_properties();
-  inline void set_has_support_complex_types();
-  inline void clear_has_support_complex_types();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  int channel_;
-  ::google::protobuf::int32 rpc_version_;
-  ::exec::shared::UserCredentials* credentials_;
-  ::exec::user::UserProperties* properties_;
-  bool support_listening_;
-  bool support_complex_types_;
-
-  mutable int _cached_size_;
-  ::google::protobuf::uint32 _has_bits_[(6 + 31) / 32];
-
-  friend void  protobuf_AddDesc_User_2eproto();
-  friend void protobuf_AssignDesc_User_2eproto();
-  friend void protobuf_ShutdownFile_User_2eproto();
-
-  void InitAsDefaultInstance();
-  static UserToBitHandshake* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class RequestResults : public ::google::protobuf::Message {
- public:
-  RequestResults();
-  virtual ~RequestResults();
-
-  RequestResults(const RequestResults& from);
-
-  inline RequestResults& operator=(const RequestResults& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const RequestResults& default_instance();
-
-  void Swap(RequestResults* other);
-
-  // implements Message ----------------------------------------------
-
-  RequestResults* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const RequestResults& from);
-  void MergeFrom(const RequestResults& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional .exec.shared.QueryId query_id = 1;
-  inline bool has_query_id() const;
-  inline void clear_query_id();
-  static const int kQueryIdFieldNumber = 1;
-  inline const ::exec::shared::QueryId& query_id() const;
-  inline ::exec::shared::QueryId* mutable_query_id();
-  inline ::exec::shared::QueryId* release_query_id();
-  inline void set_allocated_query_id(::exec::shared::QueryId* query_id);
-
-  // optional int32 maximum_responses = 2;
-  inline bool has_maximum_responses() const;
-  inline void clear_maximum_responses();
-  static const int kMaximumResponsesFieldNumber = 2;
-  inline ::google::protobuf::int32 maximum_responses() const;
-  inline void set_maximum_responses(::google::protobuf::int32 value);
-
-  // @@protoc_insertion_point(class_scope:exec.user.RequestResults)
- private:
-  inline void set_has_query_id();
-  inline void clear_has_query_id();
-  inline void set_has_maximum_responses();
-  inline void clear_has_maximum_responses();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::exec::shared::QueryId* query_id_;
-  ::google::protobuf::int32 maximum_responses_;
-
-  mutable int _cached_size_;
-  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
-
-  friend void  protobuf_AddDesc_User_2eproto();
-  friend void protobuf_AssignDesc_User_2eproto();
-  friend void protobuf_ShutdownFile_User_2eproto();
-
-  void InitAsDefaultInstance();
-  static RequestResults* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class RunQuery : public ::google::protobuf::Message {
- public:
-  RunQuery();
-  virtual ~RunQuery();
-
-  RunQuery(const RunQuery& from);
-
-  inline RunQuery& operator=(const RunQuery& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const RunQuery& default_instance();
-
-  void Swap(RunQuery* other);
-
-  // implements Message ----------------------------------------------
-
-  RunQuery* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const RunQuery& from);
-  void MergeFrom(const RunQuery& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional .exec.user.QueryResultsMode results_mode = 1;
-  inline bool has_results_mode() const;
-  inline void clear_results_mode();
-  static const int kResultsModeFieldNumber = 1;
-  inline ::exec::user::QueryResultsMode results_mode() const;
-  inline void set_results_mode(::exec::user::QueryResultsMode value);
-
-  // optional .exec.shared.QueryType type = 2;
-  inline bool has_type() const;
-  inline void clear_type();
-  static const int kTypeFieldNumber = 2;
-  inline ::exec::shared::QueryType type() const;
-  inline void set_type(::exec::shared::QueryType value);
-
-  // optional string plan = 3;
-  inline bool has_plan() const;
-  inline void clear_plan();
-  static const int kPlanFieldNumber = 3;
-  inline const ::std::string& plan() const;
-  inline void set_plan(const ::std::string& value);
-  inline void set_plan(const char* value);
-  inline void set_plan(const char* value, size_t size);
-  inline ::std::string* mutable_plan();
-  inline ::std::string* release_plan();
-  inline void set_allocated_plan(::std::string* plan);
-
-  // @@protoc_insertion_point(class_scope:exec.user.RunQuery)
- private:
-  inline void set_has_results_mode();
-  inline void clear_has_results_mode();
-  inline void set_has_type();
-  inline void clear_has_type();
-  inline void set_has_plan();
-  inline void clear_has_plan();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  int results_mode_;
-  int type_;
-  ::std::string* plan_;
-
-  mutable int _cached_size_;
-  ::google::protobuf::uint32 _has_bits_[(3 + 31) / 32];
-
-  friend void  protobuf_AddDesc_User_2eproto();
-  friend void protobuf_AssignDesc_User_2eproto();
-  friend void protobuf_ShutdownFile_User_2eproto();
-
-  void InitAsDefaultInstance();
-  static RunQuery* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class BitToUserHandshake : public ::google::protobuf::Message {
- public:
-  BitToUserHandshake();
-  virtual ~BitToUserHandshake();
-
-  BitToUserHandshake(const BitToUserHandshake& from);
-
-  inline BitToUserHandshake& operator=(const BitToUserHandshake& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const BitToUserHandshake& default_instance();
-
-  void Swap(BitToUserHandshake* other);
-
-  // implements Message ----------------------------------------------
-
-  BitToUserHandshake* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const BitToUserHandshake& from);
-  void MergeFrom(const BitToUserHandshake& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional int32 rpc_version = 2;
-  inline bool has_rpc_version() const;
-  inline void clear_rpc_version();
-  static const int kRpcVersionFieldNumber = 2;
-  inline ::google::protobuf::int32 rpc_version() const;
-  inline void set_rpc_version(::google::protobuf::int32 value);
-
-  // @@protoc_insertion_point(class_scope:exec.user.BitToUserHandshake)
- private:
-  inline void set_has_rpc_version();
-  inline void clear_has_rpc_version();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::int32 rpc_version_;
-
-  mutable int _cached_size_;
-  ::google::protobuf::uint32 _has_bits_[(1 + 31) / 32];
-
-  friend void  protobuf_AddDesc_User_2eproto();
-  friend void protobuf_AssignDesc_User_2eproto();
-  friend void protobuf_ShutdownFile_User_2eproto();
-
-  void InitAsDefaultInstance();
-  static BitToUserHandshake* default_instance_;
-};
-// ===================================================================
-
-
-// ===================================================================
-
-// Property
-
-// required string key = 1;
-inline bool Property::has_key() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void Property::set_has_key() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void Property::clear_has_key() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void Property::clear_key() {
-  if (key_ != &::google::protobuf::internal::kEmptyString) {
-    key_->clear();
-  }
-  clear_has_key();
-}
-inline const ::std::string& Property::key() const {
-  return *key_;
-}
-inline void Property::set_key(const ::std::string& value) {
-  set_has_key();
-  if (key_ == &::google::protobuf::internal::kEmptyString) {
-    key_ = new ::std::string;
-  }
-  key_->assign(value);
-}
-inline void Property::set_key(const char* value) {
-  set_has_key();
-  if (key_ == &::google::protobuf::internal::kEmptyString) {
-    key_ = new ::std::string;
-  }
-  key_->assign(value);
-}
-inline void Property::set_key(const char* value, size_t size) {
-  set_has_key();
-  if (key_ == &::google::protobuf::internal::kEmptyString) {
-    key_ = new ::std::string;
-  }
-  key_->assign(reinterpret_cast<const char*>(value), size);
-}
-inline ::std::string* Property::mutable_key() {
-  set_has_key();
-  if (key_ == &::google::protobuf::internal::kEmptyString) {
-    key_ = new ::std::string;
-  }
-  return key_;
-}
-inline ::std::string* Property::release_key() {
-  clear_has_key();
-  if (key_ == &::google::protobuf::internal::kEmptyString) {
-    return NULL;
-  } else {
-    ::std::string* temp = key_;
-    key_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
-    return temp;
-  }
-}
-inline void Property::set_allocated_key(::std::string* key) {
-  if (key_ != &::google::protobuf::internal::kEmptyString) {
-    delete key_;
-  }
-  if (key) {
-    set_has_key();
-    key_ = key;
-  } else {
-    clear_has_key();
-    key_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
-  }
-}
-
-// required string value = 2;
-inline bool Property::has_value() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void Property::set_has_value() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void Property::clear_has_value() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void Property::clear_value() {
-  if (value_ != &::google::protobuf::internal::kEmptyString) {
-    value_->clear();
-  }
-  clear_has_value();
-}
-inline const ::std::string& Property::value() const {
-  return *value_;
-}
-inline void Property::set_value(const ::std::string& value) {
-  set_has_value();
-  if (value_ == &::google::protobuf::internal::kEmptyString) {
-    value_ = new ::std::string;
-  }
-  value_->assign(value);
-}
-inline void Property::set_value(const char* value) {
-  set_has_value();
-  if (value_ == &::google::protobuf::internal::kEmptyString) {
-    value_ = new ::std::string;
-  }
-  value_->assign(value);
-}
-inline void Property::set_value(const char* value, size_t size) {
-  set_has_value();
-  if (value_ == &::google::protobuf::internal::kEmptyString) {
-    value_ = new ::std::string;
-  }
-  value_->assign(reinterpret_cast<const char*>(value), size);
-}
-inline ::std::string* Property::mutable_value() {
-  set_has_value();
-  if (value_ == &::google::protobuf::internal::kEmptyString) {
-    value_ = new ::std::string;
-  }
-  return value_;
-}
-inline ::std::string* Property::release_value() {
-  clear_has_value();
-  if (value_ == &::google::protobuf::internal::kEmptyString) {
-    return NULL;
-  } else {
-    ::std::string* temp = value_;
-    value_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
-    return temp;
-  }
-}
-inline void Property::set_allocated_value(::std::string* value) {
-  if (value_ != &::google::protobuf::internal::kEmptyString) {
-    delete value_;
-  }
-  if (value) {
-    set_has_value();
-    value_ = value;
-  } else {
-    clear_has_value();
-    value_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
-  }
-}
-
-// -------------------------------------------------------------------
-
-// UserProperties
-
-// repeated .exec.user.Property properties = 1;
-inline int UserProperties::properties_size() const {
-  return properties_.size();
-}
-inline void UserProperties::clear_properties() {
-  properties_.Clear();
-}
-inline const ::exec::user::Property& UserProperties::properties(int index) const {
-  return properties_.Get(index);
-}
-inline ::exec::user::Property* UserProperties::mutable_properties(int index) {
-  return properties_.Mutable(index);
-}
-inline ::exec::user::Property* UserProperties::add_properties() {
-  return properties_.Add();
-}
-inline const ::google::protobuf::RepeatedPtrField< ::exec::user::Property >&
-UserProperties::properties() const {
-  return properties_;
-}
-inline ::google::protobuf::RepeatedPtrField< ::exec::user::Property >*
-UserProperties::mutable_properties() {
-  return &properties_;
-}
-
-// -------------------------------------------------------------------
-
-// UserToBitHandshake
-
-// optional .exec.shared.RpcChannel channel = 1 [default = USER];
-inline bool UserToBitHandshake::has_channel() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void UserToBitHandshake::set_has_channel() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void UserToBitHandshake::clear_has_channel() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void UserToBitHandshake::clear_channel() {
-  channel_ = 2;
-  clear_has_channel();
-}
-inline ::exec::shared::RpcChannel UserToBitHandshake::channel() const {
-  return static_cast< ::exec::shared::RpcChannel >(channel_);
-}
-inline void UserToBitHandshake::set_channel(::exec::shared::RpcChannel value) {
-  assert(::exec::shared::RpcChannel_IsValid(value));
-  set_has_channel();
-  channel_ = value;
-}
-
-// optional bool support_listening = 2;
-inline bool UserToBitHandshake::has_support_listening() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void UserToBitHandshake::set_has_support_listening() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void UserToBitHandshake::clear_has_support_listening() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void UserToBitHandshake::clear_support_listening() {
-  support_listening_ = false;
-  clear_has_support_listening();
-}
-inline bool UserToBitHandshake::support_listening() const {
-  return support_listening_;
-}
-inline void UserToBitHandshake::set_support_listening(bool value) {
-  set_has_support_listening();
-  support_listening_ = value;
-}
-
-// optional int32 rpc_version = 3;
-inline bool UserToBitHandshake::has_rpc_version() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-inline void UserToBitHandshake::set_has_rpc_version() {
-  _has_bits_[0] |= 0x00000004u;
-}
-inline void UserToBitHandshake::clear_has_rpc_version() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-inline void UserToBitHandshake::clear_rpc_version() {
-  rpc_version_ = 0;
-  clear_has_rpc_version();
-}
-inline ::google::protobuf::int32 UserToBitHandshake::rpc_version() const {
-  return rpc_version_;
-}
-inline void UserToBitHandshake::set_rpc_version(::google::protobuf::int32 value) {
-  set_has_rpc_version();
-  rpc_version_ = value;
-}
-
-// optional .exec.shared.UserCredentials credentials = 4;
-inline bool UserToBitHandshake::has_credentials() const {
-  return (_has_bits_[0] & 0x00000008u) != 0;
-}
-inline void UserToBitHandshake::set_has_credentials() {
-  _has_bits_[0] |= 0x00000008u;
-}
-inline void UserToBitHandshake::clear_has_credentials() {
-  _has_bits_[0] &= ~0x00000008u;
-}
-inline void UserToBitHandshake::clear_credentials() {
-  if (credentials_ != NULL) credentials_->::exec::shared::UserCredentials::Clear();
-  clear_has_credentials();
-}
-inline const ::exec::shared::UserCredentials& UserToBitHandshake::credentials() const {
-  return credentials_ != NULL ? *credentials_ : *default_instance_->credentials_;
-}
-inline ::exec::shared::UserCredentials* UserToBitHandshake::mutable_credentials() {
-  set_has_credentials();
-  if (credentials_ == NULL) credentials_ = new ::exec::shared::UserCredentials;
-  return credentials_;
-}
-inline ::exec::shared::UserCredentials* UserToBitHandshake::release_credentials() {
-  clear_has_credentials();
-  ::exec::shared::UserCredentials* temp = credentials_;
-  credentials_ = NULL;
-  return temp;
-}
-inline void UserToBitHandshake::set_allocated_credentials(::exec::shared::UserCredentials* credentials) {
-  delete credentials_;
-  credentials_ = credentials;
-  if (credentials) {
-    set_has_credentials();
-  } else {
-    clear_has_credentials();
-  }
-}
-
-// optional .exec.user.UserProperties properties = 5;
-inline bool UserToBitHandshake::has_properties() const {
-  return (_has_bits_[0] & 0x00000010u) != 0;
-}
-inline void UserToBitHandshake::set_has_properties() {
-  _has_bits_[0] |= 0x00000010u;
-}
-inline void UserToBitHandshake::clear_has_properties() {
-  _has_bits_[0] &= ~0x00000010u;
-}
-inline void UserToBitHandshake::clear_properties() {
-  if (properties_ != NULL) properties_->::exec::user::UserProperties::Clear();
-  clear_has_properties();
-}
-inline const ::exec::user::UserProperties& UserToBitHandshake::properties() const {
-  return properties_ != NULL ? *properties_ : *default_instance_->properties_;
-}
-inline ::exec::user::UserProperties* UserToBitHandshake::mutable_properties() {
-  set_has_properties();
-  if (properties_ == NULL) properties_ = new ::exec::user::UserProperties;
-  return properties_;
-}
-inline ::exec::user::UserProperties* UserToBitHandshake::release_properties() {
-  clear_has_properties();
-  ::exec::user::UserProperties* temp = properties_;
-  properties_ = NULL;
-  return temp;
-}
-inline void UserToBitHandshake::set_allocated_properties(::exec::user::UserProperties* properties) {
-  delete properties_;
-  properties_ = properties;
-  if (properties) {
-    set_has_properties();
-  } else {
-    clear_has_properties();
-  }
-}
-
-// optional bool support_complex_types = 6 [default = false];
-inline bool UserToBitHandshake::has_support_complex_types() const {
-  return (_has_bits_[0] & 0x00000020u) != 0;
-}
-inline void UserToBitHandshake::set_has_support_complex_types() {
-  _has_bits_[0] |= 0x00000020u;
-}
-inline void UserToBitHandshake::clear_has_support_complex_types() {
-  _has_bits_[0] &= ~0x00000020u;
-}
-inline void UserToBitHandshake::clear_support_complex_types() {
-  support_complex_types_ = false;
-  clear_has_support_complex_types();
-}
-inline bool UserToBitHandshake::support_complex_types() const {
-  return support_complex_types_;
-}
-inline void UserToBitHandshake::set_support_complex_types(bool value) {
-  set_has_support_complex_types();
-  support_complex_types_ = value;
-}
-
-// -------------------------------------------------------------------
-
-// RequestResults
-
-// optional .exec.shared.QueryId query_id = 1;
-inline bool RequestResults::has_query_id() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void RequestResults::set_has_query_id() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void RequestResults::clear_has_query_id() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void RequestResults::clear_query_id() {
-  if (query_id_ != NULL) query_id_->::exec::shared::QueryId::Clear();
-  clear_has_query_id();
-}
-inline const ::exec::shared::QueryId& RequestResults::query_id() const {
-  return query_id_ != NULL ? *query_id_ : *default_instance_->query_id_;
-}
-inline ::exec::shared::QueryId* RequestResults::mutable_query_id() {
-  set_has_query_id();
-  if (query_id_ == NULL) query_id_ = new ::exec::shared::QueryId;
-  return query_id_;
-}
-inline ::exec::shared::QueryId* RequestResults::release_query_id() {
-  clear_has_query_id();
-  ::exec::shared::QueryId* temp = query_id_;
-  query_id_ = NULL;
-  return temp;
-}
-inline void RequestResults::set_allocated_query_id(::exec::shared::QueryId* query_id) {
-  delete query_id_;
-  query_id_ = query_id;
-  if (query_id) {
-    set_has_query_id();
-  } else {
-    clear_has_query_id();
-  }
-}
-
-// optional int32 maximum_responses = 2;
-inline bool RequestResults::has_maximum_responses() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void RequestResults::set_has_maximum_responses() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void RequestResults::clear_has_maximum_responses() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void RequestResults::clear_maximum_responses() {
-  maximum_responses_ = 0;
-  clear_has_maximum_responses();
-}
-inline ::google::protobuf::int32 RequestResults::maximum_responses() const {
-  return maximum_responses_;
-}
-inline void RequestResults::set_maximum_responses(::google::protobuf::int32 value) {
-  set_has_maximum_responses();
-  maximum_responses_ = value;
-}
-
-// -------------------------------------------------------------------
-
-// RunQuery
-
-// optional .exec.user.QueryResultsMode results_mode = 1;
-inline bool RunQuery::has_results_mode() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void RunQuery::set_has_results_mode() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void RunQuery::clear_has_results_mode() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void RunQuery::clear_results_mode() {
-  results_mode_ = 1;
-  clear_has_results_mode();
-}
-inline ::exec::user::QueryResultsMode RunQuery::results_mode() const {
-  return static_cast< ::exec::user::QueryResultsMode >(results_mode_);
-}
-inline void RunQuery::set_results_mode(::exec::user::QueryResultsMode value) {
-  assert(::exec::user::QueryResultsMode_IsValid(value));
-  set_has_results_mode();
-  results_mode_ = value;
-}
-
-// optional .exec.shared.QueryType type = 2;
-inline bool RunQuery::has_type() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void RunQuery::set_has_type() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void RunQuery::clear_has_type() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void RunQuery::clear_type() {
-  type_ = 1;
-  clear_has_type();
-}
-inline ::exec::shared::QueryType RunQuery::type() const {
-  return static_cast< ::exec::shared::QueryType >(type_);
-}
-inline void RunQuery::set_type(::exec::shared::QueryType value) {
-  assert(::exec::shared::QueryType_IsValid(value));
-  set_has_type();
-  type_ = value;
-}
-
-// optional string plan = 3;
-inline bool RunQuery::has_plan() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-inline void RunQuery::set_has_plan() {
-  _has_bits_[0] |= 0x00000004u;
-}
-inline void RunQuery::clear_has_plan() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-inline void RunQuery::clear_plan() {
-  if (plan_ != &::google::protobuf::internal::kEmptyString) {
-    plan_->clear();
-  }
-  clear_has_plan();
-}
-inline const ::std::string& RunQuery::plan() const {
-  return *plan_;
-}
-inline void RunQuery::set_plan(const ::std::string& value) {
-  set_has_plan();
-  if (plan_ == &::google::protobuf::internal::kEmptyString) {
-    plan_ = new ::std::string;
-  }
-  plan_->assign(value);
-}
-inline void RunQuery::set_plan(const char* value) {
-  set_has_plan();
-  if (plan_ == &::google::protobuf::internal::kEmptyString) {
-    plan_ = new ::std::string;
-  }
-  plan_->assign(value);
-}
-inline void RunQuery::set_plan(const char* value, size_t size) {
-  set_has_plan();
-  if (plan_ == &::google::protobuf::internal::kEmptyString) {
-    plan_ = new ::std::string;
-  }
-  plan_->assign(reinterpret_cast<const char*>(value), size);
-}
-inline ::std::string* RunQuery::mutable_plan() {
-  set_has_plan();
-  if (plan_ == &::google::protobuf::internal::kEmptyString) {
-    plan_ = new ::std::string;
-  }
-  return plan_;
-}
-inline ::std::string* RunQuery::release_plan() {
-  clear_has_plan();
-  if (plan_ == &::google::protobuf::internal::kEmptyString) {
-    return NULL;
-  } else {
-    ::std::string* temp = plan_;
-    plan_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
-    return temp;
-  }
-}
-inline void RunQuery::set_allocated_plan(::std::string* plan) {
-  if (plan_ != &::google::protobuf::internal::kEmptyString) {
-    delete plan_;
-  }
-  if (plan) {
-    set_has_plan();
-    plan_ = plan;
-  } else {
-    clear_has_plan();
-    plan_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
-  }
-}
-
-// -------------------------------------------------------------------
-
-// BitToUserHandshake
-
-// optional int32 rpc_version = 2;
-inline bool BitToUserHandshake::has_rpc_version() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void BitToUserHandshake::set_has_rpc_version() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void BitToUserHandshake::clear_has_rpc_version() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void BitToUserHandshake::clear_rpc_version() {
-  rpc_version_ = 0;
-  clear_has_rpc_version();
-}
-inline ::google::protobuf::int32 BitToUserHandshake::rpc_version() const {
-  return rpc_version_;
-}
-inline void BitToUserHandshake::set_rpc_version(::google::protobuf::int32 value) {
-  set_has_rpc_version();
-  rpc_version_ = value;
-}
-
-
-// @@protoc_insertion_point(namespace_scope)
-
-}  // namespace user
-}  // namespace exec
-
-#ifndef SWIG
-namespace google {
-namespace protobuf {
-
-template <>
-inline const EnumDescriptor* GetEnumDescriptor< ::exec::user::RpcType>() {
-  return ::exec::user::RpcType_descriptor();
-}
-template <>
-inline const EnumDescriptor* GetEnumDescriptor< ::exec::user::QueryResultsMode>() {
-  return ::exec::user::QueryResultsMode_descriptor();
-}
-
-}  // namespace google
-}  // namespace protobuf
-#endif  // SWIG
-
-// @@protoc_insertion_point(global_scope)
-
-#endif  // PROTOBUF_User_2eproto__INCLUDED

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4862b2b0/contrib/native/client/src/include/drill/recordBatch.hpp
----------------------------------------------------------------------
diff --git a/contrib/native/client/src/include/drill/recordBatch.hpp b/contrib/native/client/src/include/drill/recordBatch.hpp
index 61db88c..1c89cea 100644
--- a/contrib/native/client/src/include/drill/recordBatch.hpp
+++ b/contrib/native/client/src/include/drill/recordBatch.hpp
@@ -30,7 +30,8 @@
 #include <boost/lexical_cast.hpp>
 #include "drill/common.hpp"
 #include "drill/decimalUtils.hpp"
-#include "drill/protobuf/User.pb.h"
+#include "drill/protobuf/Types.pb.h"
+
 
 #if defined _WIN32 || defined __CYGWIN__
   #ifdef DRILL_CLIENT_EXPORTS
@@ -50,6 +51,13 @@
   #endif
 #endif
 
+namespace exec{
+    namespace shared {
+        class SerializedField;
+        class RecordBatchDef;
+        class QueryResult;
+    };
+};
 
 namespace Drill {
 
@@ -759,16 +767,9 @@ typedef NullableValueVectorTyped<IntervalYearHolder, ValueVectorIntervalYear>  N
 
 class DECLSPEC_DRILL_CLIENT FieldMetadata{
     public:
+
         FieldMetadata(){};
-        void set(const exec::shared::SerializedField& f){
-            m_name=f.name_part().name();
-            m_minorType=f.major_type().minor_type();
-            m_dataMode=f.major_type().mode();
-            m_valueCount=f.value_count();
-            m_scale=f.major_type().scale();
-            m_precision=f.major_type().precision();
-            m_bufferLength=f.buffer_length();
-        }
+        void set(const exec::shared::SerializedField& f);
         const std::string& getName() const{ return m_name;}
         common::MinorType getMinorType() const{ return m_minorType;}
         common::DataMode getDataMode() const{return m_dataMode;}
@@ -839,16 +840,7 @@ class DECLSPEC_DRILL_CLIENT RecordBatch{
         //m_allocatedBuffer is the memory block allocated to hold the incoming RPC message. Record Batches operate on
         //slices of the allocated buffer. The first slice (the first Field Batch), begins at m_buffer. Data in the
         //allocated buffer before m_buffer is mostly the RPC header, and the QueryResult object.
-        RecordBatch(exec::shared::QueryResult* pResult, AllocatedBufferPtr r, ByteBuf_t b)
-                :m_fieldDefs(new(std::vector<Drill::FieldMetadata*>)){
-            m_pQueryResult=pResult;
-            m_pRecordBatchDef=&pResult->def();
-            m_numRecords=pResult->row_count();
-            m_allocatedBuffer=r;
-            m_buffer=b;
-            m_numFields=pResult->def().field_size();
-            m_bHasSchemaChanged=false;
-        }
+        RecordBatch(exec::shared::QueryResult* pResult, AllocatedBufferPtr r, ByteBuf_t b);
 
         ~RecordBatch();
 
@@ -860,8 +852,8 @@ class DECLSPEC_DRILL_CLIENT RecordBatch{
 
         size_t getNumRecords(){ return m_numRecords;}
         std::vector<FieldBatch*>& getFields(){ return m_fields;}
-        size_t getNumFields() { return m_pRecordBatchDef->field_size(); }
-        bool isLastChunk() { return m_pQueryResult->is_last_chunk(); }
+        size_t getNumFields();
+        bool isLastChunk();
 
         boost::shared_ptr<std::vector<Drill::FieldMetadata*> > getColumnDefs(){ return m_fieldDefs;}
 

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4862b2b0/contrib/native/client/src/protobuf/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/contrib/native/client/src/protobuf/CMakeLists.txt b/contrib/native/client/src/protobuf/CMakeLists.txt
index 1d0b3af..474d2f6 100644
--- a/contrib/native/client/src/protobuf/CMakeLists.txt
+++ b/contrib/native/client/src/protobuf/CMakeLists.txt
@@ -58,13 +58,13 @@ set (PROTO_CPPHDR_FILES
     ${PROTO_HDR_DIR}/BitData.pb.h
     ${PROTO_HDR_DIR}/ExecutionProtos.pb.h
     ${PROTO_HDR_DIR}/SchemaDef.pb.h
+    ${PROTO_HDR_DIR}/User.pb.h
     )
 
 set (PROTO_INC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include/drill/protobuf)
 
 set (PROTO_CPPINC_FILES
     ${PROTO_INC_DIR}/Types.pb.h
-    ${PROTO_INC_DIR}/User.pb.h
     )
 
 set(ProtoIncludes ${PROTO_CPPINC_FILES} )