Changeset: d310abf48269 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d310abf48269
Modified Files:
        monetdb5/optimizer/opt_aliases.c
        monetdb5/optimizer/opt_bincopyfrom.c
        monetdb5/optimizer/opt_coercion.c
        monetdb5/optimizer/opt_dataflow.c
        monetdb5/optimizer/opt_deadcode.c
        monetdb5/optimizer/opt_emptybind.c
        monetdb5/optimizer/opt_garbageCollector.c
        monetdb5/optimizer/opt_generator.c
        monetdb5/optimizer/opt_mask.c
        monetdb5/optimizer/opt_matpack.c
        monetdb5/optimizer/opt_profiler.c
        monetdb5/optimizer/opt_projectionpath.c
        monetdb5/optimizer/opt_pushselect.c
        monetdb5/optimizer/opt_volcano.c
Branch: default
Log Message:

Minor cleanup of the optimizer codes


diffs (truncated from 456 to 300 lines):

diff --git a/monetdb5/optimizer/opt_aliases.c b/monetdb5/optimizer/opt_aliases.c
--- a/monetdb5/optimizer/opt_aliases.c
+++ b/monetdb5/optimizer/opt_aliases.c
@@ -39,6 +39,7 @@ OPTaliasesImplementation(Client cntxt, M
                        break;
        }
        if( i == limit){
+               // we didn't found a simple assignment that warrants a rewrite
                goto wrapup;
        }
        k = i;
@@ -82,8 +83,7 @@ OPTaliasesImplementation(Client cntxt, M
        // if ( msg == MAL_SUCCEED)
        //      msg = chkDeclarations(mb);
 wrapup:
-       /* keep all actions taken as a post block comment
-        * and update statics */
+       /* keep all actions taken as a post block comment and update statics */
        usec= GDKusec() - usec;
     snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " 
usec","aliases",actions,usec);
     newComment(mb,buf);
diff --git a/monetdb5/optimizer/opt_bincopyfrom.c 
b/monetdb5/optimizer/opt_bincopyfrom.c
--- a/monetdb5/optimizer/opt_bincopyfrom.c
+++ b/monetdb5/optimizer/opt_bincopyfrom.c
@@ -24,6 +24,8 @@ OPTbincopyfromImplementation(Client cntx
        InstrPtr *old_mb_stmt = NULL;
        lng usec = GDKusec();
        int actions = 0;
+       size_t old_ssize = 0;
+       size_t old_stop = 0;
 
        (void)stk;
        (void)pci;
@@ -39,15 +41,14 @@ OPTbincopyfromImplementation(Client cntx
                }
        }
        if (found_at == -1)
-               return MAL_SUCCEED;
+               // we didn't find a reason to modify the plan
+               goto wrapup;
 
        old_mb_stmt = mb->stmt;
-       size_t old_ssize = mb->ssize;
-       size_t old_stop = mb->stop;
-       if (newMalBlkStmt(mb, mb->stop + getInstrPtr(mb, found_at)->argc) < 0) {
-               msg = createException(MAL, "optimizer.bincopyfrom", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
-               goto end;
-       }
+       old_ssize = mb->ssize;
+       old_stop = mb->stop;
+       if (newMalBlkStmt(mb, mb->stop + getInstrPtr(mb, found_at)->argc) < 0) 
+               throw(MAL, "optimizer.bincopyfrom", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
 
        for (size_t i = 0; i < old_stop; i++) {
                InstrPtr p = old_mb_stmt[i];
@@ -79,6 +80,7 @@ end:
                msg = chkDeclarations(mb);
     }
     /* keep all actions taken as a post block comment */
+wrapup:
        usec = GDKusec()- usec;
        char buf[256];
     snprintf(buf, sizeof(buf), "%-20s actions=%2d time=" LLFMT " 
usec","bincopyfrom",actions, usec);
diff --git a/monetdb5/optimizer/opt_coercion.c 
b/monetdb5/optimizer/opt_coercion.c
--- a/monetdb5/optimizer/opt_coercion.c
+++ b/monetdb5/optimizer/opt_coercion.c
@@ -164,10 +164,10 @@ OPTcoercionImplementation(Client cntxt,M
     /* Defense line against incorrect plans */
     if( actions > 0){
         msg = chkTypes(cntxt->usermodule, mb, FALSE);
-       if (!msg)
-               msg = chkFlow(mb);
-       if (!msg)
-               msg = chkDeclarations(mb);
+               if (!msg)
+                               msg = chkFlow(mb);
+               if (!msg)
+                               msg = chkDeclarations(mb);
     }
     /* keep all actions taken as a post block comment */
        usec = GDKusec()- usec;
diff --git a/monetdb5/optimizer/opt_dataflow.c 
b/monetdb5/optimizer/opt_dataflow.c
--- a/monetdb5/optimizer/opt_dataflow.c
+++ b/monetdb5/optimizer/opt_dataflow.c
@@ -336,7 +336,7 @@ OPTdataflowImplementation(Client cntxt, 
        int flowblock= 0;
        InstrPtr *old = NULL, q;
        int limit, vlimit;
-       States states;
+       States states = NULL;
        char  buf[256];
        region_state state = { singleton_region };
        lng usec = GDKusec();
@@ -344,20 +344,19 @@ OPTdataflowImplementation(Client cntxt, 
 
        /* don't use dataflow on single processor systems */
        if (GDKnr_threads <= 1 || cntxt->workerlimit == 1)
-               return MAL_SUCCEED;
+               goto wrapup;
 
        if ( optimizerIsApplied(mb,"dataflow"))
-               return MAL_SUCCEED;
+               goto wrapup;
        (void) stk;
        /* inlined functions will get their dataflow control later */
        if ( mb->inlineProp)
-               return MAL_SUCCEED;
+               goto wrapup;
 
        vlimit = mb->vsize;
        states = (States) GDKzalloc(vlimit * sizeof(char));
        if (states == NULL ){
-               msg= createException(MAL,"optimizer.dataflow", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
-               goto wrapup;
+               throw(MAL,"optimizer.dataflow", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
        }
 
        setVariableScope(mb);
@@ -366,9 +365,8 @@ OPTdataflowImplementation(Client cntxt, 
        slimit= mb->ssize;
        old = mb->stmt;
        if (newMalBlkStmt(mb, mb->ssize) < 0) {
-               msg= createException(MAL,"optimizer.dataflow", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
-               actions = -1;
-               goto wrapup;
+               GDKfree(states);
+               throw(MAL,"optimizer.dataflow", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
        }
 
        /* inject new dataflow barriers using a single pass through the program 
*/
diff --git a/monetdb5/optimizer/opt_deadcode.c 
b/monetdb5/optimizer/opt_deadcode.c
--- a/monetdb5/optimizer/opt_deadcode.c
+++ b/monetdb5/optimizer/opt_deadcode.c
@@ -15,7 +15,7 @@ str
 OPTdeadcodeImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci)
 {
        int i, k, se,limit, slimit;
-       InstrPtr p=0, *old= mb->stmt;
+       InstrPtr p=0, *old= NULL;
        int actions = 0;
        int *varused=0;
        char buf[256];
@@ -27,17 +27,18 @@ OPTdeadcodeImplementation(Client cntxt, 
        (void) stk;             /* to fool compilers */
 
        if ( mb->inlineProp )
-               return MAL_SUCCEED;
+               goto wrapup;
 
        varused = GDKzalloc(mb->vtop * sizeof(int));
        if (varused == NULL)
-               return MAL_SUCCEED;
+               goto wrapup;
 
+       old = mb->stmt;
        limit = mb->stop;
        slimit = mb->ssize;
        if (newMalBlkStmt(mb, mb->ssize) < 0) {
-               msg= createException(MAL,"optimizer.deadcode", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
-               goto wrapup;
+               GDKfree(varused);
+               throw(MAL,"optimizer.deadcode", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
        }
 
        // Calculate the instructions in which a variable is used.
diff --git a/monetdb5/optimizer/opt_emptybind.c 
b/monetdb5/optimizer/opt_emptybind.c
--- a/monetdb5/optimizer/opt_emptybind.c
+++ b/monetdb5/optimizer/opt_emptybind.c
@@ -39,9 +39,9 @@ str
 OPTemptybindImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci)
 {
        int i,j, actions =0, extras= 0;
-       int *empty;
+       int *empty = NULL;
        int limit = mb->stop, slimit = mb->ssize;
-       InstrPtr p, q, *old = mb->stmt, *updated;
+       InstrPtr p, q, *old = NULL, *updated = NULL;
        char buf[256];
        lng usec = GDKusec();
        str sch,tbl;
@@ -59,8 +59,9 @@ OPTemptybindImplementation(Client cntxt,
        for( i=0; i< mb->stop; i++)
                if( getFunctionId(getInstrPtr(mb,i)) == emptybindRef || 
getFunctionId(getInstrPtr(mb,i)) == emptybindidxRef)
                        extras += getInstrPtr(mb,i)->argc;
-       if (extras == 0)
+       if (extras == 0){
                goto wrapup;
+       }
 
        // track of where 'emptybind' results are produced
        // reserve space for maximal number of emptybat variables created
@@ -71,9 +72,10 @@ OPTemptybindImplementation(Client cntxt,
        updated= (InstrPtr *) GDKzalloc(esize * sizeof(InstrPtr));
        if( updated == 0){
                GDKfree(empty);
-               return 0;
+               throw(MAL,"optimizer.emptybind", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
        }
 
+       old = mb->stmt;
        if (newMalBlkStmt(mb, mb->ssize) < 0) {
                GDKfree(empty);
                GDKfree(updated);
diff --git a/monetdb5/optimizer/opt_garbageCollector.c 
b/monetdb5/optimizer/opt_garbageCollector.c
--- a/monetdb5/optimizer/opt_garbageCollector.c
+++ b/monetdb5/optimizer/opt_garbageCollector.c
@@ -40,7 +40,7 @@ OPTgarbageCollectorImplementation(Client
        (void) pci;
        (void) stk;
        if ( mb->inlineProp)
-               return 0;
+               goto wrapup;
 
        limit = mb->stop;
 
@@ -120,6 +120,7 @@ OPTgarbageCollectorImplementation(Client
                        msg = chkDeclarations(mb);
        }
        /* keep all actions taken as a post block comment */
+wrapup:
        usec = GDKusec()- usec;
        snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " 
usec","garbagecollector",actions, usec);
        newComment(mb,buf);
diff --git a/monetdb5/optimizer/opt_generator.c 
b/monetdb5/optimizer/opt_generator.c
--- a/monetdb5/optimizer/opt_generator.c
+++ b/monetdb5/optimizer/opt_generator.c
@@ -83,11 +83,14 @@ OPTgeneratorImplementation(Client cntxt,
                p = old[i];
                if ( getModuleId(p) == generatorRef && getFunctionId(p) == 
seriesRef)
                        needed = 1;
-               if (p->token == RETURNsymbol || p->barrier == RETURNsymbol)
-                       return 0;
+               /* avoid error in table-udf-column-descriptor */
+               if (p->token == RETURNsymbol || p->barrier == RETURNsymbol){
+                       old = NULL;
+                       goto wrapup;
+               }
        }
        if (!needed)
-               return 0;
+               goto wrapup;
 
        series = (InstrPtr*) GDKzalloc(sizeof(InstrPtr) * mb->vtop);
        if(series == NULL)
@@ -168,6 +171,7 @@ OPTgeneratorImplementation(Client cntxt,
        // if (!msg)
        //      msg = chkDeclarations(mb);
     /* keep all actions taken as a post block comment */
+wrapup:
        usec = GDKusec()- usec;
     snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " 
usec","generator",actions, usec);
     newComment(mb,buf);
diff --git a/monetdb5/optimizer/opt_mask.c b/monetdb5/optimizer/opt_mask.c
--- a/monetdb5/optimizer/opt_mask.c
+++ b/monetdb5/optimizer/opt_mask.c
@@ -16,7 +16,7 @@ str
 OPTmaskImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        int i, j, k, limit, slimit;
-       InstrPtr p=0, q=0, r=0, *old= mb->stmt;
+       InstrPtr p=0, q=0, r=0, *old= NULL;
        int actions = 0;
        int *varused=0;
        char buf[256];
@@ -28,17 +28,18 @@ OPTmaskImplementation(Client cntxt, MalB
        (void) stk;             /* to fool compilers */
 
        if ( mb->inlineProp )
-               return MAL_SUCCEED;
+               goto wrapup;
 
        varused = GDKzalloc(2 * mb->vtop * sizeof(int));
        if (varused == NULL)
-               return MAL_SUCCEED;
+               goto wrapup;
 
        limit = mb->stop;
        slimit = mb->ssize;
+       old = mb->stmt;
        if (newMalBlkStmt(mb, mb->ssize) < 0) {
-               msg= createException(MAL,"optimizer.deadcode", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
-               goto wrapup;
+               GDKfree(varused);
+               throw(MAL,"optimizer.deadcode", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
        }
 
        // Consolidate the actual need for variables
@@ -94,13 +95,13 @@ OPTmaskImplementation(Client cntxt, MalB
                msg = chkDeclarations(mb);
     }
     /* keep all actions taken as a post block comment */
+wrapup:
        usec = GDKusec()- usec;
     snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " usec","mask",actions, 
usec);
     newComment(mb,buf);
        if( actions > 0)
                addtoMalBlkHistory(mb);
 
-wrapup:
        if(old) GDKfree(old);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to