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