Update of /cvsroot/monetdb/sql/src/backends/monet5
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv24576/src/backends/monet5

Modified Files:
        sql_optimizer.mx sql_scenario.mx sql_user.mx 
Log Message:
propagated changes of Thursday Oct 25 2007 - Monday Oct 29 2007
from the SQL_2-20 branch to the development trunk


Index: sql_scenario.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_scenario.mx,v
retrieving revision 1.280
retrieving revision 1.281
diff -u -d -r1.280 -r1.281
--- sql_scenario.mx     22 Oct 2007 10:43:09 -0000      1.280
+++ sql_scenario.mx     29 Oct 2007 20:11:37 -0000      1.281
@@ -91,7 +91,8 @@
 static void
 monet5_freestack(backend_stack stk)
 {
-       ptr p = (ptr)stk;
+       MalStkPtr p = (ptr)stk;
+
        if (p != NULL)
                GDKfree(p);
 #ifdef _SQL_SCENARIO_DEBUG
@@ -254,13 +255,12 @@
        return MAL_SUCCEED;
 }
 
[EMAIL PROTECTED]
[EMAIL PROTECTED] SQLglobal
-       name = @1;
-       r = stmt_var(_strdup(name), &ctype, 0, 1);
-       stack_push_var(sql, name, r, &ctype);
-       stack_set_var(sql, name, VALset(&src, ctype.type->localtype, @2));
[EMAIL PROTECTED]
+#define SQLglobal(name, val) \
+       r = stmt_var(_strdup(name), &ctype, 0, 1); \
+       stack_push_var(sql, name, r, &ctype);      \
+       stmt_destroy(r);                           \
+       stack_set_var(sql, name, VALset(&src, ctype.type->localtype, val));
+
 /* initialize the global variable, ie make mvc point to these */
 static int
 global_variables(mvc *sql, char *user, char *schema)
@@ -276,27 +276,27 @@
 
        typename = "int";
        sql_find_subtype(&ctype, typename, 0, 0);
-       @:SQLglobal("debug", &debug)@
+       SQLglobal("debug", &sql->debug);
 
        typename = "varchar";
        sql_find_subtype(&ctype, typename, 8, 0);
-       @:SQLglobal("explain", "")@
+       SQLglobal("explain", "");
 
        sql_find_subtype(&ctype, typename, 1024, 0);
-       @:SQLglobal("current_schema", schema)@
-       @:SQLglobal("current_user", user)@
-       @:SQLglobal("current_role", user)@
-       @:SQLglobal("optimizer", defaultPlan)@
+       SQLglobal("current_schema", schema);
+       SQLglobal("current_user", user);
+       SQLglobal("current_role", user);
+       SQLglobal("optimizer", defaultPlan);
 
        typename = "sec_interval";
        sql_find_subtype(&ctype, typename, 0, 0);
-       @:SQLglobal("current_timezone", &sec)@
+       SQLglobal("current_timezone", &sec);
 
        typename = "boolean";
        sql_find_subtype(&ctype, typename, 0, 0);
-       @:SQLglobal("cache", &T)@
-       @:SQLglobal("profile", &F)@
-       @:SQLglobal("trace", &F)@
+       SQLglobal("cache", &T);
+       SQLglobal("profile", &F);
+       SQLglobal("trace", &F);
        return 0;
 }
 
@@ -1132,7 +1132,7 @@
 {
        mvc *c = be->mvc;
        int argc, parc; 
-       ValPtr *argv, argvbuffer[MAXARG];
+       ValPtr *argv, argvbuffer[MAXARG], v;
        ValRecord *argrec, argrecbuffer[MAXARG];
        MalBlkPtr mb;
        MalStkPtr glb;
@@ -1187,6 +1187,12 @@
        }
        glb = (MalStkPtr)(q->stk);
        ret= callMAL(cntxt,mb, &glb, argv, (c->mode == m_debug?'n':0));
+       /* cleanup the arguments */
+       for(i=pci->retc; i<pci->argc; i++) {
+               garbageElement(v= &glb->stk[pci->argv[i]]);
+               v->vtype= TYPE_int;
+               v->val.ival= int_nil;
+       }
        q->stk = (backend_stack)glb;
        if( pci->argc >= MAXARG)
                GDKfree(argv);

Index: sql_user.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_user.mx,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- sql_user.mx 4 Oct 2007 10:43:41 -0000       1.32
+++ sql_user.mx 29 Oct 2007 20:11:37 -0000      1.33
@@ -212,6 +212,7 @@
        /* following funcion returns a table (single column) of user names
           with the approriate scenario (sql) */
        mvc_create_func(m, s, "db_users", l, &tpe, FALSE, FALSE, "sql", 
"db_users", 1);
+       list_destroy(l);
 
        t = mvc_create_view(m, s, "users",
                        "SELECT u.\"name\" AS \"name\", "
@@ -388,6 +389,7 @@
        stack_set_string(m, "current_schema", schema);
        stack_set_string(m, "current_user", username);
        stack_set_string(m, "current_role", username);
+       GDKfree(username);
        mvc_rollback(m, 0, NULL);
        return schema;
 }

Index: sql_optimizer.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_optimizer.mx,v
retrieving revision 1.161
retrieving revision 1.162
diff -u -d -r1.161 -r1.162
--- sql_optimizer.mx    12 Oct 2007 08:18:23 -0000      1.161
+++ sql_optimizer.mx    29 Oct 2007 20:11:36 -0000      1.162
@@ -484,7 +484,9 @@
 addOptimizers(Client c,MalBlkPtr mb, str optimizer)
 {
        /* the optimizer control is a semicolon separated list of names */
+       /* the predefined 'default' injects the default plan upon need */
        str optimizers[256];
+       str oldbase= optimizer;
        int top=0,i;
        char *nxt, *nme;
 
@@ -497,7 +499,6 @@
                if (strcmp(optimizer,"default")==0){
                        str base= GDKstrdup(defaultPlan? 
defaultPlan:minimalPlan);
                        addOptimizers(c,mb,base);
-                       GDKfree(base);
                } else if ((nme = getName(optimizer,strlen(optimizer))) == 0) {
                        showException(SQL,"optimizer"," '%s' does not 
exist\n",optimizer);
                        mb->errors++;
@@ -505,12 +506,18 @@
                        optimizers[top++] = nme; 
                optimizer = nxt;
        } 
+       if( top== 256){
+               showException(SQL,"optimizer","Too many optimizer steps\n");
+               mb->errors++;
+       }
 
        /* add the optimizers to the query plan */
        for (i=0;i<top; i++) {
-               InstrPtr p = 
newFcnCall(mb,getName("optimizer",9),optimizers[i]);
+               InstrPtr p = newFcnCall(mb,"optimizer",optimizers[i]);
                typeChecker(c->nspace, mb,p,TRUE);
        }
+       if( oldbase)
+               GDKfree(oldbase);
 }
 
 void
@@ -568,7 +575,6 @@
                        VALset(&src, TYPE_str, defaultPlan? 
defaultPlan:minimalPlan));
                addOptimizers(c,mb, base);
                optimizeMALBlock(mb);
-               GDKfree(base);
        } else
        if( strcmp(optimizer,"off")==0 ){ 
                str base = GDKstrdup(minimalPlan);
@@ -578,12 +584,10 @@
                /* no real optimization needed */
                addOptimizers(c,mb, base);
                optimizeMALBlock(mb);
-               GDKfree(base);
        } else {
                str base = GDKstrdup(optimizer);
 
                addOptimizers(c,mb,base);
-               GDKfree(base);
 
                /* time to execute the optimizers */
                if( c->debug)


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to