Changeset: bb78684d86c7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bb78684d86c7
Modified Files:
        sql/backends/monet5/sql_scenario.c
        sql/common/sql_mem.c
        sql/common/sql_types.c
        sql/server/rel_optimizer.c
Branch: default
Log Message:

more fixes for a cleaner exit


diffs (138 lines):

diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -175,17 +175,19 @@ SQLprelude(void)
 str
 SQLepilogue(void)
 {
-       char *s = "sql";
+       char *s = "sql", *m = "msql";
+       str res;
 
        if( SQLinitialized){
-               /*
                mvc_exit();
                SQLinitialized= FALSE;
-               */
        }
        /* this function is never called, but for the style of it, we clean
         * up our own mess */
-       return msab_retreatScenario(s);
+       res = msab_retreatScenario(m);
+       if (!res)
+               return msab_retreatScenario(s);
+       return res;
 }
 
 MT_Id sqllogthread, minmaxthread;
diff --git a/sql/common/sql_mem.c b/sql/common/sql_mem.c
--- a/sql/common/sql_mem.c
+++ b/sql/common/sql_mem.c
@@ -105,6 +105,7 @@ char *sa_alloc( sql_allocator *sa, size_
                sa->blks[sa->nr-1] = r;
                sa->blks[sa->nr] = t;
                sa->nr ++;
+               sa->usedmem += sz;
                return r;
        }
        if (sz > (SA_BLOCK-sa->used)) {
@@ -116,11 +117,11 @@ char *sa_alloc( sql_allocator *sa, size_
                sa->blks[sa->nr] = r;
                sa->nr ++;
                sa->used = sz;
+               sa->usedmem += SA_BLOCK;
                return r;
        }
        r = sa->blks[sa->nr-1] + sa->used;
        sa->used += sz;
-       sa->usedmem += sz;
        return r;
 }
 
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -1169,8 +1169,6 @@ sql_create_sqlfunc(sql_allocator *sa, ch
        return t;
 }
 
-static sql_allocator *sa = NULL;
-
 /* SQL service initialization
 This C-code version initializes the
 parser catalogs with typing information. Although, in principle,
@@ -1608,16 +1606,15 @@ sqltypeinit( sql_allocator *sa)
 }
 
 void
-types_init(sql_allocator *nsa, int debug)
+types_init(sql_allocator *sa, int debug)
 {
        (void)debug;
-       sa = nsa;
        aliases = sa_list(sa);
        types = sa_list(sa);
        localtypes = sa_list(sa);
        aggrs = sa_list(sa);
        funcs = sa_list(sa);
        funcs->ht = hash_new(sa, 1024, (fkeyvalue)&base_key);
-       sqltypeinit( nsa );
+       sqltypeinit( sa );
 }
 
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
@@ -4185,13 +4185,13 @@ positional_exps_mark_used( sql_rel *rel,
 }
 
 static void
-exps_mark_used(sql_rel *rel, sql_rel *subrel)
+exps_mark_used(sql_allocator *sa, sql_rel *rel, sql_rel *subrel)
 {
        int nr = 0;
        if (rel->exps) {
                node *n;
                int len = list_length(rel->exps), i;
-               sql_exp **exps = NEW_ARRAY(sql_exp*, len);
+               sql_exp **exps = SA_NEW_ARRAY(sa, sql_exp*, len);
 
                for (n=rel->exps->h, i = 0; n; n = n->next, i++) 
                        exps[i] = n->data;
@@ -4205,7 +4205,6 @@ exps_mark_used(sql_rel *rel, sql_rel *su
                                nr += exp_mark_used(subrel, e);
                        }
                }
-               _DELETE(exps);
        }
        /* for count/rank we need atleast one column */
        if (!nr && (is_project(subrel->op) || is_base(subrel->op)) && 
subrel->exps->h) {
@@ -4283,7 +4282,7 @@ rel_mark_used(mvc *sql, sql_rel *rel, in
        case op_project:
        case op_groupby: 
                if (proj && rel->l) {
-                       exps_mark_used(rel, rel->l);
+                       exps_mark_used(sql->sa, rel, rel->l);
                        rel_mark_used(sql, rel->l, 0);
                }
                break;
@@ -4295,7 +4294,7 @@ rel_mark_used(mvc *sql, sql_rel *rel, in
 
        case op_select:
                if (rel->l) {
-                       exps_mark_used(rel, rel->l);
+                       exps_mark_used(sql->sa, rel, rel->l);
                        rel_mark_used(sql, rel->l, 0);
                }
                break;
@@ -4337,8 +4336,8 @@ rel_mark_used(mvc *sql, sql_rel *rel, in
        case op_full: 
        case op_semi: 
        case op_anti: 
-               exps_mark_used(rel, rel->l);
-               exps_mark_used(rel, rel->r);
+               exps_mark_used(sql->sa, rel, rel->l);
+               exps_mark_used(sql->sa, rel, rel->r);
                rel_mark_used(sql, rel->l, 0);
                rel_mark_used(sql, rel->r, 0);
                break;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to