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

Reply via email to