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