Update of /cvsroot/monetdb/sql/src/backends/monet5
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv27458

Modified Files:
      Tag: Nov2009
        sql.mx sql_optimizer.mx 
Log Message:
Move the validation of the optimizer pipeline to the assignment itself,
rather then checking them on the first call.


Index: sql_optimizer.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_optimizer.mx,v
retrieving revision 1.230.2.8
retrieving revision 1.230.2.9
diff -u -d -r1.230.2.8 -r1.230.2.9
--- sql_optimizer.mx    8 Nov 2009 14:36:34 -0000       1.230.2.8
+++ sql_optimizer.mx    15 Nov 2009 16:55:27 -0000      1.230.2.9
@@ -136,7 +136,7 @@
 sql5_export void addQueryToCache(Client c);
 sql5_export str SQLoptimizer(Client c);
 sql5_export void SQLsetAccessMode(Client c);
-sql5_export int SQLvalidatePipeline(void);
+sql5_export str SQLvalidatePipeline(void);
 sql5_export str setOptimizers(str optimizer);
 
 #endif /* _SQL_OPTIMIZER_H_ */
@@ -441,6 +441,7 @@
 Additional pipelines are defined in the monetdb.conf file.
 The optimizers can be turned on/off, leaving the minimal plan
 active.
+The first error in the optimizer string is shown.
 @c
 str minimalPlan= "inline,remap,deadcode,multiplex";
 
@@ -448,17 +449,17 @@
 static str optimizerpipe;              /* reference to last pipeline string */
 static char *previouspipe = 0;
        
-int
+str
 SQLvalidatePipeline(void){
-       int error= 0;
        int mitosis= FALSE, deadcode= FALSE, mergetable= FALSE, replication= 
FALSE;
        int i;
 
        mal_set_lock(sql_contextLock,"SQL optimizer");
-       if (optimizers[0] &&  strcmp(optimizers[0],"inline") ){
-               showException(SQL,"optimizer"," 'inline' should be the 
first\n");
-               error++;
+       if (optimizers[0] &&  strcmp(optimizers[0],"inline") ) {
+               mal_unset_lock(sql_contextLock,"SQL optimizer");
+               throw(SQL,"optimizer"," 'inline' should be the first\n");
        }
+       
        /* deadcode should be used */
        for ( i=0; optimizers[i]; i++)
                if (strcmp(optimizers[i],"deadcode") == 0)
@@ -476,34 +477,34 @@
 #ifdef WIN32
                else
                if (strcmp(optimizers[i],"octopus") == 0){
-                       showException(SQL,"optimizer"," 'octopus' needs 
Linux\n");
-                       error++;
+                       mal_unset_lock(sql_contextLock,"SQL optimizer");
+                       throw(SQL,"optimizer"," 'octopus' needs Linux\n");
                }
 #endif
        if (optimizers[0] && mitosis == TRUE && mergetable == FALSE) {
-               showException(SQL,"optimizer"," 'mitosis' needs 
'mergetable'\n");
-               error++;
+               mal_unset_lock(sql_contextLock,"SQL optimizer");
+               throw(SQL,"optimizer"," 'mitosis' needs 'mergetable'\n");
        }
 
        if ( --i >= 0 && optimizers[i] && strcmp(optimizers[i],"multiplex") ){
-               showException(SQL,"optimizer"," 'multiplex' should be the 
last\n");
-               error++;
+               mal_unset_lock(sql_contextLock,"SQL optimizer");
+               throw(SQL,"optimizer"," 'multiplex' should be the last\n");
        }
        if (optimizers[0] && deadcode == FALSE ){
-               showException(SQL,"optimizer"," 'deadcode' should be used at 
least once\n");
-               error++;
+               mal_unset_lock(sql_contextLock,"SQL optimizer");
+               throw(SQL,"optimizer"," 'deadcode' should be used at least 
once\n");
        }
 @-
 For replicated databases we need to ensure that the corresponding optimizer
 is enabled.
 @c
        if ( MASTERroleEnabled() && replication == FALSE){
-               showException(SQL,"optimizer"," 'replication' should be part of 
the pipeline\n");
-               error++;
+               mal_unset_lock(sql_contextLock,"SQL optimizer");
+               throw(SQL,"optimizer"," 'replication' should be part of the 
pipeline\n");
        }
 
        mal_unset_lock(sql_contextLock,"SQL optimizer");
-       return error;
+       return MAL_SUCCEED;
 }
 
 @-
@@ -558,25 +559,21 @@
                        nxt++;
                }
                if ((nme = putName(optimizer,strlen(optimizer))) == 0)
-                       showException(SQL,"optimizer"," '%s' does not 
exist\n",optimizer);
+                       showException(SQL,"optimizer"," '%s' pipeline does not 
exist\n",optimizer);
                else if (top<255)
                        optimizers[top++] = nme; 
                optimizer = nxt;
        } 
        optimizers[top] = 0;
        GDKfree(base);
-       if (top == 1  && pipe == NULL){
-               showException(SQL,"optimizer","Optimizer '%s' does not exist, 
use default pipe instead\n", optimizerpipe?optimizerpipe:"undefined");
+       if (top <= 1  && pipe == NULL){
+               showException(SQL,"optimizer","Optimizer '%s' pipeline does not 
exist, use default pipe instead\n", optimizerpipe?optimizerpipe:"undefined");
                setOptimizers("default_pipe");
        }else
        if (top == 256){
                showException(SQL,"optimizer","Too many optimizer steps, use 
default pipe instead\n");
                setOptimizers("default_pipe");
-       } else
-       if (SQLvalidatePipeline() ) {
-               showException(SQL,"optimizer"," Invalid pipeline,  use 
default_pipe instead\n");
-               setOptimizers("default_pipe");
-       }
+       } 
        return GDKstrdup(optimizerpipe);
 }
 

Index: sql.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql.mx,v
retrieving revision 1.358.2.10
retrieving revision 1.358.2.11
diff -u -d -r1.358.2.10 -r1.358.2.11
--- sql.mx      8 Nov 2009 13:38:52 -0000       1.358.2.10
+++ sql.mx      15 Nov 2009 16:55:27 -0000      1.358.2.11
@@ -1180,6 +1180,7 @@
 #include <sql_storage.h>
 #include <sql_scenario.h>
 #include <store_sequence.h>
+#include <sql_optimizer.h>
 #include <sql_datetime.h>
 #include <rel_optimizer.h>
 #include <rel_select.h>
@@ -1416,6 +1417,14 @@
 
        if (mtype < 0 || mtype >= 255)
                throw(SQL, "sql.setVariable", "failed");
+       if ( strcmp("optimizer",  varname)== 0) {
+               setOptimizers(*(str *) getArgReference(stk,pci,2));
+               msg = SQLvalidatePipeline();
+               if ( msg ){
+                       setOptimizers("default_pipe");
+                       return msg;
+               }
+       }
        src = &stk->stk[getArg(pci, 2)];
        if (stack_find_var(m, varname)) {
                stack_set_var(m, varname, src);


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to