Changeset: dc2b49e4f2a5 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dc2b49e4f2a5 Modified Files: clients/Tests/exports.stable.out monetdb5/extras/mal_optimizer_template/opt_sql_append.c monetdb5/mal/mal_interpreter.c monetdb5/optimizer/opt_aliases.c monetdb5/optimizer/opt_aliases.h monetdb5/optimizer/opt_candidates.c monetdb5/optimizer/opt_candidates.h monetdb5/optimizer/opt_coercion.c monetdb5/optimizer/opt_coercion.h monetdb5/optimizer/opt_commonTerms.c monetdb5/optimizer/opt_commonTerms.h monetdb5/optimizer/opt_constants.c monetdb5/optimizer/opt_constants.h monetdb5/optimizer/opt_costModel.c monetdb5/optimizer/opt_costModel.h monetdb5/optimizer/opt_dataflow.c monetdb5/optimizer/opt_dataflow.h monetdb5/optimizer/opt_deadcode.c monetdb5/optimizer/opt_deadcode.h monetdb5/optimizer/opt_emptybind.c monetdb5/optimizer/opt_emptybind.h monetdb5/optimizer/opt_evaluate.c monetdb5/optimizer/opt_evaluate.h monetdb5/optimizer/opt_garbageCollector.c monetdb5/optimizer/opt_garbageCollector.h monetdb5/optimizer/opt_generator.c monetdb5/optimizer/opt_generator.h monetdb5/optimizer/opt_inline.c monetdb5/optimizer/opt_inline.h monetdb5/optimizer/opt_jit.c monetdb5/optimizer/opt_jit.h monetdb5/optimizer/opt_json.c monetdb5/optimizer/opt_json.h monetdb5/optimizer/opt_macro.c monetdb5/optimizer/opt_macro.h monetdb5/optimizer/opt_matpack.c monetdb5/optimizer/opt_matpack.h monetdb5/optimizer/opt_mergetable.c monetdb5/optimizer/opt_mergetable.h monetdb5/optimizer/opt_mitosis.c monetdb5/optimizer/opt_mitosis.h monetdb5/optimizer/opt_multiplex.c monetdb5/optimizer/opt_multiplex.h monetdb5/optimizer/opt_oltp.c monetdb5/optimizer/opt_oltp.h monetdb5/optimizer/opt_profiler.c monetdb5/optimizer/opt_profiler.h monetdb5/optimizer/opt_projectionpath.c monetdb5/optimizer/opt_projectionpath.h monetdb5/optimizer/opt_pushselect.c monetdb5/optimizer/opt_pushselect.h monetdb5/optimizer/opt_querylog.c monetdb5/optimizer/opt_querylog.h monetdb5/optimizer/opt_reduce.c monetdb5/optimizer/opt_reduce.h monetdb5/optimizer/opt_remap.c monetdb5/optimizer/opt_remap.h monetdb5/optimizer/opt_remoteQueries.c monetdb5/optimizer/opt_remoteQueries.h monetdb5/optimizer/opt_reorder.c monetdb5/optimizer/opt_reorder.h monetdb5/optimizer/opt_support.c monetdb5/optimizer/opt_support.h monetdb5/optimizer/opt_volcano.c monetdb5/optimizer/opt_volcano.h monetdb5/optimizer/opt_wrapper.c sql/test/leaks/Tests/check0.stable.out sql/test/leaks/Tests/check0.stable.out.int128 sql/test/leaks/Tests/check1.stable.out sql/test/leaks/Tests/check1.stable.out.int128 sql/test/leaks/Tests/check2.stable.out sql/test/leaks/Tests/check2.stable.out.int128 sql/test/leaks/Tests/check3.stable.out sql/test/leaks/Tests/check3.stable.out.int128 sql/test/leaks/Tests/check4.stable.out sql/test/leaks/Tests/check4.stable.out.int128 sql/test/leaks/Tests/check5.stable.out sql/test/leaks/Tests/check5.stable.out.int128 sql/test/leaks/Tests/select1.stable.out.int128 sql/test/leaks/Tests/select2.stable.out.int128 sql/test/leaks/Tests/temp1.stable.out sql/test/leaks/Tests/temp1.stable.out.int128 sql/test/leaks/Tests/temp2.stable.out sql/test/leaks/Tests/temp2.stable.out.int128 sql/test/leaks/Tests/temp3.stable.out sql/test/leaks/Tests/temp3.stable.out.int128 Branch: default Log Message:
Cleanup optimizer interfaces All optimizers new return a proper exception upon errors. A preparation for further cleanup of error detection and handling. diffs (truncated from 2578 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -1539,41 +1539,41 @@ str OLTPrelease(Client cntxt, MalBlkPtr str OLTPreset(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); str OLTPtable(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); void OPTaliasRemap(InstrPtr p, int *alias); -int OPTaliasesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTcandidatesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTcoercionImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTcommonTermsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTconstantsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTcostModelImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTdataflowImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTdeadcodeImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTemptybindImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTevaluateImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTgarbageCollectorImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTgeneratorImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTinlineImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTaliasesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTcandidatesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTcoercionImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTcommonTermsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTconstantsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTcostModelImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTdataflowImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTdeadcodeImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTemptybindImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTevaluateImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTgarbageCollectorImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTgeneratorImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTinlineImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); int OPTisAlias(InstrPtr p); -int OPTjitImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTjsonImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTjitImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTjsonImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); str OPTmacro(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTmacroImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTmatpackImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTmergetableImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTmitosisImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTmultiplexImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTmacroImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTmatpackImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTmergetableImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTmitosisImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTmultiplexImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); str OPTmultiplexSimple(Client cntxt, MalBlkPtr mb); -int OPToltpImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPToltpImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); str OPTorcam(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTorcamImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTprofilerImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTprojectionpathImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTpushselectImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTquerylogImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTreduceImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTremapImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTremoteQueriesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -int OPTreorderImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTvolcanoImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTorcamImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTprofilerImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTprojectionpathImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTpushselectImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTquerylogImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTreduceImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTremapImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTremoteQueriesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +str OPTreorderImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +str OPTvolcanoImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); str OPTwrapper(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); str PCREilike2(bit *ret, const str *s, const str *pat); str PCREilike3(bit *ret, const str *s, const str *pat, const str *esc); @@ -2342,7 +2342,6 @@ int open_block_stream(Stream *S, Stream str open_block_streamwrap(Stream *S, Stream *is); str operatorName(int i); str optimizeMALBlock(Client cntxt, MalBlkPtr mb); -str optimizerCheck(Client cntxt, MalBlkPtr mb, str name, int actions, lng usec); int optimizerIsApplied(MalBlkPtr mb, str name); str optimizerRef; str optimizer_prelude(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); diff --git a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c --- a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c +++ b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c @@ -252,7 +252,8 @@ str OPTsql_append(Client cntxt, MalBlkPt str fcnnme; str msg= MAL_SUCCEED; Symbol s= NULL; - lng t,clk= GDKusec(); + char buf[256]; + lng clk= GDKusec(); int actions = 0; (void) cntxt; @@ -292,13 +293,20 @@ str OPTsql_append(Client cntxt, MalBlkPt return MAL_SUCCEED; } actions= OPTsql_appendImplementation(cntxt, mb,stk,p); - msg= optimizerCheck(cntxt, mb, "optimizer.sql_append", actions, t=(GDKusec() - clk)); + + /* Defense line against incorrect plans */ + chkTypes(cntxt->fdout, cntxt->nspace, mb, FALSE); + chkFlow(cntxt->fdout, mb); + chkDeclarations(cntxt->fdout, mb); #ifdef DEBUG_OPT_OPTIMIZERS mnstr_printf(cntxt->fdout,"=FINISHED sql_append %d\n",actions); printFunction(cntxt->fdout,mb,0,LIST_MAL_ALL ); mnstr_printf(cntxt->fdout,"#opt_reduce: " LLFMT " ms\n",t); #endif - QOTupdateStatistics("sql_append",actions,t); + clk = GDKusec()- clk; + snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " usec","optimizer.sql_append",actions, clk); + newComment(mb,buf); + QOTupdateStatistics("optimizer.sql_append",actions,clk); addtoMalBlkHistory(mb); return msg; } diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c --- a/monetdb5/mal/mal_interpreter.c +++ b/monetdb5/mal/mal_interpreter.c @@ -283,7 +283,6 @@ prepareMALstack(MalBlkPtr mb, int size) int i; ValPtr lhs, rhs; - assert(size >= mb->vsize); stk = newGlobalStack(size); if (!stk) { return NULL; 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 @@ -21,7 +21,7 @@ OPTaliasRemap(InstrPtr p, int *alias){ getArg(p,i) = alias[getArg(p,i)]; } -int +str OPTaliasesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p) { int i,j,k=1, limit, actions=0; @@ -43,7 +43,7 @@ OPTaliasesImplementation(Client cntxt, M if( i < limit){ alias= (int*) GDKzalloc(sizeof(int)* mb->vtop); if (alias == NULL) - return 0; + throw(MAL,"optimizer.aliases",MAL_MALLOC_FAIL); setVariableScope(mb); for(j=1; j<mb->vtop; j++) alias[j]=j; } @@ -83,9 +83,8 @@ OPTaliasesImplementation(Client cntxt, M usec= GDKusec() - usec; snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " usec","aliases",actions,usec); newComment(mb,buf); - QOTupdateStatistics("aliases",actions,usec); if( actions >= 0) addtoMalBlkHistory(mb); - return actions; + return MAL_SUCCEED; } diff --git a/monetdb5/optimizer/opt_aliases.h b/monetdb5/optimizer/opt_aliases.h --- a/monetdb5/optimizer/opt_aliases.h +++ b/monetdb5/optimizer/opt_aliases.h @@ -14,6 +14,6 @@ mal_export int OPTisAlias(InstrPtr p); mal_export void OPTaliasRemap(InstrPtr p, int *alias); -mal_export int OPTaliasesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +mal_export str OPTaliasesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); #endif diff --git a/monetdb5/optimizer/opt_candidates.c b/monetdb5/optimizer/opt_candidates.c --- a/monetdb5/optimizer/opt_candidates.c +++ b/monetdb5/optimizer/opt_candidates.c @@ -15,7 +15,7 @@ #include "opt_candidates.h" #include "opt_statistics.h" -int +str OPTcandidatesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { int i; @@ -84,8 +84,7 @@ OPTcandidatesImplementation(Client cntxt usec = GDKusec()- usec; snprintf(buf,256,"%-20s actions=1 time=" LLFMT " usec","candidates",usec); newComment(mb,buf); - QOTupdateStatistics("candidates",1,usec); addtoMalBlkHistory(mb); - return 1; + return MAL_SUCCEED; } diff --git a/monetdb5/optimizer/opt_candidates.h b/monetdb5/optimizer/opt_candidates.h --- a/monetdb5/optimizer/opt_candidates.h +++ b/monetdb5/optimizer/opt_candidates.h @@ -12,6 +12,6 @@ #include "opt_support.h" #include "mal_exception.h" -mal_export int OPTcandidatesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); +mal_export str OPTcandidatesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); #endif 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 @@ -118,7 +118,7 @@ coercionOptimizerAggrStep(Client cntxt, return; } -int +str OPTcoercionImplementation(Client cntxt,MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { int i, k; @@ -130,7 +130,7 @@ OPTcoercionImplementation(Client cntxt,M lng usec = GDKusec(); if( coerce == NULL) - return 0; + throw(MAL,"optimizer.coercion",MAL_MALLOC_FAIL); (void) cntxt; (void) pci; (void) stk; /* to fool compilers */ @@ -200,9 +200,8 @@ OPTcoercionImplementation(Client cntxt,M usec = GDKusec()- usec; snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " usec","coercion",actions, usec); newComment(mb,buf); - QOTupdateStatistics("coercion",actions,usec); if( actions >= 0) addtoMalBlkHistory(mb); - return actions; + return MAL_SUCCEED; } diff --git a/monetdb5/optimizer/opt_coercion.h b/monetdb5/optimizer/opt_coercion.h --- a/monetdb5/optimizer/opt_coercion.h +++ b/monetdb5/optimizer/opt_coercion.h @@ -12,6 +12,6 @@ #include "mal_interpreter.h" #include "opt_support.h" -mal_export int OPTcoercionImplementation(Client cntxt,MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +mal_export str OPTcoercionImplementation(Client cntxt,MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); #endif diff --git a/monetdb5/optimizer/opt_commonTerms.c b/monetdb5/optimizer/opt_commonTerms.c --- a/monetdb5/optimizer/opt_commonTerms.c +++ b/monetdb5/optimizer/opt_commonTerms.c @@ -16,7 +16,7 @@ * are introduced too far apart in the MAL program. * It requires the constant optimizer to be ran first. */ -int +str OPTcommonTermsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { int i, j, k, prop, barrier= 0, cnt; @@ -31,6 +31,7 @@ OPTcommonTermsImplementation(Client cntx int *vars; char buf[256]; lng usec = GDKusec(); + str msg = MAL_SUCCEED; (void) cntxt; (void) stk; @@ -38,13 +39,16 @@ OPTcommonTermsImplementation(Client cntx alias = (int*) GDKzalloc(sizeof(int) * mb->vtop); list = (int*) GDKzalloc(sizeof(int) * mb->stop); vars = (int*) GDKzalloc(sizeof(int) * mb->vtop); - if ( alias == NULL || list == NULL || vars == NULL) + if ( alias == NULL || list == NULL || vars == NULL){ + msg = createException(MAL,"optimizer.commonTerms",MAL_MALLOC_FAIL); goto wrapup; + } old = mb->stmt; limit = mb->stop; slimit = mb->ssize; if ( newMalBlkStmt(mb, mb->ssize) < 0) { + msg = createException(MAL,"optimizer.commonTerms",MAL_MALLOC_FAIL); old = NULL; goto wrapup; } @@ -183,7 +187,6 @@ OPTcommonTermsImplementation(Client cntx usec = GDKusec()- usec; snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " usec","commonTerms",actions,usec); newComment(mb,buf); - QOTupdateStatistics("commonTerms",actions,usec); if( actions >= 0) addtoMalBlkHistory(mb); @@ -192,5 +195,5 @@ wrapup: if(list) GDKfree(list); if(vars) GDKfree(vars); if(old) GDKfree(old); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list