I suspect that your build is mixing your downloaded 3.12.3 protobuf source with a different protobuf version installed by your distro's package manager. I would recommend making sure that your project is only compiling against one version of protobuf. Also, I don't think this is related but you might want to use 3.13.0 or 3.12.4 instead of 3.12.3. We made a mistake with 3.12.3 and published tar.gz files on the GitHub release page that were generated from the wrong Git commit.
On Mon, Aug 24, 2020 at 1:56 PM Test Last <[email protected]> wrote: > Hi everyone > > I ported a ODBC Driver that works in an RPC fashion from windows to linux. > The port was actually quite trivial since the code was already Cross OS > Friendly. > The protobuf has never been an issue on Windows side. The protobuf package > was V3.12.3 and was also installed by visual studio. > > However when I download Protobuf C++ and compile them on both Ubuntu and > CentOS. And compile my program I get strange errors ALWAYS resulting from > "repeated_field.h. > Sometimes the error is on line 1750 and other times its on 1744 but no > matter what version I compile or what OS I use it just never seems to want > to process anything that needs to use "repeated_field.h" . I will paste my > backtrace and also my ldd of the driver. With the makefile I use to compile > the protobufs. > > This is a backtrace of a string of data that needs to be parsed. This > always breaks. > The class its trying to parse into is -> ExecuteResponse : Please check > the proto files. > This is the backtrace. > > Program received signal SIGSEGV, Segmentation fault. > 0x00007ffff6369cc4 in > google::protobuf::internal::RepeatedPtrFieldBase::Add<google::protobuf::RepeatedPtrField<ColumnValue>::TypeHandler> > (this=0x68e8d0, prototype=0x0) > at /usr/local/include/google/protobuf/repeated_field.h:1744 > 1744 if (rep_ != NULL && current_size_ < rep_->allocated_size) { > (gdb) backtrace > #0 0x00007ffff6369cc4 in > google::protobuf::internal::RepeatedPtrFieldBase::Add<google::protobuf::RepeatedPtrField<ColumnValue>::TypeHandler> > (this=0x68e8d0, prototype=0x0) > at /usr/local/include/google/protobuf/repeated_field.h:1744 > #1 0x00007ffff6366e39 in > google::protobuf::RepeatedPtrField<ColumnValue>::Add (this=0x68e8d0) at > /usr/local/include/google/protobuf/repeated_field.h:2195 > #2 0x00007ffff63646fa in Row::_internal_add_value (this=0x68e8c0) at > common.pb.h:5781 > #3 0x00007ffff635697f in Row::_InternalParse (this=0x68e8c0, > ptr=0x67c5f0 "*\n\023\b\025\032\017Alex", '*' <repeats 11 times>, > "\"\023\b\025\032\017Alex", '*' <repeats 11 times>, > "\n,\n\024\b\025\032\020a***oum.br\"\024\b\025\032 > \020a***com.br > \n\030\n\n\b\025\032\006Brazil\"\n\b\025\032\006Brazil\n\026\n\t\b\032\032\005\063\067.62\"\t\b\032\032\005\063\067.62\032\234\001\n*\n\023\b\025\032\017Edua" > , '*' <repeats 11 times>, "\"\023\b\025\032\017Edua", '*' <repeats 11 > times>, "\n<\n\034\b\025\032\030e*****"..., ctx=0x7fffffffce30) at > common.pb.cc:3927 > #4 0x00007ffff6367db6 in > google::protobuf::internal::ParseContext::ParseMessage<Row> > (this=0x7fffffffce30, msg=0x68e8c0, > ptr=0x67c5ef "\n*\n\023\b\025\032\017Alex", '*' <repeats 11 times>, > "\"\023\b\025\032\017Alex", '*' <repeats 11 times>, > "\n,\n\024\b\025\032\020a*com.br\"\024\b\025\0 > 32\020a***oom.br > \n\030\n\n\b\025\032\006Brazil\"\n\b\025\032\006Brazil\n\026\n\t\b\032\032\005\063\067.62\"\t\b\032\032\005\063\067.62\032\234\001\n*\n\023\b\025\032\017Edu > a", '*' <repeats 11 times>, "\"\023\b\025\032\017Edua", '*' <repeats 11 > times>, "\n<\n\034\b\025\032\030e****"...) at > /usr/local/include/google/protobuf/parse_context.h:614 > #5 0x00007ffff635596f in Frame::_InternalParse (this=0x68d830, > ptr=0x67c5ed "\214\001\n*\n\023\b\025\032\017Alex", '*' <repeats 11 > times>, "\"\023\b\025\032\017Alex", '*' <repeats 11 times>, > "\n,\n\024\b\025\032\020a*l.com.br\"\024 > \b\025\032\020aom.br > \n\030\n\n\b\025\032\006Brazil\"\n\b\025\032\006Brazil\n\026\n\t\b\032\032\005\063\067.62\"\t\b\032\032\005\063\067.62\032\234\001\n*\n\023\b\025\03 > 2\017Edua", '*' <repeats 11 times>, "\"\023\b\025\032\017Edua", '*' > <repeats 11 times>, "\n<\n\034\b\025\032\030e**"..., ctx=0x7fffffffce30) at > common.pb.cc:3688 > #6 0x00007ffff63ac758 in > google::protobuf::internal::ParseContext::ParseMessage<Frame> > (this=0x7fffffffce30, msg=0x68d830, > ptr=0x67c5ea "\020\001\032\214\001\n*\n\023\b\025\032\017Alex", '*' > <repeats 11 times>, "\"\023\b\025\032\017Alex", '*' <repeats 11 times>, > "\n,\n\024\b\025\032\020a*l. > com.br\"\024\b\025\032\020a****l.com.br > \n\030\n\n\b\025\032\006Brazil\"\n\b\025\032\006Brazil\n\026\n\t\b\032\032\005\063\067.62\"\t\b\032\032\005\063\067.62\032\234\001\n*\n\ > 023\b\025\032\017Edua", '*' <repeats 11 times>, > "\"\023\b\025\032\017Edua", '*' <repeats 11 times>, > "\n<\n\034\b\025\032\030"...) > at /usr/local/include/google/protobuf/parse_context.h:614 > #7 0x00007ffff6395e79 in ResultSetResponse::_InternalParse > (this=0x674310, > ptr=0x67c5e8 "\215\006\020\001\032\214\001\n*\n\023\b\025\032\017Alex", > '*' <repeats 11 times>, "\"\023\b\025\032\017Alex", '*' <repeats 11 times>, > "\n,\n\024\b\025\032\020a* > **com.br\"\024\b\025\032\020a*om.br > \n\030\n\n\b\025\032\006Brazil\"\n\b\025\032\006Brazil\n\026\n\t\b\032\032\005\063\067.62\"\t\b\032\032\005\063\067.62\032\234\0 > 01\n*\n\023\b\025\032\017Edua", '*' <repeats 11 times>, > "\"\023\b\025\032\017Edua", '*' <repeats 11 times>, "\n<\n\034\b\025"..., > ctx=0x7fffffffce30) at response.pb.cc:788 > #8 0x00007ffff63aca34 in > google::protobuf::internal::ParseContext::ParseMessage<ResultSetResponse> > (this=0x7fffffffce30, msg=0x674310, > ptr=0x67c4a3 "\n\b0pOR9266\020B\030\001\"\263\002\nJ \001\060\001@ > \377\001J\bfullnameR\bfullname`\377\001z\005Spark\200\001\001\232\001\020java.lang.String\242\001\f\b\f\022\ > 006STRING\030\025\nF\b\001 > \001\060\001@\377\001J\005emailR\005email`\377\001z\005Spark\200\001\001\232\001\020java.lang.String\242\001\f\b\f\022\006STRING\030\025\nJ\b\002 > \001\ > 060\001@\377\001J\acountryR\acountry`\377\001z\005S"...) at > /usr/local/include/google/protobuf/parse_context.h:614 > #9 0x00007ffff6397670 in ExecuteResponse::_InternalParse > (this=0x7fffffffd300, > ptr=0x67c4a1 "\205\t\n\b0pOR9266\020B\030\001\"\263\002\nJ \001\060\001@ > \377\001J\bfullnameR\bfullname`\377\001z\005Spark\200\001\001\232\001\020java.lang.String\242\001\f\b\ > f\022\006STRING\030\025\nF\b\001 > \001\060\001\377\001J\005emailR\005email`\377\001z\005Spark\200\001\001\232\001\020java.lang.String\242\001\f\b\f\022\006STRING\030\025\nJ\b\002 > \001\060\001\377\001J\acountryR\acountry`\377\001z"..., > ctx=0x7fffffffce30) at response.pb.cc:1135 > #10 0x00007ffff55350a0 in google::protobuf::internal::MergeFromImpl<false> > (input=..., msg=0x7fffffffd300, > parse_flags=google::protobuf::MessageLite::kParse) > at ./google/protobuf/parse_context.h:224 > #11 0x00007ffff62ad4b7 in proto::helper::parseNonStream<ExecuteResponse> > (inc=0x7fffffffd0f0, outClass=0x7fffffffd300) at transProto.h:32 > #12 0x00007ffff62a88b6 in ConnectEngine::PrepareAndExecuteReq > (this=0x671170, query="select * from VidDemo ", PERResponse=0x7fffffffd300, > maxRows=9223372036854775807, > frameMaxSize=2147483647 <(214)%20748-3647>, _statementId=66) at > ConnectEngine.cpp:639 > #13 0x00007ffff62b462c in Consolidation::executeQuery (this=0x6710b0, > query="select * from VidDemo ") at Consolidation.cpp:173 > #14 0x00007ffff62f3f9e in Statement::requestNextPackOfResultSets > (this=0x68bfe0, mutator=...) at statement.cpp:215 > > //THIS IS MY MAKEFILE > > LDFLAGS = -L/usr/local/lib `pkg-config --libs protobuf grpc++`\ > -Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed\ > -ldl > > CXX = g++ > CPPFLAGS += `pkg-config --cflags protobuf grpc` > CXXFLAGS += -std=c++14 > > DEBUG = -g > > GRPC_CPP_PLUGIN = grpc_cpp_plugin > GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)` > > all: common request response common.o request.o response.o > > common: > protoc -I=. --cpp_out=. ./common.proto > > request: > protoc -I=. --cpp_out=. ./request.proto > > response: > protoc -I=. --cpp_out=. ./response.proto > > common.o: common.pb.cc > $(CXX) $(DEBUG) -fPIC -c $^ $(LDFLAGS) -o $@ $(CXXFLAGS) > > request.o: request.pb.cc > $(CXX) $(DEBUG) -fPIC -c $^ $(LDFLAGS) -o $@ $(CXXFLAGS) > > response.o: response.pb.cc > $(CXX) $(DEBUG) -fPIC -c $^ $(LDFLAGS) -o $@ $(CXXFLAGS) > > clean: > rm -f *.o *.pb.cc *.pb.h client > > //This is my 3 Proto files. Its part of the Calcite Avatica package. > //COMMON.PROTO > syntax = "proto3"; > //option cc_generic_services = true; > option cc_generic_services = false; > > //option csharp_namespace = "Calcite.Avatica"; > > // Details about a connection > message ConnectionProperties { > bool is_dirty = 1; > bool auto_commit = 2; > bool has_auto_commit = 7; // field is a Boolean, need to discern null and > default value > bool read_only = 3; > bool has_read_only = 8; // field is a Boolean, need to discern null and > default value > uint32 transaction_isolation = 4; > string catalog = 5; > string schema = 6; > } > > // Statement handle > message StatementHandle { > string connection_id = 1; > uint32 id = 2; > Signature signature = 3; > } > > // Results of preparing a statement > message Signature { > repeated ColumnMetaData columns = 1; > string sql = 2; > repeated AvaticaParameter parameters = 3; > CursorFactory cursor_factory = 4; > StatementType statementType = 5; > } > > // Has to be consistent with Meta.StatementType > enum StatementType { > SELECT = 0; > INSERT = 1; > UPDATE = 2; > DELETE = 3; > UPSERT = 4; > MERGE = 5; > OTHER_DML = 6; > CREATE = 7; > DROP = 8; > ALTER = 9; > OTHER_DDL = 10; > CALL = 11; > } > > message ColumnMetaData { > uint32 ordinal = 1; > bool auto_increment = 2; > bool case_sensitive = 3; > bool searchable = 4; > bool currency = 5; > uint32 nullable = 6; > bool signed = 7; > uint32 display_size = 8; > string label = 9; > string column_name = 10; > string schema_name = 11; > uint32 precision = 12; > uint32 scale = 13; > string table_name = 14; > string catalog_name = 15; > bool read_only = 16; > bool writable = 17; > bool definitely_writable = 18; > string column_class_name = 19; > AvaticaType type = 20; > } > > enum Rep { > PRIMITIVE_BOOLEAN = 0; > PRIMITIVE_BYTE = 1; > PRIMITIVE_CHAR = 2; > PRIMITIVE_SHORT = 3; > PRIMITIVE_INT = 4; > PRIMITIVE_LONG = 5; > PRIMITIVE_FLOAT = 6; > PRIMITIVE_DOUBLE = 7; > BOOLEAN = 8; > BYTE = 9; > CHARACTER = 10; > SHORT = 11; > INTEGER = 12; > LONG = 13; > FLOAT = 14; > DOUBLE = 15; > BIG_INTEGER = 25; > BIG_DECIMAL = 26; > JAVA_SQL_TIME = 16; > JAVA_SQL_TIMESTAMP = 17; > JAVA_SQL_DATE = 18; > JAVA_UTIL_DATE = 19; > BYTE_STRING = 20; > STRING = 21; > NUMBER = 22; > OBJECT = 23; > NULL = 24; > ARRAY = 27; > STRUCT = 28; > MULTISET = 29; > } > > // Base class for a column type > message AvaticaType { > uint32 id = 1; > string name = 2; > Rep rep = 3; > > repeated ColumnMetaData columns = 4; // Only present when name = STRUCT > AvaticaType component = 5; // Only present when name = ARRAY > } > > // Metadata for a parameter > message AvaticaParameter { > bool signed = 1; > uint32 precision = 2; > uint32 scale = 3; > uint32 parameter_type = 4; > string type_name = 5; > string class_name = 6; > string name = 7; > } > > // Information necessary to convert an Iterable into a Calcite Cursor > message CursorFactory { > enum Style { > OBJECT = 0; > RECORD = 1; > RECORD_PROJECTION = 2; > ARRAY = 3; > LIST = 4; > MAP = 5; > } > > Style style = 1; > string class_name = 2; > repeated string field_names = 3; > } > > // A collection of rows > message Frame { > uint64 offset = 1; > bool done = 2; > repeated Row rows = 3; > } > > // A row is a collection of values > message Row { > repeated ColumnValue value = 1; > } > > // Database property, list of functions the database provides for a > certain operation > message DatabaseProperty { > string name = 1; > repeated string functions = 2; > } > > // Message which encapsulates another message to support a single RPC > endpoint > message WireMessage { > string name = 1; > bytes wrapped_message = 2; > } > > // A value might be a TypedValue or an Array of TypedValue's > message ColumnValue { > repeated TypedValue value = 1; // deprecated, use array_value or > scalar_value > repeated TypedValue array_value = 2; > bool has_array_value = 3; // Is an array value set? > TypedValue scalar_value = 4; > } > > // Generic wrapper to support any SQL type. Struct-like to work around no > polymorphism construct. > message TypedValue { > Rep type = 1; // The actual type that was serialized in the general > attribute below > > bool bool_value = 2; // boolean > string string_value = 3; // char/varchar > sint64 number_value = 4; // var-len encoding lets us shove anything from > byte to long > // includes numeric types and date/time types. > bytes bytes_value = 5; // binary/varbinary > double double_value = 6; // big numbers > bool null = 7; // a null object > > repeated TypedValue array_value = 8; // The Array > Rep component_type = 9; // If an Array, the representation for the array > values > > bool implicitly_null = 10; // Differentiate between explicitly null > (user-set) and implicitly null > // (un-set by the user) > } > > // The severity of some unexpected outcome to an operation. > // Protobuf enum values must be unique across all other enums > enum Severity { > UNKNOWN_SEVERITY = 0; > FATAL_SEVERITY = 1; > ERROR_SEVERITY = 2; > WARNING_SEVERITY = 3; > } > > // Enumeration corresponding to DatabaseMetaData operations > enum MetaDataOperation { > GET_ATTRIBUTES = 0; > GET_BEST_ROW_IDENTIFIER = 1; > GET_CATALOGS = 2; > GET_CLIENT_INFO_PROPERTIES = 3; > GET_COLUMN_PRIVILEGES = 4; > GET_COLUMNS = 5; > GET_CROSS_REFERENCE = 6; > GET_EXPORTED_KEYS = 7; > GET_FUNCTION_COLUMNS = 8; > GET_FUNCTIONS = 9; > GET_IMPORTED_KEYS = 10; > GET_INDEX_INFO = 11; > GET_PRIMARY_KEYS = 12; > GET_PROCEDURE_COLUMNS = 13; > GET_PROCEDURES = 14; > GET_PSEUDO_COLUMNS = 15; > GET_SCHEMAS = 16; > GET_SCHEMAS_WITH_ARGS = 17; > GET_SUPER_TABLES = 18; > GET_SUPER_TYPES = 19; > GET_TABLE_PRIVILEGES = 20; > GET_TABLES = 21; > GET_TABLE_TYPES = 22; > GET_TYPE_INFO = 23; > GET_UDTS = 24; > GET_VERSION_COLUMNS = 25; > } > > // Represents the breadth of arguments to DatabaseMetaData functions > message MetaDataOperationArgument { > enum ArgumentType { > STRING = 0; > BOOL = 1; > INT = 2; > REPEATED_STRING = 3; > REPEATED_INT = 4; > NULL = 5; > } > > string string_value = 1; > bool bool_value = 2; > sint32 int_value = 3; > repeated string string_array_values = 4; > repeated sint32 int_array_values = 5; > ArgumentType type = 6; > } > > enum StateType { > SQL = 0; > METADATA = 1; > } > > message QueryState { > StateType type = 1; > string sql = 2; > MetaDataOperation op = 3; > repeated MetaDataOperationArgument args = 4; > bool has_args = 5; > bool has_sql = 6; > bool has_op = 7; > } > > //REQUESTER.PROTO > syntax = "proto3"; > option cc_generic_services = false; > > //option java_package = "org.apache.calcite.avatica.proto"; > > import "common.proto"; > > // Request for Meta#getCatalogs() > message CatalogsRequest { > string connection_id = 1; > } > > // Request for Meta#getDatabaseProperties() > message DatabasePropertyRequest { > string connection_id = 1; > } > > // Request for Meta#getSchemas(String, > org.apache.calcite.avatica.Meta.Pat)} > message SchemasRequest { > string catalog = 1; > string schema_pattern = 2; > string connection_id = 3; > } > > // Request for Request for Meta#getTables(String, > org.apache.calcite.avatica.Meta.Pat, > // org.apache.calcite.avatica.Meta.Pat, java.util.List) > message TablesRequest { > string catalog = 1; > string schema_pattern = 2; > string table_name_pattern = 3; > repeated string type_list = 4; > bool has_type_list = 6; // Having an empty type_list is distinct from a > null type_list > string connection_id = 7; > } > > // Request for Meta#getTableTypes() > message TableTypesRequest { > string connection_id = 1; > } > > // Request for Meta#getColumns(String, org.apache.calcite.avatica.Meta.Pat, > // org.apache.calcite.avatica.Meta.Pat, > org.apache.calcite.avatica.Meta.Pat). > message ColumnsRequest { > string catalog = 1; > string schema_pattern = 2; > string table_name_pattern = 3; > string column_name_pattern = 4; > string connection_id = 5; > } > > // Request for Meta#getTypeInfo() > message TypeInfoRequest { > string connection_id = 1; > } > > // Request for Meta#prepareAndExecute(Meta.StatementHandle, String, long, > Meta.PrepareCallback) > message PrepareAndExecuteRequest { > string connection_id = 1; > string sql = 2; > uint64 max_row_count = 3; // Deprecated > uint32 statement_id = 4; > int64 max_rows_total = 5; // The maximum number of rows that will be > allowed for this query > int32 first_frame_max_size = 6; // The maximum number of rows that will be > returned in the > // first Frame returned for this query. > } > > // Request for Meta.prepare(Meta.ConnectionHandle, String, long) > message PrepareRequest { > string connection_id = 1; > string sql = 2; > uint64 max_row_count = 3; // Deprecated > int64 max_rows_total = 4; // The maximum number of rows that will be > allowed for this query > } > > // Request for Meta#fetch(Meta.StatementHandle, List, long, int) > message FetchRequest { > string connection_id = 1; > uint32 statement_id = 2; > uint64 offset = 3; > uint32 fetch_max_row_count = 4; // Maximum number of rows to be returned > in the frame. Negative means no limit. Deprecated! > int32 frame_max_size = 5; > } > > // Request for Meta#createStatement(Meta.ConnectionHandle) > message CreateStatementRequest { > string connection_id = 1; > } > > // Request for Meta#closeStatement(Meta.StatementHandle) > message CloseStatementRequest { > string connection_id = 1; > uint32 statement_id = 2; > } > > // Request for Meta#openConnection(Meta.ConnectionHandle, Map<String, > String>) > message OpenConnectionRequest { > string connection_id = 1; > map<string, string> info = 2; > } > > // Request for Meta#closeConnection(Meta.ConnectionHandle) > message CloseConnectionRequest { > string connection_id = 1; > } > > message ConnectionSyncRequest { > string connection_id = 1; > ConnectionProperties conn_props = 2; > } > > // Request for Meta#execute(Meta.ConnectionHandle, list, long) > message ExecuteRequest { > StatementHandle statementHandle = 1; > repeated TypedValue parameter_values = 2; > uint64 deprecated_first_frame_max_size = 3; // Deprecated, use the signed > int instead. > bool has_parameter_values = 4; > int32 first_frame_max_size = 5; // The maximum number of rows to return in > the first Frame > } > > > message SyncResultsRequest { > string connection_id = 1; > uint32 statement_id = 2; > QueryState state = 3; > uint64 offset = 4; > } > > // Request to invoke a commit on a Connection > message CommitRequest { > string connection_id = 1; > } > > // Request to invoke rollback on a Connection > message RollbackRequest { > string connection_id = 1; > } > > // Request to prepare and execute a collection of sql statements. > message PrepareAndExecuteBatchRequest { > string connection_id = 1; > uint32 statement_id = 2; > repeated string sql_commands = 3; > } > > // Each command is a list of TypedValues > message UpdateBatch { > repeated TypedValue parameter_values = 1; > } > > message ExecuteBatchRequest { > string connection_id = 1; > uint32 statement_id = 2; > repeated UpdateBatch updates = 3; // A batch of updates is a > list<list<typevalue>> > } > > //RESPONSE.PROTO > syntax = "proto3"; > > //option java_package = "org.apache.calcite.avatica.proto"; > > import "common.proto"; > > // Response that contains a result set. > message ResultSetResponse { > string connection_id = 1; > uint32 statement_id = 2; > bool own_statement = 3; > Signature signature = 4; > Frame first_frame = 5; > uint64 update_count = 6; // -1 for normal result sets, else this response > contains a dummy result set > // with no signature nor other data. > RpcMetadata metadata = 7; > } > > // Response to PrepareAndExecuteRequest > message ExecuteResponse { > repeated ResultSetResponse results = 1; > bool missing_statement = 2; // Did the request fail because of no-cached > statement > RpcMetadata metadata = 3; > } > > // Response to PrepareRequest > message PrepareResponse { > StatementHandle statement = 1; > RpcMetadata metadata = 2; > } > > // Response to FetchRequest > message FetchResponse { > Frame frame = 1; > bool missing_statement = 2; // Did the request fail because of no-cached > statement > bool missing_results = 3; // Did the request fail because of a > cached-statement w/o ResultSet > RpcMetadata metadata = 4; > } > > // Response to CreateStatementRequest > message CreateStatementResponse { > string connection_id = 1; > uint32 statement_id = 2; > RpcMetadata metadata = 3; > } > > // Response to CloseStatementRequest > message CloseStatementResponse { > RpcMetadata metadata = 1; > } > > // Response to OpenConnectionRequest { > message OpenConnectionResponse { > RpcMetadata metadata = 1; > } > > // Response to CloseConnectionRequest { > message CloseConnectionResponse { > RpcMetadata metadata = 1; > } > > // Response to ConnectionSyncRequest > message ConnectionSyncResponse { > ConnectionProperties conn_props = 1; > RpcMetadata metadata = 2; > } > > message DatabasePropertyElement { > DatabaseProperty key = 1; > TypedValue value = 2; > RpcMetadata metadata = 3; > } > > // Response for Meta#getDatabaseProperties() > message DatabasePropertyResponse { > repeated DatabasePropertyElement props = 1; > RpcMetadata metadata = 2; > } > > // Send contextual information about some error over the wire from the > server. > message ErrorResponse { > repeated string exceptions = 1; // exception stacktraces, many for linked > exceptions. > bool has_exceptions = 7; // are there stacktraces contained? > string error_message = 2; // human readable description > Severity severity = 3; > uint32 error_code = 4; // numeric identifier for error > string sql_state = 5; // five-character standard-defined value > RpcMetadata metadata = 6; > } > > message SyncResultsResponse { > bool missing_statement = 1; // Server doesn't have the statement with the > ID from the request > bool more_results = 2; // Should the client fetch() to get more results > RpcMetadata metadata = 3; > } > > // Generic metadata for the server to return with each response. > message RpcMetadata { > string server_address = 1; // The host:port of the server > } > > // Response to a commit request > message CommitResponse { > > } > > // Response to a rollback request > message RollbackResponse { > > } > > // Response to a batch update request > message ExecuteBatchResponse { > string connection_id = 1; > uint32 statement_id = 2; > repeated uint64 update_counts = 3; > bool missing_statement = 4; // Did the request fail because of no-cached > statement > RpcMetadata metadata = 5; > } > > -- > You received this message because you are subscribed to the Google Groups > "Protocol Buffers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/protobuf/98864904-d137-419a-901c-917727bddbe6n%40googlegroups.com > <https://groups.google.com/d/msgid/protobuf/98864904-d137-419a-901c-917727bddbe6n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/protobuf/CADqAXr43bP_SaVTAEkK3yOWJrKM5jbrbo4FsF0QMSckFw4Kj7g%40mail.gmail.com.
