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