Changeset: ee3d3183db10 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ee3d3183db10
Modified Files:
        clients/odbc/driver/ODBCConvert.c
        gdk/gdk_join.c
        monetdb5/mal/mal_parser.c
        monetdb5/modules/atoms/batxml.c
        monetdb5/modules/mal/pp_mat.c
        monetdb_config.h.in
        sql/backends/monet5/sql_upgrades.c
Branch: default
Log Message:

Various cleanup.  Use allocator; clean up config.h; add a const.


diffs (truncated from 600 to 300 lines):

diff --git a/clients/odbc/driver/ODBCConvert.c 
b/clients/odbc/driver/ODBCConvert.c
--- a/clients/odbc/driver/ODBCConvert.c
+++ b/clients/odbc/driver/ODBCConvert.c
@@ -190,7 +190,7 @@ parsemonthinterval(bignum_t *nval, SQL_I
        ival->intval.year_month.month = (SQLUINTEGER) (nval->val % 12);
 }
 
-static short monthlengths[] = {
+static const short monthlengths[] = {
        0,                      /* dummy */
        31,                     /* Jan */
        29,                     /* Feb */
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3745,7 +3745,7 @@ count_unique(BATiter *bi, BAT *s, BUN *c
                        cnt += candmask_pop(seen[j]);
                *cnt2 = cnt;
        } else if (ATOMbasetype(bi->type) == TYPE_sht) {
-               unsigned short val;
+               uint16_t val;
                uint32_t *seen = NULL;
                allocator *ta = MT_thread_getallocator();
                allocator_state ta_state = ma_open(ta);
@@ -3767,7 +3767,7 @@ count_unique(BATiter *bi, BAT *s, BUN *c
                                *cnt1 = cnt;
                        }
                        o = canditer_next(&ci);
-                       val = ((const unsigned short *) bvals)[o - bi->hseq];
+                       val = ((const uint16_t *) bvals)[o - bi->hseq];
                        if (!(seen[val >> 5] & (1U << (val & 0x1F)))) {
                                seen[val >> 5] |= 1U << (val & 0x1F);
                        }
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -1736,7 +1736,7 @@ fcnHeader(Client ctx, int kind)
        } else if (keyphrase1(ctx, "(")) {      /* deal with compound return */
                int retc = curInstr->argc, i1, i2 = 0;
                int max;
-               short *newarg;
+               int *newarg;
                /* parse multi-target result */
                /* skipSpace(ctx); */
                ch = currChar(ctx);
@@ -1761,12 +1761,17 @@ fcnHeader(Client ctx, int kind)
                        ch = currChar(ctx);
                }
                /* re-arrange the parameters, results first */
+               allocator *ma = MT_thread_getallocator();
+               allocator_state ma_state = ma_open(ma);
                max = curInstr->maxarg;
-               newarg = (short *) GDKmalloc(max * sizeof(curInstr->argv[0]));
+               newarg = ma_alloc(ma, max * sizeof(newarg[0]));
+               static_assert(sizeof(newarg[0]) == sizeof(curInstr->argv[0]),
+                                         "size mismatch");
                if (newarg == NULL) {
                        parseError(ctx, SQLSTATE(HY013) MAL_MALLOC_FAIL);
                        if (ctx->backup)
                                curBlk = NULL;
+                       ma_close(&ma_state);
                        return curBlk;
                }
                for (i1 = retc; i1 < curInstr->argc; i1++)
@@ -1779,7 +1784,7 @@ fcnHeader(Client ctx, int kind)
                        newarg[i2] = 0;
                for (i1 = 0; i1 < max; i1++)
                        curInstr->argv[i1] = newarg[i1];
-               GDKfree(newarg);
+               ma_close(&ma_state);
                if (currChar(ctx) != ')') {
                        freeInstruction(curBlk, curInstr);
                        if (ctx->backup)
diff --git a/monetdb5/modules/atoms/batxml.c b/monetdb5/modules/atoms/batxml.c
--- a/monetdb5/modules/atoms/batxml.c
+++ b/monetdb5/modules/atoms/batxml.c
@@ -285,16 +285,20 @@ BATXMLdocument(Client ctx, bat *ret, con
        BUN p, q;
        BATiter bi;
        size_t size = BUFSIZ;
-       str buf = GDKmalloc(size);
+       allocator *ma = MT_thread_getallocator();
+       allocator_state ma_state = ma_open(ma);
+       str buf = ma_alloc(ma, size);
        const char *err = OPERATION_FAILED;
 
-       if (buf == NULL)
+       if (buf == NULL) {
+               ma_close(&ma_state);
                throw(MAL, "xml.document", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+       }
        if ((b = BATdescriptor(*bid)) == NULL) {
-               GDKfree(buf);
+               ma_close(&ma_state);
                throw(MAL, "xml.document", INTERNAL_BAT_ACCESS);
        }
-       prepareResult(bn, b, TYPE_xml, "document", GDKfree(buf));
+       prepareResult(bn, b, TYPE_xml, "document", ma_close(&ma_state));
        bi = bat_iterator(b);
        BATloop(&bi, p, q) {
                const char *t = (const char *) BUNtvar(&bi, p);
@@ -317,9 +321,8 @@ BATXMLdocument(Client ctx, bat *ret, con
                xmlDocDumpMemory(doc, &s, &len);
                xmlFreeDoc(doc);
                if ((size_t) len + 2 >= size) {
-                       GDKfree(buf);
+                       buf = ma_realloc(ma, buf, (size_t) len + 128, size);
                        size = (size_t) len + 128;
-                       buf = GDKmalloc(size);
                        if (buf == NULL) {
                                xmlFree(s);
                                err = MAL_MALLOC_FAIL;
@@ -333,12 +336,12 @@ BATXMLdocument(Client ctx, bat *ret, con
                        goto bunins_failed;
        }
        bat_iterator_end(&bi);
-       GDKfree(buf);
+       ma_close(&ma_state);
        finalizeResult(ret, bn, b);
        return MAL_SUCCEED;
   bunins_failed:
        bat_iterator_end(&bi);
-       GDKfree(buf);
+       ma_close(&ma_state);
        BBPunfix(b->batCacheid);
        BBPunfix(bn->batCacheid);
        throw(MAL, "xml.document", "%s", err);
@@ -354,19 +357,23 @@ BATXMLcontent(Client ctx, bat *ret, cons
        xmlDocPtr doc;
        xmlNodePtr root;
        size_t size = BUFSIZ;
-       str buf = GDKmalloc(size);
+       allocator *ma = MT_thread_getallocator();
+       allocator_state ma_state = ma_open(ma);
+       str buf = ma_alloc(ma, size);
        const char *err = OPERATION_FAILED;
        xmlBufferPtr xbuf;
 
-       if (buf == NULL)
+       if (buf == NULL) {
+               ma_close(&ma_state);
                throw(MAL, "xml.content", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+       }
        if ((b = BATdescriptor(*bid)) == NULL) {
-               GDKfree(buf);
+               ma_close(&ma_state);
                throw(MAL, "xml.content", INTERNAL_BAT_ACCESS);
        }
        doc = xmlParseMemory("<doc/>", 6);
        root = xmlDocGetRootElement(doc);
-       prepareResult(bn, b, TYPE_xml, "content", GDKfree(buf));
+       prepareResult(bn, b, TYPE_xml, "content", ma_close(&ma_state););
        bi = bat_iterator(b);
        xbuf = xmlBufferCreate();
        BATloop(&bi, p, q) {
@@ -392,9 +399,8 @@ BATXMLcontent(Client ctx, bat *ret, cons
                s = xmlBufferContent(xbuf);
                len = strlen((const char *) s);
                if (len + 2 >= size) {
-                       GDKfree(buf);
+                       buf = ma_realloc(ma, buf, len + 128, size);
                        size = len + 128;
-                       buf = GDKmalloc(size);
                        if (buf == NULL) {
                                err = SQLSTATE(HY013) MAL_MALLOC_FAIL;
                                goto bunins_failed;
@@ -410,14 +416,14 @@ BATXMLcontent(Client ctx, bat *ret, cons
        bat_iterator_end(&bi);
        xmlBufferFree(xbuf);
        xmlFreeDoc(doc);
-       GDKfree(buf);
+       ma_close(&ma_state);
        finalizeResult(ret, bn, b);
        return MAL_SUCCEED;
   bunins_failed:
        bat_iterator_end(&bi);
        xmlBufferFree(xbuf);
        xmlFreeDoc(doc);
-       GDKfree(buf);
+       ma_close(&ma_state);
        BBPunfix(b->batCacheid);
        BBPunfix(bn->batCacheid);
        throw(MAL, "xml.document", "%s", err);
@@ -478,30 +484,31 @@ BATXMLisdocument(Client ctx, bat *ret, c
  * most reasonable interpretation.
  */
 static str
-BATXMLoptions(Client ctx, bat *ret, const char *const *name, const char *const 
*options,
-                         const bat *bid)
+BATXMLoptions(Client ctx, bat *ret, const char *const *name,
+                         const char *const *options, const bat *bid)
 {
        (void) ctx;
        BAT *b, *bn;
        BUN p, q;
-       str buf = GDKmalloc(BUFSIZ);
-       str val = GDKmalloc(BUFSIZ);
-       size_t size = BUFSIZ, len = strlen(*name);
+       allocator *ma = MT_thread_getallocator();
+       allocator_state ma_state = ma_open(ma);
+       size_t len = strlen(*name);
+       size_t size = 2 * len + 6 < BUFSIZ ? BUFSIZ : 2 * len + 6;
+       str buf = ma_alloc(ma, size);
+       /* allocate val last, since we may realloc, and then it can grow */
+       str val = ma_alloc(ma, size);
        BATiter bi = {.b = NULL };
        const char *err = OPERATION_FAILED " During bulk options analysis";
 
        if (val == NULL || buf == NULL) {
-               GDKfree(val);
-               GDKfree(buf);
+               ma_close(&ma_state);
                throw(MAL, "batxml.options", SQLSTATE(HY013) MAL_MALLOC_FAIL);
        }
        if ((b = BATdescriptor(*bid)) == NULL) {
-               GDKfree(val);
-               GDKfree(buf);
+               ma_close(&ma_state);
                throw(MAL, "xml.options", INTERNAL_BAT_ACCESS);
        }
-       prepareResult(bn, b, TYPE_xml, "options", GDKfree(val);
-                                 GDKfree(buf));
+       prepareResult(bn, b, TYPE_xml, "options", ma_close(&ma_state));
 
        if (strcmp(*options, "absent") == 0)
                buf[0] = 0;
@@ -517,7 +524,6 @@ BATXMLoptions(Client ctx, bat *ret, cons
                goto bunins_failed;
        }
 
-       snprintf(val, size, "<%s>", *name);
        bi = bat_iterator(b);
        BATloop(&bi, p, q) {
                const char *t = (const char *) BUNtvar(&bi, p);
@@ -526,24 +532,23 @@ BATXMLoptions(Client ctx, bat *ret, cons
                        if (bunfastapp_nocheckVAR(bn, buf) != GDK_SUCCEED)
                                goto bunins_failed1;
                } else {
-                       if (strlen(t) > size - 2 * len - 6) {
-                               char *tmp;
-                               size += strlen(t);
-                               tmp = (char *) GDKrealloc(val, size + 
strlen(t));
-                               if (tmp == NULL) {
+                       size_t tlen = strlen(t);
+                       size_t reqsize = 2 * len + 6 + tlen;
+                       if (reqsize > size) {
+                               val = ma_realloc(ma, val, reqsize, size);
+                               size = reqsize;
+                               if (val == NULL) {
                                        err = SQLSTATE(HY013) MAL_MALLOC_FAIL;
                                        goto bunins_failed1;
                                }
-                               val = tmp;
                        }
-                       snprintf(val + len + 2, size - len, "%s</%s>", t, 
*name);
+                       snprintf(val, size, "<%s>%s</%s>", *name, t, *name);
                        if (bunfastapp_nocheckVAR(bn, val) != GDK_SUCCEED)
                                goto bunins_failed1;
                }
        }
        bat_iterator_end(&bi);
-       GDKfree(val);
-       GDKfree(buf);
+       ma_close(&ma_state);
        finalizeResult(ret, bn, b);
        return MAL_SUCCEED;
   bunins_failed1:
@@ -551,8 +556,7 @@ BATXMLoptions(Client ctx, bat *ret, cons
   bunins_failed:
        BBPunfix(b->batCacheid);
        BBPunfix(bn->batCacheid);
-       GDKfree(buf);
-       GDKfree(val);
+       ma_close(&ma_state);
        throw(MAL, "batxml.options", "%s", err);
 }
 
diff --git a/monetdb5/modules/mal/pp_mat.c b/monetdb5/modules/mal/pp_mat.c
--- a/monetdb5/modules/mal/pp_mat.c
+++ b/monetdb5/modules/mal/pp_mat.c
@@ -346,12 +346,14 @@ MATproject(Client ctx, bat *mat, const b
        BAT *l = BATdescriptor(*lid);
        BAT *g = BATdescriptor(*gid);
        BAT *d = BATdescriptor(*data);
+       allocator *ma = MT_thread_getallocator();
+       allocator_state ma_state = ma_open(ma);
        oid *curpos = NULL;
        if (!m || !p || !l || !g || !d) {
                err = createException(MAL, "mat.project", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
                goto error;
        }
-       curpos = GDKmalloc(sizeof(oid) * BATcount(p));
+       curpos = ma_alloc(ma, sizeof(oid) * BATcount(p));
        for (BUN i = 0; i < BATcount(p); i++)
                curpos[i] = *(oid*)Tloc(p, i);
        oid *lp = (oid*)Tloc(l, 0);
@@ -436,7 +438,7 @@ MATproject(Client ctx, bat *mat, const b
                mat_deactivate(mt);
        if (err)
                goto error;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to