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

rel_select: use malloc instead of alloca


diffs (79 lines):

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
@@ -3306,8 +3306,11 @@ _rel_aggr(mvc *sql, sql_rel **rel, int d
        sql_rel *groupby = *rel;
 
        if (!groupby) {
-               return sql_error(sql, 02, "%s: missing group by",
-                               toUpperCopy(alloca(strlen(aggrstr) + 1), 
aggrstr));
+               char *uaggrstr = malloc(strlen(aggrstr) + 1);
+               e = sql_error(sql, 02, "%s: missing group by",
+                               toUpperCopy(uaggrstr, aggrstr));
+               free(uaggrstr);
+               return e;
        }
 
        if (f == sql_having && is_select(groupby->op))
@@ -3332,15 +3335,22 @@ _rel_aggr(mvc *sql, sql_rel **rel, int d
                return NULL;
        }
 
-       if (f == sql_where)
-               return sql_error(sql, 02, "%s: not allowed in WHERE clause",
-                               toUpperCopy(alloca(strlen(aggrstr) + 1), 
aggrstr));
+       if (f == sql_where) {
+               char *uaggrstr = malloc(strlen(aggrstr) + 1);
+               e = sql_error(sql, 02, "%s: not allowed in WHERE clause",
+                               toUpperCopy(uaggrstr, aggrstr));
+               free(uaggrstr);
+               return e;
+       }
        
        if (!sym) {     /* count(*) case */
 
                if (strcmp(aggrstr, "count") != 0) {
-                       return sql_error(sql, 02, "%s: unable to perform 
'%s(*)'",
-                                       toUpperCopy(alloca(strlen(aggrstr) + 
1), aggrstr), aggrstr);
+                       char *uaggrstr = malloc(strlen(aggrstr) + 1);
+                       e = sql_error(sql, 02, "%s: unable to perform '%s(*)'",
+                                       toUpperCopy(uaggrstr, aggrstr), 
aggrstr);
+                       free(uaggrstr);
+                       return e;
                }
                a = sql_bind_aggr(sql->sa, sql->session->schema, aggrstr, NULL);
                /* add aggr expression to the groupby, and return a
@@ -3402,10 +3412,16 @@ _rel_aggr(mvc *sql, sql_rel **rel, int d
                                        (t->type->scale == SCALE_FIX));
        } else {
                char *type = "unknown";
+               char *uaggrstr = malloc(strlen(aggrstr) + 1);
 
                if (e) 
                        type = exp_subtype(e)->type->sqlname;
-               return sql_error(sql, 02, "%s: no such operator '%s(%s)'", 
toUpperCopy(alloca(strlen(aggrstr) + 1), aggrstr), aggrstr, type);
+
+               e = sql_error(sql, 02, "%s: no such operator '%s(%s)'",
+                               toUpperCopy(uaggrstr, aggrstr), aggrstr, type);
+
+               free(uaggrstr);
+               return e;
        }
 }
 
@@ -3891,8 +3907,13 @@ rel_rankop(mvc *sql, sql_rel **rel, symb
                aggrstr = window_function->data.lval->h->data.sval;
        }
 
-       if (f == sql_where)
-               return sql_error(sql, 02, "%s: not allowed in WHERE clause", 
toUpperCopy(alloca(strlen(aggrstr) + 1), aggrstr));
+       if (f == sql_where) {
+               char *uaggrstr = malloc(strlen(aggrstr) + 1);
+               e = sql_error(sql, 02, "%s: not allowed in WHERE clause",
+                               toUpperCopy(uaggrstr, aggrstr));
+               free(uaggrstr);
+               return e;
+       }
 
        /* window operations are only allowed in the projection */
        if (r->op != op_project)
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to