Changeset: ac53b6560442 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ac53b6560442
Modified Files:
        MonetDB/src/gdk/gdk_batop.mx
        MonetDB5/src/mal/mal_box.mx
        MonetDB5/src/mal/mal_stack.mx
        MonetDB5/src/optimizer/opt_evaluate.mx
        sql/src/backends/monet5/sql_gencode.mx
        sql/src/backends/monet5/sql_scenario.mx
        sql/src/common/sql_list.c
        sql/src/server/rel_optimizer.c
Branch: default
Log Message:

now we 'cleanup' prepared statement when we receive an Xrelease from
the client.

After that fixed some leaks...


diffs (256 lines):

diff -r a71e02537e8c -r ac53b6560442 MonetDB/src/gdk/gdk_batop.mx
--- a/MonetDB/src/gdk/gdk_batop.mx      Wed Dec 15 14:23:18 2010 +0100
+++ b/MonetDB/src/gdk/gdk_batop.mx      Wed Dec 15 23:34:30 2010 +0100
@@ -2914,6 +2914,7 @@
        if (!p && (p = (PROPrec *) GDKmalloc(sizeof(PROPrec))) != NULL) {
                p->id = idx;
                p->next = b->T->props;
+               p->v.vtype = 0;
                b->T->props = p;
        }
        if (p) {
diff -r a71e02537e8c -r ac53b6560442 MonetDB5/src/mal/mal_box.mx
--- a/MonetDB5/src/mal/mal_box.mx       Wed Dec 15 14:23:18 2010 +0100
+++ b/MonetDB5/src/mal/mal_box.mx       Wed Dec 15 23:34:30 2010 +0100
@@ -419,6 +419,7 @@
                chkStack(box->val, i);
        }
        v = &box->val->stk[i];
+       VALclear(v);
        box->val->stktop++;
        VALcopy(v, val);
        box->dirty= TRUE;
diff -r a71e02537e8c -r ac53b6560442 MonetDB5/src/mal/mal_stack.mx
--- a/MonetDB5/src/mal/mal_stack.mx     Wed Dec 15 14:23:18 2010 +0100
+++ b/MonetDB5/src/mal/mal_stack.mx     Wed Dec 15 23:34:30 2010 +0100
@@ -213,6 +213,7 @@
        for (v = s->stk; i >= 0; i--, v++)
                if (ATOMextern(v->vtype) && v->val.pval) {
                        GDKfree(v->val.pval);
+                       v->vtype = 0;
                        v->val.pval = NULL;
                }
        s->stkbot = 0;
diff -r a71e02537e8c -r ac53b6560442 MonetDB5/src/optimizer/opt_evaluate.mx
--- a/MonetDB5/src/optimizer/opt_evaluate.mx    Wed Dec 15 14:23:18 2010 +0100
+++ b/MonetDB5/src/optimizer/opt_evaluate.mx    Wed Dec 15 23:34:30 2010 +0100
@@ -199,6 +199,8 @@
                        }
                        if (msg == MAL_SUCCEED) {
                                ValRecord cst;
+
+                               cst.vtype = 0;
                                VALcopy(&cst, &env->stk[getArg(p, 0)]);
                                /* You may not overwrite constants.  They may 
be used by
                                 * other instructions */
diff -r a71e02537e8c -r ac53b6560442 sql/src/backends/monet5/sql_gencode.mx
--- a/sql/src/backends/monet5/sql_gencode.mx    Wed Dec 15 14:23:18 2010 +0100
+++ b/sql/src/backends/monet5/sql_gencode.mx    Wed Dec 15 23:34:30 2010 +0100
@@ -100,6 +100,7 @@
        ValRecord cst;
 
        (void) sql;
+       cst.vtype = 0;
        VALcopy(&cst,vr);
        idx = defConstant(mb, vr->vtype, &cst);
        return idx;
diff -r a71e02537e8c -r ac53b6560442 sql/src/backends/monet5/sql_scenario.mx
--- a/sql/src/backends/monet5/sql_scenario.mx   Wed Dec 15 14:23:18 2010 +0100
+++ b/sql/src/backends/monet5/sql_scenario.mx   Wed Dec 15 23:34:30 2010 +0100
@@ -105,7 +105,7 @@
 
        (void)clientid;
        if (p != NULL)
-               GDKfree(p);
+               freeStack(p);
 #ifdef _SQL_SCENARIO_DEBUG
        mnstr_printf(GDKout, "#monet5_freestack\n");
 #endif
@@ -1204,13 +1204,17 @@
 
                        v = (int) strtol(in->buf+in->pos+6,NULL,0);
                        t = res_tables_find(m->results, v);
-                       if (t) {
-                               cq *q = NULL;
+                       if (t) 
+                               m->results = res_tables_remove(m->results, t);
+                       in->pos = in->len;      /* HACK: should use parsed 
lenght */
+                       return NULL;
+               }
+               if( strncmp(in->buf+in->pos,"release ", 8)==0 ){
+                       cq *q = NULL;
 
-                               if (t->query_type == Q_PREPARE && (q = 
qc_find(m->qc, t->cur_col)) != NULL) 
+                       v = (int) strtol(in->buf+in->pos+ 8,NULL,0);
+                       if ((q = qc_find(m->qc, v)) != NULL) 
                                        qc_delete(m->qc, q);
-                               m->results = res_tables_remove(m->results, t);
-                       }
                        in->pos = in->len;      /* HACK: should use parsed 
lenght */
                        return NULL;
                }
@@ -1326,13 +1330,6 @@
                                          m->type,/* the type of the statement 
*/
                                          sql_escape_str(QUERY(m->scanner)));
                        scanner_query_processed(&(m->scanner));
-                       /* keep prepared statements in list of results, such
-                          that Xclose statements can clean them up */
-                       if (be->q->type == Q_PREPARE) {
-                               res_table *t = res_table_create(m->session->tr, 
m->result_id++, 0, Q_PREPARE, m->results, NULL);
-                               m->results = t;
-                               t->cur_col = be->q->id;
-                       }
                        be->q->code = 
                                (backend_code)backend_dumpproc(be, c, be->q, s);
                        be->q->stk = 0;
diff -r a71e02537e8c -r ac53b6560442 sql/src/common/sql_list.c
--- a/sql/src/common/sql_list.c Wed Dec 15 14:23:18 2010 +0100
+++ b/sql/src/common/sql_list.c Wed Dec 15 23:34:30 2010 +0100
@@ -55,6 +55,17 @@
        return l;
 }
 
+static list *
+list_new_(list *l) 
+{
+       list *res = NULL;
+       if (l->sa) 
+               res = list_new(l->sa);
+       else
+               res = list_create(l->destroy);
+       return res;
+}
+
 int
 list_empty(list *l)
 {
@@ -270,7 +281,7 @@
 list *
 list_keysort(list *l, int *keys, fdup dup)
 {
-       list *res = list_create(l->destroy);
+       list *res = list_new_(l);
        node *n = NULL;
        int i, j, *pos, cnt = list_length(l);
 
@@ -291,7 +302,7 @@
 list *
 list_sort(list *l, fkeyvalue key, fdup dup)
 {
-       list *res = list_create(l->destroy);
+       list *res = list_new_(l);
        node *n = NULL;
        int i, j, *keys, *pos, cnt = list_length(l);
 
@@ -318,10 +329,7 @@
        node *n = NULL;
 
        if (key && l) {
-               if (l->sa)
-                       res = list_new(l->sa);
-               else
-                       res = list_create(l->destroy);
+               res = list_new_(l);
                for (n = l->h; n; n = n->next) 
                        if (cmp(n->data, key) == 0) 
                                list_append(res, dup?dup(n->data):n->data);
@@ -333,7 +341,7 @@
 list * 
 list_order(list *l, fcmp cmp, fdup dup)
 {
-       list *res = list_create(l->destroy);
+       list *res = list_new_(l);
        node *m, *n = NULL;
 
        /* use simple insert sort */
@@ -354,7 +362,7 @@
 list *
 list_distinct(list *l, fcmp cmp, fdup dup)
 {
-       list *res = list_create(l->destroy);
+       list *res = list_new_(l);
        node *n = NULL;
 
        for (n = l->h; n; n = n->next) {
@@ -407,7 +415,7 @@
 list *
 list_distinct2(list *l, void *data, fcmp2 cmp, fdup dup)
 {
-       list *res = list_create(l->destroy);
+       list *res = list_new_(l);
        node *n = NULL;
 
        for (n = l->h; n; n = n->next) {
@@ -451,7 +459,7 @@
 list *
 list_map(list *l, void *data, fmap map)
 {
-       list *res = list_create(l->destroy);
+       list *res = list_new_(l);
 
        node *n = l->h;
 
@@ -505,11 +513,7 @@
 list *
 list_dup(list *l, fdup dup)
 {
-       list *res = NULL;
-       if (l->sa) 
-               res = list_new(l->sa);
-       else
-               res = list_create(l->destroy);
+       list *res = list_new_(l);
        return list_merge(res, l, dup);
 }
 
diff -r a71e02537e8c -r ac53b6560442 sql/src/server/rel_optimizer.c
--- a/sql/src/server/rel_optimizer.c    Wed Dec 15 14:23:18 2010 +0100
+++ b/sql/src/server/rel_optimizer.c    Wed Dec 15 23:34:30 2010 +0100
@@ -495,9 +495,9 @@
 }
 
 list *
-order_join_expressions(list *dje, list *rels)
+order_join_expressions(sql_allocator *sa, list *dje, list *rels)
 {
-       list *res = list_create(dje->destroy);
+       list *res = list_new(sa);
        node *n = NULL;
        int i, j, *keys, *pos, cnt = list_length(dje);
 
@@ -530,7 +530,7 @@
 }
 
 static list *
-find_fk(list *rels, list *exps) 
+find_fk(sql_allocator *sa, list *rels, list *exps) 
 {
        node *djn;
        list *sdje, *aje, *dje;
@@ -599,7 +599,7 @@
        }
 
        /* sort expressions on weighted number of reducing operators */
-       sdje = order_join_expressions(dje, rels);
+       sdje = order_join_expressions(sa, dje, rels);
        return sdje;
 }
 
@@ -613,7 +613,7 @@
        int fnd = 0;
 
        /* find foreign keys and reorder the expressions on reducing quality */
-       sdje = find_fk(rels, exps);
+       sdje = find_fk(sql->sa, rels, exps);
 
        /* open problem, some expressions use more then 2 relations */
        /* For example a.x = b.y * c.z; */
@@ -828,7 +828,7 @@
                list_append(rels, rel->l);
                list_append(rels, rel->r);
                cnt = list_length(exps);
-               rel->exps = find_fk(rels, exps);
+               rel->exps = find_fk(sql->sa, rels, exps);
                if (list_length(rel->exps) != cnt) {
                        rel->exps = list_dup(exps, (fdup)NULL);
                }
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to