Changeset: d07ce7bd7400 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d07ce7bd7400 Modified Files: monetdb5/optimizer/opt_emptycolumn.c Branch: jit Log Message:
Fix the types diffs (137 lines): diff --git a/monetdb5/optimizer/opt_emptycolumn.c b/monetdb5/optimizer/opt_emptycolumn.c --- a/monetdb5/optimizer/opt_emptycolumn.c +++ b/monetdb5/optimizer/opt_emptycolumn.c @@ -27,15 +27,17 @@ #include "opt_deadcode.h" #include "mal_builder.h" -#define emptyresult(I) \ +#define emptyresult(I) \ do { \ - int tpe = getColumnType(getVarType(mb,getArg(p,I))); \ + int tpe = getVarType(mb,getArg(p,I)); \ clrFunction(p); \ setModuleId(p,batRef); \ setFunctionId(p,newRef); \ p->argc = p->retc; \ p = pushType(mb,p, TYPE_oid); \ - p = pushType(mb,p,tpe); \ + p = pushType(mb,p, getColumnType(tpe)); \ + setVarType(mb, getArg(p,0), tpe); \ + setVarFixed(mb, getArg(p,0)); \ } while (0) @@ -45,7 +47,7 @@ OPTemptycolumnImplementation(Client cntx int i,j; int *marked; int limit = mb->stop; - InstrPtr p, q, *old = mb->stmt, *empty; + InstrPtr p, q, *old = mb->stmt, *updated; char buf[256]; lng usec = GDKusec(); str sch,tbl; @@ -57,8 +59,8 @@ OPTemptycolumnImplementation(Client cntx if ( marked == NULL) return 0; - empty= (InstrPtr *) GDKzalloc(esize * sizeof(InstrPtr)); - if( empty == 0){ + updated= (InstrPtr *) GDKzalloc(esize * sizeof(InstrPtr)); + if( updated == 0){ GDKfree(marked); return 0; } @@ -102,15 +104,17 @@ OPTemptycolumnImplementation(Client cntx marked[getArg(p,0)] = i; continue; } - if(p && getModuleId(p) == sqlRef && (getFunctionId(p) == appendRef || getFunctionId(p) == updateRef || getFunctionId(p) == catalogRef)){ - if ( etop == esize){ \ - empty = (InstrPtr*) GDKrealloc( empty, (esize += 256) * sizeof(InstrPtr)); - if( empty == NULL){ + + // any of these instructions leave a non-empty BAT behind + if(p && getModuleId(p) == sqlRef && isUpdateInstruction(p)){ + if ( etop == esize){ + updated = (InstrPtr*) GDKrealloc( updated, (esize += 256) * sizeof(InstrPtr)); + if( updated == NULL){ GDKfree(marked); return 0; } } - empty[etop++]= p; + updated[etop++]= p; } /* restore the naming, dropping the runtime property 'marked' */ @@ -129,8 +133,8 @@ OPTemptycolumnImplementation(Client cntx sch = getVarConstant(mb,getArg(p,2 + (p->retc==2))).val.sval; tbl = getVarConstant(mb,getArg(p,3 + (p->retc==2))).val.sval; for(j= 0; j< etop; j++){ - q= empty[j]; - if(q && getModuleId(q) == sqlRef && (getFunctionId(q) == appendRef || getFunctionId(q) == updateRef )){ + q= updated[j]; + if(q && getModuleId(q) == sqlRef && isUpdateInstruction(q)){ if ( strcmp(getVarConstant(mb,getArg(q,2)).val.sval, sch) == 0 && strcmp(getVarConstant(mb,getArg(q,3)).val.sval, tbl) == 0 ){ marked[getArg(p,0)] = 0; @@ -142,6 +146,8 @@ OPTemptycolumnImplementation(Client cntx if(q && getModuleId(q) == sqlRef && getFunctionId(q) == catalogRef){ if ( strcmp(getVarConstant(mb,getArg(q,2)).val.sval, sch) == 0 ){ marked[getArg(p,0)] = 0; + if( p->retc == 2) + marked[getArg(p,1)] = 0; break; } } @@ -154,6 +160,7 @@ OPTemptycolumnImplementation(Client cntx q = pushType(mb,q, TYPE_oid); q = pushType(mb,q,tpe); getArg(q,0)= getArg(p,1); + setVarFixed(mb, getArg(p,0)); } tpe = getColumnType(getVarType(mb,getArg(p,0))); @@ -163,6 +170,7 @@ OPTemptycolumnImplementation(Client cntx p->argc = p->retc = 1; p = pushType(mb,p, TYPE_oid); p = pushType(mb,p,tpe); + setVarFixed(mb, getArg(p,0)); } continue; } @@ -177,7 +185,7 @@ OPTemptycolumnImplementation(Client cntx sch = getVarConstant(mb,getArg(p,2 + (p->retc==2))).val.sval; tbl = getVarConstant(mb,getArg(p,3 + (p->retc==2))).val.sval; for(j= 0; j< etop; j++){ - q= empty[j]; + q= updated[j]; if(q && getModuleId(q) == sqlRef && (getFunctionId(q) == appendRef || getFunctionId(q) == updateRef )){ if ( strcmp(getVarConstant(mb,getArg(q,2)).val.sval, sch) == 0 && strcmp(getVarConstant(mb,getArg(q,3)).val.sval, tbl) == 0 ){ @@ -202,6 +210,7 @@ OPTemptycolumnImplementation(Client cntx q = pushType(mb,q, TYPE_oid); q = pushType(mb,q,tpe); getArg(q,0)= getArg(p,1); + setVarFixed(mb,getArg(q,0)); } tpe = getColumnType(getVarType(mb,getArg(p,0))); @@ -211,6 +220,7 @@ OPTemptycolumnImplementation(Client cntx p->argc = p->retc = 1; p = pushType(mb,p, TYPE_oid); p = pushType(mb,p,tpe); + setVarFixed(mb, getArg(p,0)); } continue; } @@ -259,7 +269,7 @@ OPTemptycolumnImplementation(Client cntx GDKfree(old); GDKfree(marked); - GDKfree(empty); + GDKfree(updated); /* Defense line against incorrect plans */ chkTypes(cntxt->fdout, cntxt->nspace, mb, FALSE); chkFlow(cntxt->fdout, mb); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list