Changeset: dd2ab2bc72e9 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dd2ab2bc72e9 Modified Files: gdk/gdk_cross.c monetdb5/modules/mal/manifold.c monetdb5/optimizer/opt_support.c Branch: default Log Message:
fix manifold for fixed sized, external types diffs (98 lines): diff --git a/gdk/gdk_cross.c b/gdk/gdk_cross.c --- a/gdk/gdk_cross.c +++ b/gdk/gdk_cross.c @@ -63,6 +63,8 @@ BATcross1(BAT **r1p, BAT **r2p, BAT *l, bn2->tdense = bn2->tkey != 0; bn2->T->nil = 0; bn2->T->nonil = 1; + BATseqbase(BATmirror(bn1), l->hseqbase); + BATseqbase(BATmirror(bn2), r->hseqbase); *r1p = bn1; *r2p = bn2; return GDK_SUCCEED; diff --git a/monetdb5/modules/mal/manifold.c b/monetdb5/modules/mal/manifold.c --- a/monetdb5/modules/mal/manifold.c +++ b/monetdb5/modules/mal/manifold.c @@ -72,12 +72,16 @@ typedef struct{ if (msg) \ break; \ for( i = mut->fvar; i<= mut->lvar; i++) { \ - if(!ATOMvarsized(mut->args[i].type)){ \ + if(ATOMstorage(mut->args[i].type) < TYPE_str){ \ args[i] += mut->args[i].size; \ - } else { \ + } else if (ATOMvarsized(mut->args[i].type)) { \ mut->args[i].o++; \ mut->args[i].s = (str *) BUNtail(mut->args[i].bi, mut->args[i].o); \ args[i] = (void*) &mut->args[i].s; \ + } else { \ + mut->args[i].o++; \ + mut->args[i].s = (str *) Tloc(mut->args[i].b, mut->args[i].o); \ + args[i] = (void*) &mut->args[i].s; \ } \ } \ v++; \ @@ -102,11 +106,15 @@ default:\ break; \ bunfastapp(mut->args[0].b, (void*) y); \ for( i = mut->fvar; i<= mut->lvar; i++) { \ - if(!ATOMvarsized(mut->args[i].type)){ \ + if(ATOMstorage(mut->args[i].type) < TYPE_str){ \ args[i] += mut->args[i].size; \ + } else if(ATOMvarsized(mut->args[i].type)){ \ + mut->args[i].o++; \ + mut->args[i].s = (str*) BUNtail(mut->args[i].bi, mut->args[i].o);\ + args[i] = (void*) & mut->args[i].s; \ } else { \ mut->args[i].o++; \ - mut->args[i].s = (str*) BUNtail(mut->args[i].bi, mut->args[i].o);\ + mut->args[i].s = (str*) Tloc(mut->args[i].b, mut->args[i].o);\ args[i] = (void*) & mut->args[i].s; \ } \ } \ @@ -130,10 +138,13 @@ MANIFOLDjob(MULTItask *mut) // the mod.fcn arguments are ignored from the call for( i = mut->pci->retc+2; i< mut->pci->argc; i++) { if ( mut->args[i].b ){ - if (!ATOMvarsized(mut->args[i].type)) { + if(ATOMstorage(mut->args[i].type) < TYPE_str){ \ args[i] = (char*) mut->args[i].first; + } else if(ATOMvarsized(mut->args[i].type)){ \ + mut->args[i].s = (str*) BUNtail(mut->args[i].bi, mut->args[i].o); + args[i] = (void*) & mut->args[i].s; } else { - mut->args[i].s = (str*) BUNtail(mut->args[i].bi, mut->args[i].o); + mut->args[i].s = (str*) Tloc(mut->args[i].b, mut->args[i].o); args[i] = (void*) & mut->args[i].s; } } else { @@ -307,7 +318,7 @@ MANIFOLDevaluate(Client cntxt, MalBlkPtr freeInstruction(mut.pci); // consolidate the properties - if (!ATOMvarsized(mat[0].b->ttype)) + if (ATOMstorage(mat[0].b->ttype) < TYPE_str) BATsetcount(mat[0].b,cnt); BATsettrivprop(mat[0].b); BATderiveProps(mat[0].b, TRUE); diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c --- a/monetdb5/optimizer/opt_support.c +++ b/monetdb5/optimizer/opt_support.c @@ -840,6 +840,7 @@ int isAllScalar(MalBlkPtr mb, InstrPtr p int isMapOp(InstrPtr p){ return getModuleId(p) && ((getModuleId(p) == malRef && getFunctionId(p) == multiplexRef) || + (getModuleId(p) == malRef && getFunctionId(p) == manifoldRef) || (getModuleId(p) == batcalcRef && getFunctionId(p) != mark_grpRef && getFunctionId(p) != rank_grpRef) || (getModuleId(p) != batcalcRef && getModuleId(p) != batRef && strncmp(getModuleId(p), "bat", 3) == 0) || (getModuleId(p) == mkeyRef)); @@ -877,7 +878,8 @@ int isDiffOp(InstrPtr p){ int isMatJoinOp(InstrPtr p){ return (getModuleId(p) == algebraRef && - (getFunctionId(p) == joinRef || + (getFunctionId(p) == crossRef || + getFunctionId(p) == joinRef || getFunctionId(p) == antijoinRef || /* is not mat save */ getFunctionId(p) == thetajoinRef || getFunctionId(p) == bandjoinRef) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list