Changeset: 04191ece031d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=04191ece031d Modified Files: monetdb5/optimizer/opt_generator.c sql/backends/monet5/generator/generator.c sql/backends/monet5/generator/generator.mal Branch: bamloader Log Message:
Merge with default diffs (79 lines): 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 @@ -63,7 +63,7 @@ int OPTgeneratorImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { InstrPtr p,q; - int i,j,k, actions=0, used= 0, cases, blocked; + int i,j,k, actions=0, used, cases, blocked; (void) cntxt; (void) stk; @@ -73,6 +73,7 @@ OPTgeneratorImplementation(Client cntxt, p = getInstrPtr(mb,i); if ( getModuleId(p) == generatorRef && getFunctionId(p) == seriesRef){ /* found a target for propagation */ + used = 0; if ( assignedOnce(mb, getArg(p,0)) ){ cases = useCount(mb, getArg(p,0)); blocked = 0; @@ -116,8 +117,10 @@ OPTgeneratorImplementation(Client cntxt, else { // check for use without conversion for(k = q->retc; k < q->argc; k++) - if( getArg(q,k) == getArg(p,0)) + if( getArg(q,k) == getArg(p,0)){ blocked++; + } + // materialize a copy and re-use where appropriate } } // fix the original, only when all use cases are replaced by the overloaded function @@ -125,8 +128,9 @@ OPTgeneratorImplementation(Client cntxt, setModuleId(p, generatorRef); setFunctionId(p, parametersRef); typeChecker(cntxt->fdout, cntxt->nspace, mb, p, TRUE); + } + if( used) actions++; - } else used = 0; #ifdef VLT_DEBUG mnstr_printf(cntxt->fdout,"#generator target %d cases %d used %d error %d\n",getArg(p,0), cases, used, p->typechk); #endif diff --git a/sql/backends/monet5/generator/generator.c b/sql/backends/monet5/generator/generator.c --- a/sql/backends/monet5/generator/generator.c +++ b/sql/backends/monet5/generator/generator.c @@ -218,7 +218,7 @@ findGeneratorDefinition(MalBlkPtr mb, In for (i = 1; i < mb->stop; i++) { q = getInstrPtr(mb, i); - if (q->argv[0] == target && getModuleId(q) == generatorRef && getFunctionId(q) == parametersRef) + if (q->argv[0] == target && getModuleId(q) == generatorRef && (getFunctionId(q) == parametersRef || getFunctionId(q) == seriesRef)) p = q; if (q == pci) return p; diff --git a/sql/backends/monet5/generator/generator.mal b/sql/backends/monet5/generator/generator.mal --- a/sql/backends/monet5/generator/generator.mal +++ b/sql/backends/monet5/generator/generator.mal @@ -223,15 +223,15 @@ comment "Overloaded join operation"; pattern join(gen:bat[:oid,:bte], low:bat[:oid,:bte], hgh:bat[:oid,:bte], li:bit, ri:bit) (l:bat[:oid,:oid],r:bat[:oid,:oid]) address VLTgenerator_rangejoin; -pattern join(gen:bat[:oid,:sht], low:bat[:oid,:sht], hgh:bat[:oid,:bte], li:bit, ri:bit) (l:bat[:oid,:oid],r:bat[:oid,:oid]) +pattern join(gen:bat[:oid,:sht], low:bat[:oid,:sht], hgh:bat[:oid,:sht], li:bit, ri:bit) (l:bat[:oid,:oid],r:bat[:oid,:oid]) address VLTgenerator_rangejoin; -pattern join(gen:bat[:oid,:int], low:bat[:oid,:int], hgh:bat[:oid,:bte], li:bit, ri:bit) (l:bat[:oid,:oid],r:bat[:oid,:oid]) +pattern join(gen:bat[:oid,:int], low:bat[:oid,:int], hgh:bat[:oid,:int], li:bit, ri:bit) (l:bat[:oid,:oid],r:bat[:oid,:oid]) address VLTgenerator_rangejoin; -pattern join(gen:bat[:oid,:lng], low:bat[:oid,:lng], hgh:bat[:oid,:bte], li:bit, ri:bit) (l:bat[:oid,:oid],r:bat[:oid,:oid]) +pattern join(gen:bat[:oid,:lng], low:bat[:oid,:lng], hgh:bat[:oid,:lng], li:bit, ri:bit) (l:bat[:oid,:oid],r:bat[:oid,:oid]) address VLTgenerator_rangejoin; -pattern join(gen:bat[:oid,:flt], low:bat[:oid,:flt], hgh:bat[:oid,:bte], li:bit, ri:bit) (l:bat[:oid,:oid],r:bat[:oid,:oid]) +pattern join(gen:bat[:oid,:flt], low:bat[:oid,:flt], hgh:bat[:oid,:flt], li:bit, ri:bit) (l:bat[:oid,:oid],r:bat[:oid,:oid]) address VLTgenerator_rangejoin; -pattern join(gen:bat[:oid,:dbl], low:bat[:oid,:dbl], hgh:bat[:oid,:bte], li:bit, ri:bit) (l:bat[:oid,:oid],r:bat[:oid,:oid]) +pattern join(gen:bat[:oid,:dbl], low:bat[:oid,:dbl], hgh:bat[:oid,:dbl], li:bit, ri:bit) (l:bat[:oid,:oid],r:bat[:oid,:oid]) address VLTgenerator_rangejoin comment "Overloaded range join operation"; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list