Changeset: ae2f543c5176 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ae2f543c5176
Modified Files:
        sql/server/rel_optimizer.c
Branch: Aug2011
Log Message:

rel_optimizer: do not use alloca


diffs (97 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
@@ -1953,10 +1953,8 @@ exps_cse( sql_allocator *sa, list *oexps
        }
        r = nexps;
 
-       lu = alloca(list_length(l));
-       ru = alloca(list_length(r));
-       memset(lu, 0, list_length(l));
-       memset(ru, 0, list_length(r));
+       lu = calloc(list_length(l), sizeof(char));
+       ru = calloc(list_length(r), sizeof(char));
        for (n = l->h, lc = 0; n; n = n->next, lc++) {
                sql_exp *le = n->data;
 
@@ -1993,6 +1991,8 @@ exps_cse( sql_allocator *sa, list *oexps
                append(oexps, exp_or(sa, list_dup(l, (fdup)NULL), 
                                     list_dup(r, (fdup)NULL)));
        }
+       free(lu);
+       free(ru);
        return res;
 }
 
@@ -3102,13 +3102,14 @@ rel_groupby_order(int *changes, mvc *sql
        (void)*changes;
        if (is_groupby(rel->op) && list_length(gbe) > 1 && list_length(gbe)<9) {
                node *n;
-               int i, *scores = alloca(sizeof(int) * list_length(gbe));
-
-               memset(scores, 0, sizeof(int)*list_length(gbe));
+               int i, *scores = calloc(list_length(gbe), sizeof(int));
+
                for (i = 0, n = gbe->h; n; i++, n = n->next) {
                        scores[i] = score_gbe(sql, rel, n->data);
                }
                rel->r = list_keysort(gbe, scores, (fdup)NULL);
+
+               free(scores);
        }
        return rel;
 }
@@ -3128,15 +3129,15 @@ rel_reduce_groupby_exps(int *changes, mv
        (void)sql;
        if (is_groupby(rel->op) && list_length(gbe) > 1) {
                node *n, *m;
-               signed char *scores = alloca(list_length(gbe));
+               signed char *scores = malloc(list_length(gbe));
                int k, j, i;
                sql_column *c;
                sql_table **tbls;
                sql_rel **bts, *bt = NULL;
 
                gbe = rel->r;
-               tbls = (sql_table**)alloca(sizeof(sql_table*)*list_length(gbe));
-               bts = (sql_rel**)alloca(sizeof(sql_rel*)*list_length(gbe));
+               tbls = (sql_table**)malloc(sizeof(sql_table*)*list_length(gbe));
+               bts = (sql_rel**)malloc(sizeof(sql_rel*)*list_length(gbe));
                for (k = 0, i = 0, n = gbe->h; n; n = n->next, k++) {
                        sql_exp *e = n->data;
 
@@ -3230,11 +3231,17 @@ rel_reduce_groupby_exps(int *changes, mv
                                        rel->exps = lpje;
                                        /* only one reduction at a time */
                                        *changes = 1;
+                                       free(bts);
+                                       free(tbls);
+                                       free(scores);
                                        return rel;
                                } 
                                gbe = rel->r;
                        }
                }
+               free(bts);
+               free(tbls);
+               free(scores);
        }
        return rel;
 }
@@ -3559,7 +3566,7 @@ exps_mark_used(sql_rel *rel, sql_rel *su
        if (rel->exps) {
                node *n;
                int len = list_length(rel->exps), i;
-               sql_exp **exps = (sql_exp**)alloca(sizeof(sql_exp*) * len);
+               sql_exp **exps = (sql_exp**)malloc(sizeof(sql_exp*) * len);
 
                for (n=rel->exps->h, i = 0; n; n = n->next, i++) 
                        exps[i] = n->data;
@@ -3573,6 +3580,7 @@ exps_mark_used(sql_rel *rel, sql_rel *su
                                nr += exp_mark_used(subrel, e);
                        }
                }
+               free(exps);
        }
        /* for count/rank we need atleast one column */
        if (!nr && (is_project(subrel->op) || is_base(subrel->op)) && 
subrel->exps->h) {
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to