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

Temporary commit: Write protocol messages to file instead of sending it over 
the socket (for benchmarking only).


diffs (131 lines):

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
@@ -1875,7 +1875,7 @@ static int write_str_term(stream* s, str
 #include <mhapi.h>
 #endif
 
-#define VARCHAR_MAXIMUM_FIXED 3
+#define VARCHAR_MAXIMUM_FIXED 0
 
 
 static int mvc_export_resultset_prot10(res_table* t, stream* s, stream *c, 
size_t bsize) {
@@ -2012,6 +2012,15 @@ static int mvc_export_resultset_prot10(r
        }
        mnstr_flush(s);
 
+#ifdef NULL_BITMASK
+       // bitmask requires 1 bit per field for each row; for simplicity we 
round up to the nearest byte
+       fixed_lengths += (t->nr_cols / 8) + 1;
+#endif
+       char fname[1000];
+       snprintf(fname, 1000, "%s.proto", ((res_col*)t->cols)->tn);
+
+       FILE *f = fopen(fname, "wb");
+
        while (row < (size_t) count) {
                char *buf = bs2_buffer(s).buf;
                size_t crow = 0;
@@ -2232,6 +2241,32 @@ static int mvc_export_resultset_prot10(r
                                        // but since we don't know the length 
yet, just skip over it for now
                                        char *startbuf = buf;
                                        buf += sizeof(lng);
+#ifdef NULL_BITMASK
+                                       size_t m, n;
+                                       const void *nil = ATOMnilptr(mtype); 
+                                       int (*atomcmp)(const void *, const void 
*) = ATOMcompare(mtype); 
+                                       // first write the bitmask
+                                       for(m = 0; m < (row - srow); m+=8) {
+                                               unsigned char byte = 0;
+                                               for(n = 0; n < 8 && (m + n < 
(row - srow)); n++) {
+                                                       char *str = (char*) 
BUNtail(iterators[i], srow + m * 8 + n);
+                                                       if (strcmp(str, 
str_nil) == 0) {
+                                                               // null value
+                                                               byte |= 1 << n;
+                                                       }
+                                               }
+                                               memcpy(buf, &byte, 1);
+                                               buf += 1;
+                                       }
+                                       for(m = 0; m < (row - srow); m++) {
+                                               char *str = (char*) 
BUNtail(iterators[i], srow + m);
+                                               if (strcmp(str, str_nil) != 0) {
+                                                       // not null value, so 
copy into buffer
+                                                       buf = stpcpy(buf, str) 
+ 1;
+                                               }
+                                       }
+                                       //printf("%s: %f\n", c->name, (buf - 
startbuf) / 1000.0);
+#else
                                        for (crow = srow; crow < row; crow++) {
                                                int varsize;
                                                char *str = (char*) 
BUNtail(iterators[i], crow);
@@ -2251,6 +2286,7 @@ static int mvc_export_resultset_prot10(r
                                                }
  #endif
                                        }
+ #endif
                                        // after the loop we know the size of 
the column, so write it
                                        *((lng*)startbuf) = buf - (startbuf + 
sizeof(lng));
                                }
@@ -2328,8 +2364,37 @@ static int mvc_export_resultset_prot10(r
                                        }*/
                                } else {
 #endif
+#ifdef NULL_BITMASK
+                               const void *nil = ATOMnilptr(mtype); 
+                               int (*atomcmp)(const void *, const void *) = 
ATOMcompare(mtype);
+                               char *baseptr = Tloc(iterators[i].b, srow);
+                               char *startbuf = buf;
+                               size_t m, n;
+                               // first write the bitmask
+                               for(m = 0; m < (row - srow); m+=8) {
+                                       unsigned char byte = 0;
+                                       int base_index =  m * 8;
+                                       for(n = 0; n < 8 && (srow + base_index 
+ n < row); n++) {
+                                               if ((*atomcmp)(baseptr + 
(base_index + n) * atom_size, nil) == 0) {
+                                                       // null value
+                                                       byte |= 1 << n;
+                                               }
+                                       }
+                                       memcpy(buf, &byte, 1);
+                                       buf += 1;
+                               }
+                               for(m = 0; m < (row - srow); m++) {
+                                       if ((*atomcmp)(baseptr + m * atom_size, 
nil) != 0) {
+                                               // not null value, so copy into 
buffer
+                                               memcpy(buf, baseptr + m * 
atom_size, atom_size);
+                                               buf += atom_size;
+                                       }
+                               }
+                               //printf("%s: %f\n", c->name, (buf - startbuf) 
/ 1000.0);
+#else
                                memcpy(buf, Tloc(iterators[i].b, srow), (row - 
srow) * atom_size);
                                buf += (row - srow) * atom_size;
+#endif
 #ifdef HAVE_PFOR
                        }
 #endif
@@ -2345,14 +2410,21 @@ static int mvc_export_resultset_prot10(r
                        goto cleanup;
                }
 
-               bs2_setpos(s, buf - bs2_buffer(s).buf);
+               printf("Write rows %d-%d (%fKB)\n", srow, row, (buf - 
bs2_buffer(s).buf) / 1000.0);
+               fwrite(bs2_buffer(s).buf, buf - bs2_buffer(s).buf, 1, f);
+               bs2_setpos(s, 0);
+               /*bs2_setpos(s, buf - bs2_buffer(s).buf);
                if (mnstr_flush(s) < 0) {
                        fprintf(stderr, "Failed to flush.\n");
                        fres = -1;
                        goto cleanup;
-               }
+               }*/
                srow = row;
        }
+       fclose(f);
+       fprintf(stderr, "Finished writing result.\n");
+       fres = -1;
+       goto cleanup;
 cleanup:
        if (iterators) {
                for(i = 0; i < (size_t) t->nr_cols; i++) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to