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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list