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]