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

Modified Files:
      Tag: Nov2009
        sql_optimizer.mx sql_scenario.mx 
Log Message:
Simplify optimizer pipeline setting and test for available ones.
Missing pipelines lead to the minimal plan possible.


Index: sql_scenario.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_scenario.mx,v
retrieving revision 1.356.2.1
retrieving revision 1.356.2.2
diff -u -d -r1.356.2.1 -r1.356.2.2
--- sql_scenario.mx     22 Oct 2009 09:47:51 -0000      1.356.2.1
+++ sql_scenario.mx     23 Oct 2009 11:54:24 -0000      1.356.2.2
@@ -293,7 +293,7 @@
        bit T = TRUE;
        bit F = FALSE;
        ValRecord src;
-       str optimizer, pipe= NULL;
+       str optimizer;
 
        typename = "int";
        sql_find_subtype(&ctype, typename, 0, 0);
@@ -305,18 +305,9 @@
        SQLglobal("current_user", user);
        SQLglobal("current_role", user);
        optimizer= GDKgetenv("sql_optimizer");
-       /* the sql_optimizer may point to a specific pipeline */
        if (optimizer == NULL)
-               optimizer= defaultPlan;
-       else {
-               /* the sql_optimizer may point to a specific pipeline */
-               pipe= GDKgetenv(optimizer);
-               if ( pipe != NULL)
-                       optimizer= pipe;
-               defaultPlan= optimizer;
-       }
-       setOptimizers(optimizer);
-       SQLglobal("optimizer", optimizer);
+               optimizer= "none";
+       SQLglobal("optimizer", setOptimizers(optimizer));
 
        typename = "sec_interval";
        sql_find_subtype(&ctype, typename, 0, 0);

Index: sql_optimizer.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_optimizer.mx,v
retrieving revision 1.230.2.1
retrieving revision 1.230.2.2
diff -u -d -r1.230.2.1 -r1.230.2.2
--- sql_optimizer.mx    22 Oct 2009 09:47:51 -0000      1.230.2.1
+++ sql_optimizer.mx    23 Oct 2009 11:54:23 -0000      1.230.2.2
@@ -137,7 +137,7 @@
 sql5_export str SQLoptimizer(Client c);
 sql5_export void SQLsetAccessMode(Client c);
 sql5_export int SQLvalidatePipeline(void);
-sql5_export void setOptimizers(str optimizer);
+sql5_export str setOptimizers(str optimizer);
 sql5_export str defaultPlan;
 
 #endif /* _SQL_OPTIMIZER_H_ */
@@ -440,13 +440,13 @@
 the SQL set optimizer statement. The default list has been
 tested extensively and should provide overall good performance.
 Additional pipelines are defined in the monetdb.conf file.
+The plan 'none' sets the optimizer pipeline to the minimal possible.
 @c
 str minimalPlan= "inline,remap,deadcode,multiplex";
 str defaultPlan = NULL; 
 
 static str optimizers[256];    /* the optimizer pipeline */
-static str optimizerpipeline;          /* reference to last pipeline string */
-static int pipelineOverruled;
+static str optimizerpipe;              /* reference to last pipeline string */
        
 int
 SQLvalidatePipeline(void){
@@ -504,27 +504,29 @@
        return error;
 }
 
-void
+str
 setOptimizers(str optimizer)
 {
        /* the optimizer control is a semicolon separated list of names */
-       /* the predefined 'default' injects the default plan upon need */
+       /* the predefined 'none' injects the default minimal plan upon need */
        int top=0,i;
        char *base,  *nxt, *nme, *pipe;
        
-       if (optimizerpipeline == optimizer || pipelineOverruled)
-               return;
+       if (strcmp(optimizer,"none")==0)
+               optimizer= GDKstrdup(minimalPlan);
+       if (optimizerpipe == optimizer )
+               return optimizerpipe;
        pipe= GDKgetenv(optimizer);
-       if ( pipe != NULL)
+       if ( pipe != NULL){
                optimizer= pipe;
+               GDKsetenv("sql_optimizer",pipe);
+       }
 
-       optimizerpipeline= optimizer;
+       optimizerpipe= optimizer;
        base= GDKstrdup(optimizer);
 
        for ( i = 0; i < 256; i++)
                optimizers[i] = NULL;
-       if (strcmp(optimizer,"default")==0)
-               optimizer= GDKstrdup(defaultPlan? defaultPlan:minimalPlan);
 
        optimizer=  base;
        while (optimizer && *optimizer ) {
@@ -539,16 +541,19 @@
                        optimizers[top++] = nme; 
                optimizer = nxt;
        } 
-       if (top == 256)
-               showException(SQL,"optimizer","Too many optimizer steps\n");
+       if (top == 1  && pipe == NULL){
+               showException(SQL,"optimizer","Optimizer %s does not exist, use 
minimal one\n",optimizers[0]);
+               setOptimizers("none");
+       }else
+       if (top == 256){
+               showException(SQL,"optimizer","Too many optimizer steps, use 
minimal one\n");
+               setOptimizers("none");
+       } else
        if (SQLvalidatePipeline() ) {
-               if (optimizerpipeline == defaultPlan || !defaultPlan)
-                       setOptimizers(minimalPlan);
-               else
-                       setOptimizers(defaultPlan);
-               pipelineOverruled= TRUE;
-               showException(SQL,"optimizer"," pipeline set to 
'%s'",optimizerpipeline);
+               showException(SQL,"optimizer"," Pipeline reset to 
'%s'",optimizerpipe);
+               setOptimizers("none");
        }
+       return optimizerpipe;
 }
 
 static void


------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to