Changeset: a7a36bd79a1b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a7a36bd79a1b
Modified Files:
        sql/server/rel_optimizer.c
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_unnest.c
Branch: default
Log Message:

Use temporary sql allocator, now that it jumps on an allocation failure scenario


diffs (truncated from 623 to 300 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -649,13 +649,8 @@ order_join_expressions(mvc *sql, list *d
        if (cnt == 0)
                return res;
 
-       keys = GDKmalloc(cnt*sizeof(int));
-       data = GDKmalloc(cnt*sizeof(void *));
-       if (keys == NULL || data == NULL) {
-               GDKfree(keys);
-               GDKfree(data);
-               return NULL;
-       }
+       keys = SA_NEW_ARRAY(sql->ta, int, cnt);
+       data = SA_NEW_ARRAY(sql->ta, void*, cnt);
 
        for (n = dje->h, i = 0; n; n = n->next, i++) {
                sql_exp *e = n->data;
@@ -678,8 +673,6 @@ order_join_expressions(mvc *sql, list *d
        for(i=0; i<cnt; i++) {
                list_append(res, data[i]);
        }
-       GDKfree(keys);
-       GDKfree(data);
        return res;
 }
 
@@ -3458,8 +3451,8 @@ exps_cse( mvc *sql, list *oexps, list *l
                }
        }
 
-       lu = GDKzalloc(list_length(l) * sizeof(char));
-       ru = GDKzalloc(list_length(r) * sizeof(char));
+       lu = SA_ZNEW_ARRAY(sql->ta, char, list_length(l));
+       ru = SA_ZNEW_ARRAY(sql->ta, char, list_length(r));
        for (n = l->h, lc = 0; n; n = n->next, lc++) {
                sql_exp *le = n->data;
 
@@ -3496,8 +3489,6 @@ exps_cse( mvc *sql, list *oexps, list *l
                append(oexps, exp_or(sql->sa, list_dup(l, (fdup)NULL),
                                     list_dup(r, (fdup)NULL), 0));
        }
-       GDKfree(lu);
-       GDKfree(ru);
        return res;
 }
 
@@ -5466,7 +5457,7 @@ static list *
 rel_used_projections(mvc *sql, list *exps, list *users)
 {
        list *nexps = sa_list(sql->sa);
-       bool *used = (bool*)GDKzalloc(sizeof(bool) * list_length(exps));
+       bool *used = SA_ZNEW_ARRAY(sql->ta, bool, list_length(exps));
        int i = 0;
 
        for(node *n = users->h; n; n = n->next) {
@@ -5480,7 +5471,6 @@ rel_used_projections(mvc *sql, list *exp
                if (is_intern(e) || used[i])
                        append(nexps, e);
        }
-       GDKfree(used);
        return nexps;
 }
 
@@ -5650,37 +5640,33 @@ rel_groupby_order(visitor *v, sql_rel *r
                node *n;
                list *gbe = rel->r;
                int i, ngbe = list_length(gbe);
-               scores = GDKmalloc(ngbe * sizeof(int));
-               exps = GDKmalloc(ngbe * sizeof(sql_exp*));
-
-               if (scores && exps) {
-                       /* first sorting step, give priority for integers and 
sorted columns */
-                       for (i = 0, n = gbe->h; n; i++, n = n->next) {
-                               exps[i] = n->data;
-                               scores[i] = score_gbe(v->sql, rel, exps[i]);
-                       }
-                       GDKqsort(scores, exps, NULL, ngbe, sizeof(int), 
sizeof(void *), TYPE_int, true, true);
-
-                       /* second sorting step, give priority to strings with 
lower number of digits */
-                       for (i = ngbe - 1; i && !scores[i]; i--); /* find 
epressions with no score from the first round */
-                       if (scores[i])
-                               i++;
-                       if (ngbe - i > 1) {
-                               for (int j = i; j < ngbe; j++) {
-                                       sql_subtype *t = exp_subtype(exps[j]);
-                                       scores[j] = t->digits;
-                               }
-                               /* the less number of digits the better, order 
ascending */
-                               GDKqsort(scores + i, exps + i, NULL, ngbe - i, 
sizeof(int), sizeof(void *), TYPE_int, false, true);
-                       }
-
-                       for (i = 0, n = gbe->h; n; i++, n = n->next)
-                               n->data = exps[i];
-               }
-       }
-
-       GDKfree(scores);
-       GDKfree(exps);
+               scores = SA_NEW_ARRAY(v->sql->ta, int, ngbe);
+               exps = SA_NEW_ARRAY(v->sql->ta, sql_exp*, ngbe);
+
+               /* first sorting step, give priority for integers and sorted 
columns */
+               for (i = 0, n = gbe->h; n; i++, n = n->next) {
+                       exps[i] = n->data;
+                       scores[i] = score_gbe(v->sql, rel, exps[i]);
+               }
+               GDKqsort(scores, exps, NULL, ngbe, sizeof(int), sizeof(void *), 
TYPE_int, true, true);
+
+               /* second sorting step, give priority to strings with lower 
number of digits */
+               for (i = ngbe - 1; i && !scores[i]; i--); /* find epressions 
with no score from the first round */
+               if (scores[i])
+                       i++;
+               if (ngbe - i > 1) {
+                       for (int j = i; j < ngbe; j++) {
+                               sql_subtype *t = exp_subtype(exps[j]);
+                               scores[j] = t->digits;
+                       }
+                       /* the less number of digits the better, order 
ascending */
+                       GDKqsort(scores + i, exps + i, NULL, ngbe - i, 
sizeof(int), sizeof(void *), TYPE_int, false, true);
+               }
+
+               for (i = 0, n = gbe->h; n; i++, n = n->next)
+                       n->data = exps[i];
+       }
+
        return rel;
 }
 
@@ -5696,21 +5682,13 @@ rel_reduce_groupby_exps(visitor *v, sql_
 
        if (is_groupby(rel->op) && rel->r && !rel_is_ref(rel) && 
list_length(gbe)) {
                node *n, *m;
-               int8_t *scores = GDKmalloc(list_length(gbe));
-               int k, j, i;
+               int k, j, i, ngbe = list_length(gbe);
+               int8_t *scores = SA_NEW_ARRAY(v->sql->ta, int8_t, ngbe);
                sql_column *c;
-               sql_table **tbls;
-               sql_rel **bts, *bt = NULL;
+               sql_table **tbls = SA_NEW_ARRAY(v->sql->ta, sql_table*, ngbe);
+               sql_rel **bts = SA_NEW_ARRAY(v->sql->ta, sql_rel*, ngbe), *bt = 
NULL;
 
                gbe = rel->r;
-               tbls = 
(sql_table**)GDKmalloc(sizeof(sql_table*)*list_length(gbe));
-               bts = (sql_rel**)GDKmalloc(sizeof(sql_rel*)*list_length(gbe));
-               if (scores == NULL || tbls == NULL || bts == NULL) {
-                       GDKfree(scores);
-                       GDKfree(tbls);
-                       GDKfree(bts);
-                       return NULL;
-               }
                for (k = 0, i = 0, n = gbe->h; n; n = n->next, k++) {
                        sql_exp *e = n->data;
 
@@ -5816,17 +5794,11 @@ rel_reduce_groupby_exps(visitor *v, sql_
                                        rel->exps = nexps;
                                        /* only one reduction at a time */
                                        v->changes = 1;
-                                       GDKfree(bts);
-                                       GDKfree(tbls);
-                                       GDKfree(scores);
                                        return rel;
                                }
                                gbe = rel->r;
                        }
                }
-               GDKfree(bts);
-               GDKfree(tbls);
-               GDKfree(scores);
        }
        /* remove constants from group by list */
        if (is_groupby(rel->op) && rel->r && !rel_is_ref(rel)) {
@@ -7451,23 +7423,19 @@ rel_select_order(visitor *v, sql_rel *re
        if (is_select(rel->op) && list_length(rel->exps) > 1) {
                node *n;
                int i, nexps = list_length(rel->exps);
-               scores = GDKmalloc(nexps * sizeof(int));
-               exps = GDKmalloc(nexps * sizeof(sql_exp*));
-
-               if (scores && exps) {
-                       for (i = 0, n = rel->exps->h; n; i++, n = n->next) {
-                               exps[i] = n->data;
-                               scores[i] = score_se(v->sql, rel, n->data);
-                       }
-                       GDKqsort(scores, exps, NULL, nexps, sizeof(int), 
sizeof(void *), TYPE_int, true, true);
-
-                       for (i = 0, n = rel->exps->h; n; i++, n = n->next)
-                               n->data = exps[i];
-               }
-       }
-
-       GDKfree(scores);
-       GDKfree(exps);
+               scores = SA_NEW_ARRAY(v->sql->ta, int, nexps);
+               exps = SA_NEW_ARRAY(v->sql->ta, sql_exp*, nexps);
+
+               for (i = 0, n = rel->exps->h; n; i++, n = n->next) {
+                       exps[i] = n->data;
+                       scores[i] = score_se(v->sql, rel, n->data);
+               }
+               GDKqsort(scores, exps, NULL, nexps, sizeof(int), sizeof(void 
*), TYPE_int, true, true);
+
+               for (i = 0, n = rel->exps->h; n; i++, n = n->next)
+                       n->data = exps[i];
+       }
+
        return rel;
 }
 
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -236,26 +236,17 @@ table_constraint_name(mvc *sql, symbol *
        slen = strlen(suffix);
        while (len + slen >= buflen)
                buflen += BUFSIZ;
-       buf = GDKmalloc(buflen);
-       if (!buf) {
-               sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
-               return NULL;
-       }
+       buf = SA_NEW_ARRAY(sql->ta, char, buflen);
        strcpy(buf, t->base.name);
 
        /* add column name(s) */
        for (; nms; nms = nms->next) {
                slen = strlen(nms->data.sval);
                while (len + slen + 1 >= buflen) {
-                       char *nbuf;
-                       buflen += BUFSIZ;
-                       nbuf = GDKrealloc(buf, buflen);
-                       if (!nbuf) {
-                               GDKfree(buf);
-                               sql_error(sql, 02, SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
-                               return NULL;
-                       }
+                       size_t nbuflen = buflen + BUFSIZ;
+                       char *nbuf = SA_RENEW_ARRAY(sql->ta, char, buf, 
nbuflen, buflen);
                        buf = nbuf;
+                       buflen = nbuflen;
                }
                snprintf(buf + len, buflen - len, "_%s", nms->data.sval);
                len += slen + 1;
@@ -264,15 +255,10 @@ table_constraint_name(mvc *sql, symbol *
        /* add suffix */
        slen = strlen(suffix);
        while (len + slen >= buflen) {
-               char *nbuf;
-               buflen += BUFSIZ;
-               nbuf = GDKrealloc(buf, buflen);
-               if (!nbuf) {
-                       GDKfree(buf);
-                       sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
-                       return NULL;
-               }
+               size_t nbuflen = buflen + BUFSIZ;
+               char *nbuf = SA_RENEW_ARRAY(sql->ta, char, buf, nbuflen, 
buflen);
                buf = nbuf;
+               buflen = nbuflen;
        }
        snprintf(buf + len, buflen - len, "%s", suffix);
        return buf;
@@ -303,11 +289,7 @@ column_constraint_name(mvc *sql, symbol 
        }
 
        buflen = strlen(t->base.name) + strlen(sc->base.name) + strlen(suffix) 
+ 3;
-       buf = GDKmalloc(buflen);
-       if (!buf){
-               sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
-               return NULL;
-       }
+       buf = SA_NEW_ARRAY(sql->ta, char, buflen);
        snprintf(buf, buflen, "%s_%s_%s", t->base.name, sc->base.name, suffix);
        return buf;
 }
@@ -466,7 +448,6 @@ column_options(sql_query *query, dlist *
                                                return SQL_ERR;
 
                                        res = column_constraint_type(sql, 
opt_name ? opt_name : default_name, sym, ss, t, cs, isDeclared, &used);
-                                       GDKfree(default_name);
                                }       break;
                                case SQL_DEFAULT: {
                                        symbol *sym = s->data.sym;
@@ -676,8 +657,6 @@ table_constraint(mvc *sql, symbol *s, sq
                if (opt_name == NULL)
                        return SQL_ERR;
                res = table_constraint_type(sql, opt_name, sym, ss, t);
-               if (opt_name != l->h->data.sval)
-                       GDKfree(opt_name);
        }
 
        if (res != SQL_OK) {
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -3255,68 +3255,32 @@ static sql_exp *
 
        if (!query_has_outer(query)) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to