Changeset: 697999a64eaf for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=697999a64eaf
Modified Files:
        sql/src/backends/monet5/Tests/optimizers.sql
        sql/src/backends/monet5/Tests/optimizers.stable.err
        sql/src/backends/monet5/Tests/optimizers.stable.out
        sql/src/backends/monet5/sql_optimizer.mx
        sql/src/backends/monet5/sql_scenario.mx
        sql/src/test/Tests/setoptimizer.stable.err
        sql/src/test/Tests/setoptimizer.stable.out
Branch: default
Log Message:

Optimizer pipeline inherit from server
Avoided overwriting the SQL optimizer pipeline setting of the server when 
connecting.
Instead, the optimizer pipeline setting of the server is used as a starting 
point for clients.


diffs (273 lines):

diff -r 50de40d39eea -r 697999a64eaf 
sql/src/backends/monet5/Tests/optimizers.sql
--- a/sql/src/backends/monet5/Tests/optimizers.sql      Fri Jun 04 00:30:40 
2010 +0200
+++ b/sql/src/backends/monet5/Tests/optimizers.sql      Sat Jun 05 16:56:57 
2010 +0200
@@ -5,13 +5,13 @@
 select 'optimizer test:',optimizer;
 
 set optimizer='off';
-select 'optimizer test:',optimizer;
+select 'optimizer off test:',optimizer;
 
 set optimizer='on';
-select 'optimizer test:',optimizer;
+select 'optimizer on test:',optimizer;
 
 set optimizer='';
-select 'optimizer test:',optimizer;
+select 'optimizer <empty> test:',optimizer;
 
 set 
optimizer='costModel,coercions,emptySet,accessmode,aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
 
diff -r 50de40d39eea -r 697999a64eaf 
sql/src/backends/monet5/Tests/optimizers.stable.err
--- a/sql/src/backends/monet5/Tests/optimizers.stable.err       Fri Jun 04 
00:30:40 2010 +0200
+++ b/sql/src/backends/monet5/Tests/optimizers.stable.err       Sat Jun 05 
16:56:57 2010 +0200
@@ -12,49 +12,43 @@
 # 08:05:50 >  Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb 
--host=gio --port=35043 
 # 08:05:50 >  
 
-MAPI  = mone...@eir:39446
-QUERY = set optimizer='off';
-ERROR = !SQLException:optimizer: 'garbageCollector' should be used as the last 
one
-MAPI  = mone...@eir:39446
-QUERY = set optimizer='';
-ERROR = !SQLException:optimizer: 'garbageCollector' should be used as the last 
one
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set 
optimizer='costModel,coercions,emptySet,accessmode,aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set 
optimizer='coercions,emptySet,accessmode,aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set 
optimizer='emptySet,accessmode,aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set 
optimizer='accessmode,aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set 
optimizer='aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set 
optimizer='commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set optimizer='accumulators,joinPath,deadcode,reduce,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set optimizer='joinPath,deadcode,reduce,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set optimizer='deadcode,reduce,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set optimizer='reduce,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set optimizer='garbageCollector';
 ERROR = !SQLException:optimizer:Optimizer 'garbageCollector' pipeline does not 
exist, use default pipe instead
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set 
optimizer='costModel,coercions,emptySet,accessmode,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:39446
+MAPI  = mone...@eir:34547
 QUERY = set 
optimizer='costModel,coercions,emptySet,accessmode,commonTerms,accumulators,joinPath,deadcode,garbageCollector';
 ERROR = !SQLException:optimizer: 'inline' should be the first
 
diff -r 50de40d39eea -r 697999a64eaf 
sql/src/backends/monet5/Tests/optimizers.stable.out
--- a/sql/src/backends/monet5/Tests/optimizers.stable.out       Fri Jun 04 
00:30:40 2010 +0200
+++ b/sql/src/backends/monet5/Tests/optimizers.stable.out       Sat Jun 05 
16:56:57 2010 +0200
@@ -49,19 +49,20 @@
 % .,   . # table_name
 % single_value,        single_value # name
 % char,        varchar # type
-% 15,  175 # length
-[ "optimizer test:",   
"inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,garbageCollector"
       ]
-#select 'optimizer test:',optimizer;
+% 19,  48 # length
+[ "optimizer off test:",       
"inline,remap,deadcode,multiplex,garbageCollector"      ]
+#select 'optimizer on test:',optimizer;
 % .,   . # table_name
 % single_value,        single_value # name
 % char,        varchar # type
-% 15,  2 # length
-[ "optimizer test:",   "on"    ]
+% 19,  2 # length
+[ "optimizer on test:",        "on"    ]
+#select 'optimizer <empty> test:',optimizer;
 % .,   . # table_name
 % single_value,        single_value # name
 % char,        varchar # type
-% 15,  175 # length
-[ "optimizer test:",   
"inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,garbageCollector"
       ]
+% 23,  48 # length
+[ "optimizer <empty> test:",   
"inline,remap,deadcode,multiplex,garbageCollector"      ]
 #select 'done';
 % . # table_name
 % single_value # name
diff -r 50de40d39eea -r 697999a64eaf sql/src/backends/monet5/sql_optimizer.mx
--- a/sql/src/backends/monet5/sql_optimizer.mx  Fri Jun 04 00:30:40 2010 +0200
+++ b/sql/src/backends/monet5/sql_optimizer.mx  Sat Jun 05 16:56:57 2010 +0200
@@ -139,6 +139,7 @@
 sql5_export str SQLvalidatePipeline(void);
 sql5_export str setOptimizers(str optimizer);
 
+sql5_export str optimizerpipe;         /* the active pipeline */
 #endif /* _SQL_OPTIMIZER_H_ */
 
 @-
@@ -437,19 +438,26 @@
        
optimizerCheck(cntxt,mb,"optimizer.SQLgetstatistics",actions,GDKusec()-clk,0);
 }
 @-
-The optimizers applied are taken from a list managed with
-the SQL set optimizer statement. The default list has been
+Optimizers steps are identified by a list of identifiers and given
+a pipeline name. The default pipeline in the distribution has been
 tested extensively and should provide overall good performance.
 Additional pipelines are defined in the monetdb.conf file.
-The optimizers can be turned on/off, leaving the minimal plan
-active.
+The optimizers can be turned on/off, leaving a minimal plan active.
+
+A few optimizations are always needed. First, the multiplex
+code should be turned into a proper MAL blocks before
+other optimizations take place.
+And before we actually execute the program, we should
+expand the macros (unless this has already been taken
+care of.
+
 The first error in the optimizer string is shown.
 @c
-str minimalPlan= "inline,remap,deadcode,multiplex";
+str minimalPipe= "minimal_pipe";
 
-static str optimizers[256];    /* the optimizer pipeline */
-static str optimizerpipe;              /* reference to last pipeline string */
-static char *previouspipe = 0;
+static str optimizers[256];            /* the broken down optimizer pipeline */
+str optimizerpipe;             /* the active pipeline */
+static str previouspipe = 0;   /* fall back position */
        
 str
 SQLvalidatePipeline(void){
@@ -520,12 +528,11 @@
 }
 
 @-
-A few optimizations are always needed. First, the multiplex
-code should be turned into a proper MAL blocks before
-other optimizations take place.
-And before we actually execute the program, we should
-expand the macros (unless this has already been taken
-care of.
+The prevalent optimizer pipeline is a global variable. All clients
+are affected. Clients can overrule the pipe-line setting temporarily,
+re-setting it to the previous one. Note, however, that no concurrency
+control is implemented to isolate the clients in playing with the
+optimizers.
 @c
 str
 setOptimizers(str optimizer)
@@ -538,20 +545,24 @@
                return optimizerpipe;
 
        /* catch  minimal pipes */
-       if (optimizer == NULL || *optimizer == 0 )
-               optimizer= minimalPlan;
-       else
+       if (optimizer == NULL || *optimizer == 0 ) {
+               pipe = GDKgetenv(minimalPipe);
+               if ( pipe )
+                       optimizer = pipe;
+       } else
        /* optimizers can be temporarily turned on/off */
        if(strcmp(optimizer,"off")==0){
-               if( previouspipe == NULL)
-                       previouspipe = optimizerpipe;
-               else return optimizerpipe;
-               optimizer= minimalPlan;
+               if( previouspipe )
+                       return optimizerpipe;
+               previouspipe = optimizerpipe;
+               pipe = GDKgetenv(minimalPipe);
+               if ( pipe )
+                       optimizer = pipe;
        } else
        if (strcmp(optimizer,"on")==0){
-               if (previouspipe)
-                       optimizer= previouspipe;
-               else return optimizerpipe;
+               if (previouspipe == NULL)
+                       return optimizerpipe;
+               optimizer= previouspipe;
                previouspipe = 0;
        } else {
                /* the optimizer may be an environment alias */
diff -r 50de40d39eea -r 697999a64eaf sql/src/backends/monet5/sql_scenario.mx
--- a/sql/src/backends/monet5/sql_scenario.mx   Fri Jun 04 00:30:40 2010 +0200
+++ b/sql/src/backends/monet5/sql_scenario.mx   Sat Jun 05 16:56:57 2010 +0200
@@ -330,7 +330,11 @@
        SQLglobal("current_schema", schema);
        SQLglobal("current_user", user);
        SQLglobal("current_role", user);
-       optimizer= GDKgetenv("sql_optimizer");
+       /* inherit the optimizer from the server */
+       if (optimizerpipe )
+               optimizer= optimizerpipe;
+       else
+               optimizer= GDKgetenv("sql_optimizer");
        if (optimizer == NULL)
                optimizer= "default_pipe";
        SQLglobal("optimizer", GDKstrdup(setOptimizers(optimizer)));
diff -r 50de40d39eea -r 697999a64eaf sql/src/test/Tests/setoptimizer.stable.err
--- a/sql/src/test/Tests/setoptimizer.stable.err        Fri Jun 04 00:30:40 
2010 +0200
+++ b/sql/src/test/Tests/setoptimizer.stable.err        Sat Jun 05 16:56:57 
2010 +0200
@@ -80,13 +80,10 @@
 # 12:49:31 >  mclient -lsql -i --host=eir --port=36907 
 # 12:49:31 >  
 
-MAPI  = mone...@eir:35648
-QUERY = set optimizer='off';
-ERROR = !SQLException:optimizer: 'garbageCollector' should be used as the last 
one
-MAPI  = mone...@eir:35648
+MAPI  = mone...@eir:34547
 QUERY = set optimizer='default,costModel';
 ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI  = mone...@eir:35648
+MAPI  = mone...@eir:34547
 QUERY = set optimizer='myfamous_pipe';
 ERROR = !SQLException:optimizer:Optimizer 'myfamous_pipe' pipeline does not 
exist, use default pipe instead
 
diff -r 50de40d39eea -r 697999a64eaf sql/src/test/Tests/setoptimizer.stable.out
--- a/sql/src/test/Tests/setoptimizer.stable.out        Fri Jun 04 00:30:40 
2010 +0200
+++ b/sql/src/test/Tests/setoptimizer.stable.out        Sat Jun 05 16:56:57 
2010 +0200
@@ -39,14 +39,14 @@
 % . # table_name
 % single_value # name
 % varchar # type
-% 175 # length
-[ 
"inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,garbageCollector"
    ]
+% 48 # length
+[ "inline,remap,deadcode,multiplex,garbageCollector"   ]
 #select optimizer;
 % . # table_name
 % single_value # name
 % varchar # type
-% 175 # length
-[ 
"inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,garbageCollector"
    ]
+% 48 # length
+[ "inline,remap,deadcode,multiplex,garbageCollector"   ]
 #select optimizer;
 % . # table_name
 % single_value # name
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to