Changeset: e13cb0d878c7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e13cb0d878c7
Modified Files:
        common/stream/mhapi.proto
        sql/backends/monet5/sql_result.c
Branch: protocol
Log Message:

Fix for unpacked protocol buffers.


diffs (61 lines):

diff --git a/common/stream/mhapi.proto b/common/stream/mhapi.proto
--- a/common/stream/mhapi.proto
+++ b/common/stream/mhapi.proto
@@ -1,7 +1,7 @@
 package mhapi;
 
 message QueryResult {
-       required int64 row_count = 2;
+       required int64 row_count = 1;
 
        message Column {
                repeated string string_values = 4;
@@ -10,7 +10,6 @@ message QueryResult {
                repeated double double_values = 7 [packed=true];
        }
 
-
        message ColumnUnpacked {
                repeated string string_values = 4;
                repeated int64  int64_values = 5 [packed=false];
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -2021,7 +2021,7 @@ static int mvc_export_resultset_prot10(r
                // subtract this from the amount of bytes left
                bytes_left -= length_prefixed * sizeof(lng);
 
-               if (colcomp == COLUMN_COMPRESSION_BINPACK || colcomp == 
COLUMN_COMPRESSION_PFOR) {
+               if (colcomp == COLUMN_COMPRESSION_BINPACK || colcomp == 
COLUMN_COMPRESSION_PFOR || colcomp == COLUMN_COMPRESSION_PROTOBUF_NOPACK) {
                        // leave a bit of extra space in case the compression 
increases the size of the data
                        bytes_left = bytes_left / 2;
                }
@@ -2148,7 +2148,7 @@ static int mvc_export_resultset_prot10(r
                                        msg.columns_unpacked[i] = 
malloc(sizeof(Mhapi__QueryResult__ColumnUnpacked));
                                        assert(msg.columns_unpacked[i]);
                                        col = msg.columns_unpacked[i];
-                                       mhapi__query_result__column__init(col);
+                                       
mhapi__query_result__column_unpacked__init(col);
                                        switch (local_type) {
                                        case TYPE_str:
                                        {
@@ -2186,6 +2186,11 @@ static int mvc_export_resultset_prot10(r
                        }
                        assert(mhapi__query_result__get_packed_size(&msg) <= 
bsize);
                        assert(bs2_buffer(s).pos == 0);
+                       if (mhapi__query_result__get_packed_size(&msg) > bsize) 
{
+                               fprintf(stderr, "Protobuf message too big!\n");
+                               fres = -1;
+                               goto cleanup;
+                       }
                        bs2_setpos(s, mhapi__query_result__pack(&msg, 
(uint8_t*) bs2_buffer(s).buf));
                        if (mnstr_flush(s) < 0) {
                                fprintf(stderr, "Failed to flush.\n");
@@ -2223,7 +2228,6 @@ static int mvc_export_resultset_prot10(r
                                        }
                                } else {
                                        // for variable length strings and 
large fixed strings we use varints
-
                                        // variable columns are prefixed by a 
length, 
                                        // but since we don't know the length 
yet, just skip over it for now
                                        char *startbuf = buf;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to