Changeset: 11629f1cb6a5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=11629f1cb6a5
Modified Files:
        gdk/gdk_batop.c
Branch: default
Log Message:

Merge with Oct2014 branch.


diffs (40 lines):

diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -330,23 +330,36 @@ insert_string_bat(BAT *b, BAT *n, int ap
                                if (b->H->type)
                                        *(oid *) Hloc(b, BUNlast(b)) = *(oid *) 
hp;
                                v = (var_t) (off >> GDK_VARSHIFT);
+                               if (b->T->width < SIZEOF_VAR_T &&
+                                   ((size_t) 1 << 8 * b->T->width) < 
(b->T->width <= 2 ? v - GDK_VAROFFSET : v)) {
+                                       /* offset isn't going to fit,
+                                        * so widen offset heap */
+                                       if (GDKupgradevarheap(b->T, v, 0, 
force) == GDK_FAIL) {
+                                               goto bunins_failed;
+                                       }
+                                       btw = b->T->width;
+                               }
                                switch (btw) {
                                case 1:
                                        assert(v - GDK_VAROFFSET < ((var_t) 1 
<< 8));
                                        *(unsigned char *)Tloc(b, BUNlast(b)) = 
(unsigned char) (v - GDK_VAROFFSET);
+                                       b->T->heap.free += 1;
                                        break;
                                case 2:
                                        assert(v - GDK_VAROFFSET < ((var_t) 1 
<< 16));
                                        *(unsigned short *)Tloc(b, BUNlast(b)) 
= (unsigned short) (v - GDK_VAROFFSET);
+                                       b->T->heap.free += 2;
                                        break;
 #if SIZEOF_VAR_T == 8
                                case 4:
                                        assert(v < ((var_t) 1 << 32));
                                        *(unsigned int *)Tloc(b, BUNlast(b)) = 
(unsigned int) v;
+                                       b->T->heap.free += 4;
                                        break;
 #endif
                                default:
                                        *(var_t *)Tloc(b, BUNlast(b)) = v;
+                                       b->T->heap.free += SIZEOF_VAR_T;
                                        break;
                                }
                                b->batCount++;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to