Changeset: 7360684290bc for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7360684290bc
Modified Files:
        gdk/gdk_batop.c
        monetdb5/modules/kernel/batstr.c
Branch: default
Log Message:

merged with Feb2013


diffs (117 lines):

diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -71,12 +71,12 @@ insert_string_bat(BAT *b, BAT *n, int ap
        BUN p, q;               /* loop variables */
        oid o = 0;              /* in case we're appending */
        ptr hp, tp;             /* head and tail value pointers */
-       unsigned char tbv;      /* tail value-as-bte */
-       unsigned short tsv;     /* tail value-as-sht */
+       unsigned char tbv, *tbp = NULL;         /* tail value-as-bte */
+       unsigned short tsv, *tsp = NULL;        /* tail value-as-sht */
 #if SIZEOF_VAR_T == 8
-       unsigned int tiv;       /* tail value-as-int */
+       unsigned int tiv, *tip = NULL;          /* tail value-as-int */
 #endif
-       var_t v;                /* value */
+       var_t v, *tvp = NULL;           /* value */
        int ntw, btw;           /* shortcuts for {b,n}->t->width */
 
        assert(b->H->type == TYPE_void || b->H->type == TYPE_oid);
@@ -139,8 +139,11 @@ insert_string_bat(BAT *b, BAT *n, int ap
                        tt = TYPE_var;
                        break;
                }
+               tbp = (unsigned char*)Tloc(n,BUNfirst(n)); 
+               tsp = (unsigned short*)Tloc(n,BUNfirst(n)); 
+               tip = (unsigned int*)Tloc(n,BUNfirst(n)); 
+               tvp = (var_t*)Tloc(n,BUNfirst(n)); 
                b->T->varsized = 0;
-               n->T->varsized = 0;
                b->T->type = tt;
        }
 
@@ -152,23 +155,25 @@ insert_string_bat(BAT *b, BAT *n, int ap
                        hp = &o;
                }
 
-               tp = b->T->type ? BUNtail(ni, p) : NULL;
                if (toff != ~ (size_t) 0) {
-                       assert(tp != NULL);
                        switch (ntw) {
                        case 1:
-                               v = (var_t) * (unsigned char *) tp + 
GDK_VAROFFSET;
+                               v = (var_t) *tbp + GDK_VAROFFSET;
+                               tbp++;
                                break;
                        case 2:
-                               v = (var_t) * (unsigned short *) tp + 
GDK_VAROFFSET;
+                               v = (var_t) *tsp + GDK_VAROFFSET;
+                               tsp++;
                                break;
 #if SIZEOF_VAR_T == 8
                        case 4:
-                               v = (var_t) * (unsigned int *) tp;
+                               v = (var_t) *tip;
+                               tip++;
                                break;
 #endif
                        default:
-                               v = * (var_t *) tp;
+                               v = * (var_t *) *tvp;
+                               tvp++;
                                break;
                        }
                        v = (var_t) ((((size_t) v << GDK_VARSHIFT) + toff) >> 
GDK_VARSHIFT);
@@ -196,6 +201,9 @@ insert_string_bat(BAT *b, BAT *n, int ap
                                tp = (ptr) &v;
                                break;
                        }
+               } else {
+                       tp = b->T->type ? BUNtail(ni, p) : NULL;
+                       assert(tp != NULL);
                }
                bunfastins(b, hp, tp);
                if (append)
@@ -203,14 +211,12 @@ insert_string_bat(BAT *b, BAT *n, int ap
        }
        if (toff != ~(size_t) 0) {
                b->T->varsized = 1;
-               n->T->varsized = 1;
                b->T->type = TYPE_str;
        }
        return b;
       bunins_failed:
        if (toff != ~(size_t) 0) {
                b->T->varsized = 1;
-               n->T->varsized = 1;
                b->T->type = TYPE_str;
        }
        return NULL;
diff --git a/monetdb5/modules/kernel/batstr.c b/monetdb5/modules/kernel/batstr.c
--- a/monetdb5/modules/kernel/batstr.c
+++ b/monetdb5/modules/kernel/batstr.c
@@ -719,6 +719,7 @@ str STRbatConcat(int *ret, int *l, int *
                str tr = (str) BUNtail(righti,p);
                STRConcat(vp, &tl, &tr);
                bunfastins(bn, h, v);
+               GDKfree(v);
        }
        bn->T->nonil = 0;
        BBPreleaseref(right->batCacheid);
@@ -749,6 +750,7 @@ str STRbatConcatcst(int *ret, int *l, st
                str tl = (str) BUNtail(lefti,p);
                STRConcat(vp, &tl, cst);
                bunfastins(bn, h, v);
+               GDKfree(v);
        }
        bn->T->nonil = 0;
        finalizeResult(ret,bn,left);
@@ -777,6 +779,7 @@ str STRcstConcatbat(int *ret, str *cst, 
                str tr = (str) BUNtail(righti,p);
                STRConcat(vp, cst, &tr);
                bunfastins(bn, h, v);
+               GDKfree(v);
        }
        bn->T->nonil = 0;
        finalizeResult(ret,bn,right);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to