Changeset: 887a6d6ded10 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=887a6d6ded10
Modified Files:
        monetdb5/optimizer/opt_pipes.c
Branch: default
Log Message:

Handle conditionally linked optimizers
Not all optimizers mentioned in the optimizer pipe table
need be loaded. A prerequisite test avoids their inclusion.
This should fix the type errors caused by the optimizer
pipeline compilation.


diffs (300 lines):

diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c
--- a/monetdb5/optimizer/opt_pipes.c
+++ b/monetdb5/optimizer/opt_pipes.c
@@ -37,12 +37,14 @@
 #include "mal_instruction.h"
 #include "mal_function.h"
 #include "mal_listing.h"
+#include "mal_linker.h"
 
 #define MAXOPTPIPES 64
 
 struct PIPELINES{
        char *name;
        char *def;
+       char *prerequisite;
        MalBlkPtr mb;
 } pipes[MAXOPTPIPES] ={
 /* The minimal pipeline necessary by the server to operate correctly*/
@@ -52,7 +54,7 @@ struct PIPELINES{
        "optimizer.deadcode();"
        "optimizer.multiplex();"
        "optimizer.garbageCollector();", 
-       0},
+       0,0},
 
 /*
  * The default pipe line contains as of Feb2010 mitosis-mergetable-reorder,
@@ -79,7 +81,7 @@ struct PIPELINES{
        "optimizer.multiplex();"
        "optimizer.accumulators();"
        "optimizer.garbageCollector();",
-        0},
+        0,0},
 
 /*
  * The no_mitosis pipe line is (and should be kept!) identical to the default 
pipeline,
@@ -107,7 +109,7 @@ struct PIPELINES{
        "optimizer.multiplex();"
        "optimizer.accumulators();"
        "optimizer.garbageCollector();",
-       0},
+       0,0},
 
 /* The sequential pipe line is (and should be kept!) identical to the default 
pipeline,
  * except that optimizers mitosis & dataflow are omitted.  It is use mainly to 
make some
@@ -132,7 +134,7 @@ struct PIPELINES{
        "optimizer.multiplex();"
        "optimizer.accumulators();"
        "optimizer.garbageCollector();",
-        0 },
+        0,0 },
 
 /* The default pipeline used in the November 2009 release
 { "nov2009_pipe",      
@@ -154,7 +156,7 @@ struct PIPELINES{
        "optimizer.history();"
        "optimizer.multiplex();"
        "optimizer.garbageCollector();",
-       0},
+       0,0},
 */
 
 /*
@@ -182,7 +184,7 @@ struct PIPELINES{
        "optimizer.replication();"
        "optimizer.multiplex();"
        "optimizer.garbageCollector();",
-        0 },
+        0,0 },
 */
 
 {"accumulator_pipe",   
@@ -205,7 +207,7 @@ struct PIPELINES{
        "optimizer.multiplex();"
        "optimizer.accumulators();"
        "optimizer.garbageCollector();",
-       0},
+       0,0},
 
 {"recycler_pipe",      
        "optimizer.inline();"
@@ -224,52 +226,50 @@ struct PIPELINES{
        "optimizer.history();"
        "optimizer.multiplex();"
        "optimizer.garbageCollector();",
-       0},
+       0,0},
 
-/* Not compiled in by default
 {"cracker_pipe",       
-       "optimizer.inline();"
-       "optimizer.remap();"
-       "optimizer.evaluate();"
-       "optimizer.costModel();"
-       "optimizer.coercions();"
-       "optimizer.emptySet();"
-       "optimizer.aliases();"
-       "optimizer.selcrack();"
-       "optimizer.deadcode();"
-       "optimizer.commonTerms();"
-       "optimizer.joinPath();"
-       "optimizer.reorder();"
-       "optimizer.deadcode();"
-       "optimizer.reduce();"
-       "optimizer.dataflow();"
-       "optimizer.history();"
-       "optimizer.multiplex();"
-       "optimizer.garbageCollector();",
-       0},
+"optimizer.inline();"
+"optimizer.remap();"
+"optimizer.evaluate();"
+"optimizer.costModel();"
+"optimizer.coercions();"
+"optimizer.emptySet();"
+"optimizer.aliases();"
+"optimizer.selcrack();"
+"optimizer.deadcode();"
+"optimizer.commonTerms();"
+"optimizer.joinPath();"
+"optimizer.reorder();"
+"optimizer.deadcode();"
+"optimizer.reduce();"
+"optimizer.dataflow();"
+"optimizer.history();"
+"optimizer.multiplex();"
+"optimizer.garbageCollector();",
+"OPTselcrack",0},
 
 {"sidcrack_pipe",      
-       "optimizer.inline();"
-       "optimizer.remap();"
-       "optimizer.evaluate();"
-       "optimizer.costModel();"
-       "optimizer.coercions();"
-       "optimizer.emptySet();"
-       "optimizer.aliases();"
-       "optimizer.sidcrack();"
-       "optimizer.deadcode();"
-       "optimizer.commonTerms();"
-       "optimizer.joinPath();"
-       "optimizer.reorder();"
-       "optimizer.deadcode();"
-       "optimizer.reduce();"
-       "optimizer.dataflow();"
-       "optimizer.history();"
-       "optimizer.multiplex();"
-       "optimizer.garbageCollector();",
-       0},
+"optimizer.inline();"
+"optimizer.remap();"
+"optimizer.evaluate();"
+"optimizer.costModel();"
+"optimizer.coercions();"
+"optimizer.emptySet();"
+"optimizer.aliases();"
+"optimizer.sidcrack();"
+"optimizer.deadcode();"
+"optimizer.commonTerms();"
+"optimizer.joinPath();"
+"optimizer.reorder();"
+"optimizer.deadcode();"
+"optimizer.reduce();"
+"optimizer.dataflow();"
+"optimizer.history();"
+"optimizer.multiplex();"
+"optimizer.garbageCollector();",
+"OPTsidcrack",0},
 
-*/
 /*
  * The Octopus pipeline for distributed processing (Merovingian enabled 
platforms only)
 */
@@ -296,7 +296,32 @@ struct PIPELINES{
        "optimizer.history();"
        "optimizer.multiplex();"
        "optimizer.garbageCollector();",
-       0 },
+       "OPToctopus",0 },
+/* 
+ * The centipede pipe line aims at a map-reduce style of query processing
+*/
+{ "centipede", 
+       "optimizer.inline();"
+       "optimizer.remap();"
+       "optimizer.evaluate();"
+       "optimizer.costModel();"
+       "optimizer.coercions();"
+       "optimizer.emptySet();"
+       "optimizer.aliases();"
+       "optimizer.centipede();"
+       "optimizer.mergetable();"
+       "optimizer.deadcode();"
+       "optimizer.commonTerms();"
+       "optimizer.joinPath();"
+       "optimizer.reorder();"
+       "optimizer.deadcode();"
+       "optimizer.reduce();"
+       "optimizer.dataflow();"
+       "optimizer.history();"
+       "optimizer.multiplex();"
+       "optimizer.accumulators();"
+       "optimizer.garbageCollector();",
+       "OPTcentipede",0 },
 #endif
 
 {"datacell_pipe",
@@ -322,7 +347,7 @@ struct PIPELINES{
        "optimizer.multiplex();"
        "optimizer.accumulators();"
        "optimizer.garbageCollector();",
-       0},
+       "OPTdatacell",0},
 
 /* The default + datacyclotron*/
 {"datacyclotron_pipe", 
@@ -346,7 +371,7 @@ struct PIPELINES{
        /* "optimizer.replication();" not used */
        "optimizer.multiplex();"
        "optimizer.garbageCollector();",
-       0},
+       "OPTdatacyclotron",0},
 
 /* The default + derivePath" */
 {"derive_pipe",        
@@ -370,7 +395,7 @@ struct PIPELINES{
        "optimizer.history();"
        "optimizer.multiplex();"
        "optimizer.garbageCollector();",
-       0},
+       "OPTderivePath",0},
 
 /* The default + dictionary*/
 {"dictionary_pipe",    
@@ -393,7 +418,7 @@ struct PIPELINES{
        "optimizer.history();"
        "optimizer.multiplex();"
        "optimizer.garbageCollector();",
-       0},
+       "OPTdictionary",0},
 
 /* The default + compression */
 {"compression_pipe",   
@@ -417,35 +442,8 @@ struct PIPELINES{
        "optimizer.history();"
        "optimizer.multiplex();"
        "optimizer.garbageCollector();",
-#ifndef WIN32
-       0},
+       "OPTcompression",0}
 
-/* 
- * The centipede pipe line aims at a map-reduce style of query processing
-*/
-{ "centipede", 
-       "optimizer.inline();"
-       "optimizer.remap();"
-       "optimizer.evaluate();"
-       "optimizer.costModel();"
-       "optimizer.coercions();"
-       "optimizer.emptySet();"
-       "optimizer.aliases();"
-       "optimizer.centipede();"
-       "optimizer.mergetable();"
-       "optimizer.deadcode();"
-       "optimizer.commonTerms();"
-       "optimizer.joinPath();"
-       "optimizer.reorder();"
-       "optimizer.deadcode();"
-       "optimizer.reduce();"
-       "optimizer.dataflow();"
-       "optimizer.history();"
-       "optimizer.multiplex();"
-       "optimizer.accumulators();"
-       "optimizer.garbageCollector();",
-#endif
-       0 }
 };
 #ifdef WIN32
 static int builtinoptimizers = 8;
@@ -528,6 +526,9 @@ getPipeCatalog(int *nme, int *def)
        BATseqbase(b,0);
        BATseqbase(bn,0);
        for( i=0; i < MAXOPTPIPES && pipes[i].name; i++){
+               if ( pipes[i].prerequisite &&
+                       getAddress(GDKout, NULL, optimizerRef, 
pipes[i].prerequisite, TRUE) == NULL)
+               continue;
                BUNappend(b,pipes[i].name, FALSE);
                BUNappend(bn,pipes[i].def, FALSE);
        }
@@ -631,6 +632,9 @@ addOptimizerPipe(Client cntxt, MalBlkPtr
 
                for ( j =0; j < MAXOPTPIPES && pipes[j].def; j++)
                if ( pipes[j].mb == NULL) {
+                       if ( pipes[j].prerequisite &&
+                               getAddress(cntxt->fdout, NULL, optimizerRef, 
pipes[j].prerequisite, TRUE) == NULL)
+                       continue;
                        MSinitClientPrg(c, "user", pipes[j].name);
                        msg = compileString(&sym, c, pipes[j].def);
                        if ( msg != MAL_SUCCEED){
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to