Changeset: 7e403eb4734e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7e403eb4734e
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out
        sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out
        sql/test/mergetables/Tests/mergequery.stable.out
        sql/test/pg_regress/Tests/strings.stable.err.int128
        sql/test/remote/Tests/partition_elim.stable.out
Branch: default
Log Message:

removed properties h/t origin


diffs (truncated from 1981 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
@@ -2173,7 +2173,6 @@ int hasSideEffects(InstrPtr p, int stric
 str hashRef;
 int have_hge;
 str hgeRef;
-int horiginProp;
 str identityRef;
 str ifthenelseRef;
 str ilikeRef;
@@ -2584,7 +2583,6 @@ timestamp *timestamp_nil;
 int timestamp_tostr(str *buf, int *len, const timestamp *val);
 int timestamp_tz_fromstr(const char *buf, int *len, timestamp **ret);
 int timestamp_tz_tostr(str *buf, int *len, const timestamp *val, const tzone 
*timezone);
-int toriginProp;
 void trimMalBlk(MalBlkPtr mb);
 void trimMalVariables(MalBlkPtr mb, MalStkPtr stk);
 void trimMalVariables_(MalBlkPtr mb, bit *used, MalStkPtr glb);
diff --git a/monetdb5/optimizer/opt_mergetable.c 
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -34,6 +34,10 @@ typedef struct matlist {
        mat_t *v;
        int top;
        int size;
+
+       int *horigin;
+       int *torigin;
+       int vsize;
 } matlist_t;
 
 static mat_type_t
@@ -141,84 +145,99 @@ mat_pack(MalBlkPtr mb, mat_t *mat, int m
 }
 
 static void
-setPartnr(MalBlkPtr mb, int ivar, int ovar, int pnr)
+checksize(matlist_t *ml, int v)
+{
+       if (v >= ml->vsize) {
+               int sz = ml->vsize, i;
+
+               ml->vsize *= 2;
+               ml->horigin = (int*) GDKrealloc(ml->horigin, sizeof(int)* 
ml->vsize);
+               ml->torigin = (int*) GDKrealloc(ml->torigin, sizeof(int)* 
ml->vsize);
+               for (i = sz; i < ml->vsize; i++) 
+                       ml->horigin[i] = ml->torigin[i] = -1;
+       }
+}
+
+static void
+setPartnr(matlist_t *ml, int ivar, int ovar, int pnr)
 {
        int tpnr = -1;
-       VarPtr partnr = (ivar >= 0)?varGetProp(mb, ivar, toriginProp):NULL;
-       ValRecord val;
 
-       if (partnr) {
-               varSetProp(mb, ovar, toriginProp, op_eq, &partnr->value);
-               tpnr = partnr->value.val.ival;
-       }
-       val.val.ival = pnr;
-       val.vtype = TYPE_int;
-       varSetProp(mb, ovar, horiginProp, op_eq, &val);
-       (void)tpnr;
+       checksize(ml, ivar);
+       checksize(ml, ovar);
+       if (ivar >= 0) 
+               tpnr = ml->torigin[ivar];
+       if (tpnr >= 0) 
+               ml->torigin[ovar] = tpnr;
+       ml->horigin[ovar] = pnr;
        //printf("%d %d ", pnr, tpnr);
 }
 
 static void
-propagatePartnr(MalBlkPtr mb, int ivar, int ovar, int pnr)
+propagatePartnr(matlist_t *ml, int ivar, int ovar, int pnr)
 {
        /* prop head ids to tail */
        int tpnr = -1;
-       VarPtr partnr = varGetProp(mb, ivar, horiginProp);
-       ValRecord val;
 
-       val.val.ival = pnr;
-       val.vtype = TYPE_int;
-       if (partnr) {
-               varSetProp(mb, ovar, toriginProp, op_eq, &partnr->value);
-               tpnr = partnr->value.val.ival;
-       } 
-       varSetProp(mb, ovar, horiginProp, op_eq, &val);
-       (void)tpnr;
+       checksize(ml, ivar);
+       checksize(ml, ovar);
+       if (ivar >= 0) 
+               tpnr = ml->horigin[ivar];
+       if (tpnr >= 0) 
+               ml->torigin[ovar] = tpnr;
+       ml->horigin[ovar] = pnr;
        //printf("%d %d ", pnr, tpnr);
 }
 
 static void
-propagateMirror(MalBlkPtr mb, int ivar, int ovar)
+propagateMirror(matlist_t *ml, int ivar, int ovar)
 {
        /* prop head ids to head and tail */
-       VarPtr partnr = varGetProp(mb, ivar, horiginProp);
+       int tpnr;
 
-       if (partnr) {
-               varSetProp(mb, ovar, toriginProp, op_eq, &partnr->value);
-               varSetProp(mb, ovar, horiginProp, op_eq, &partnr->value);
+       checksize(ml, ivar);
+       checksize(ml, ovar);
+               tpnr = ml->horigin[ivar];
+       if (tpnr >= 0) {
+               ml->horigin[ovar] = tpnr;
+               ml->torigin[ovar] = tpnr;
        } 
 }
 
 static int 
-overlap( MalBlkPtr mb, int lv, int rv, int lnr, int rnr, int ontails)
+overlap(matlist_t *ml, int lv, int rv, int lnr, int rnr, int ontails)
 {
-       VarPtr lpartnr = varGetProp(mb, lv, toriginProp); 
-       VarPtr rpartnr = varGetProp(mb, rv, (ontails)?toriginProp:horiginProp); 
+       int lpnr, rpnr;
 
-       if (!lpartnr && !rpartnr)
+       checksize(ml, lv);
+       checksize(ml, rv);
+       lpnr = ml->torigin[lv];
+       rpnr = (ontails)?ml->torigin[rv]:ml->horigin[rv];
+
+       if (lpnr < 0 && rpnr < 0)
                return lnr == rnr;
-       if (!rpartnr) 
-               return lpartnr->value.val.ival == rnr; 
-       if (!lpartnr)
-               return rpartnr->value.val.ival == lnr; 
-       return lpartnr->value.val.ival == rpartnr->value.val.ival; 
+       if (rpnr < 0) 
+               return lpnr == rnr; 
+       if (lpnr < 0)
+               return rpnr == lnr; 
+       return lpnr == rpnr;
 }
 
 static void
-mat_set_prop( MalBlkPtr mb, InstrPtr p)
+mat_set_prop(matlist_t *ml, MalBlkPtr mb, InstrPtr p)
 {
        int k, tpe = getArgType(mb, p, 0);
 
        tpe = getColumnType(tpe);
        for(k=1; k < p->argc; k++) {
-               setPartnr(mb, -1, getArg(p,k), k);
+               setPartnr(ml, -1, getArg(p,k), k);
                if (tpe == TYPE_oid)
-                       propagateMirror(mb, getArg(p,k), getArg(p,k));
+                       propagateMirror(ml, getArg(p,k), getArg(p,k));
        }
 }
 
 static InstrPtr
-mat_delta(MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n, int o, int e, 
int mvar, int nvar, int ovar, int evar)
+mat_delta(matlist_t *ml, MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n, 
int o, int e, int mvar, int nvar, int ovar, int evar)
 {
        int tpe, k, j, is_subdelta = (getFunctionId(p) == subdeltaRef);
        InstrPtr r = NULL;
@@ -236,7 +255,7 @@ mat_delta(MalBlkPtr mb, InstrPtr p, mat_
                int nr = 1;
                for(k=1; k < mat[e].mi->argc; k++) {
                        for(j=1; j < mat[m].mi->argc; j++) {
-                               if (overlap(mb, getArg(mat[e].mi, k), 
getArg(mat[m].mi, j), k, j, 0)){
+                               if (overlap(ml, getArg(mat[e].mi, k), 
getArg(mat[m].mi, j), k, j, 0)){
                                        InstrPtr q = copyInstruction(p);
 
                                        /* remove last argument */
@@ -254,7 +273,7 @@ mat_delta(MalBlkPtr mb, InstrPtr p, mat_
                                        getArg(q, ovar) = getArg(mat[o].mi, j);
                                        getArg(q, evar) = getArg(mat[e].mi, k);
                                        pushInstruction(mb, q);
-                                       setPartnr(mb, getArg(mat[m].mi, j), 
getArg(q,0), nr);
+                                       setPartnr(ml, getArg(mat[m].mi, j), 
getArg(q,0), nr);
                                        r = pushArgument(mb, r, getArg(q, 0));
 
                                        nr++;
@@ -282,7 +301,7 @@ mat_delta(MalBlkPtr mb, InstrPtr p, mat_
                        if (e >= 0)
                                getArg(q, evar) = getArg(mat[e].mi, k);
                        pushInstruction(mb, q);
-                       setPartnr(mb, is_subdelta?getArg(mat[m].mi, k):-1, 
getArg(q,0), k);
+                       setPartnr(ml, is_subdelta?getArg(mat[m].mi, k):-1, 
getArg(q,0), k);
                        r = pushArgument(mb, r, getArg(q, 0));
                }
        }
@@ -343,18 +362,18 @@ mat_apply1(MalBlkPtr mb, InstrPtr p, mat
                ident_var = getArg(q, 1);
                pushInstruction(mb, q);
                if (is_mirror || is_identity) {
-                       propagateMirror(mb, getArg(mat[m].mi, k), getArg(q,0));
+                       propagateMirror(ml, getArg(mat[m].mi, k), getArg(q,0));
                } else if (is_select)
-                       propagatePartnr(mb, getArg(mat[m].mi, k), getArg(q,0), 
k);
+                       propagatePartnr(ml, getArg(mat[m].mi, k), getArg(q,0), 
k);
                else
-                       setPartnr(mb, -1, getArg(q,0), k);
+                       setPartnr(ml, -1, getArg(q,0), k);
                r = pushArgument(mb, r, getArg(q, 0));
        }
        return r;
 }
 
 static InstrPtr
-mat_apply2(MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n, int mvar, int 
nvar)
+mat_apply2(matlist_t *ml, MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n, 
int mvar, int nvar)
 {
        int tpe, k, is_select = isSubSelect(p);
        InstrPtr r = NULL;
@@ -375,16 +394,16 @@ mat_apply2(MalBlkPtr mb, InstrPtr p, mat
                getArg(q, nvar) = getArg(mat[n].mi, k);
                pushInstruction(mb, q);
                if (is_select)
-                       setPartnr(mb, getArg(q,2), getArg(q,0), k);
+                       setPartnr(ml, getArg(q,2), getArg(q,0), k);
                else
-                       setPartnr(mb, -1, getArg(q,0), k);
+                       setPartnr(ml, -1, getArg(q,0), k);
                r = pushArgument(mb, r, getArg(q, 0));
        }
        return r;
 }
 
 static InstrPtr
-mat_apply3(MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n, int o, int 
mvar, int nvar, int ovar)
+mat_apply3(matlist_t *ml, MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n, 
int o, int mvar, int nvar, int ovar)
 {
        int tpe, k;
        InstrPtr r = NULL;
@@ -405,7 +424,7 @@ mat_apply3(MalBlkPtr mb, InstrPtr p, mat
                getArg(q, nvar) = getArg(mat[n].mi, k);
                getArg(q, ovar) = getArg(mat[o].mi, k);
                pushInstruction(mb, q);
-               setPartnr(mb, -1, getArg(q,0), k);
+               setPartnr(ml, -1, getArg(q,0), k);
                r = pushArgument(mb, r, getArg(q, 0));
        }
        return r;
@@ -436,7 +455,7 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
                        getArg(s,0) = newTmpVariable(mb, tpe);
        
                        for (j=1; j<mat[n].mi->argc; j++) {
-                               if (overlap(mb, getArg(mat[m].mi, k), 
getArg(mat[n].mi, j), -1, -2, 1)){
+                               if (overlap(ml, getArg(mat[m].mi, k), 
getArg(mat[n].mi, j), -1, -2, 1)){
                                        s = 
pushArgument(mb,s,getArg(mat[n].mi,j));
                                }
                        }
@@ -445,7 +464,7 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
                        getArg(q,0) = newTmpVariable(mb, tpe);
                        getArg(q,1) = getArg(mat[m].mi,k);
                        getArg(q,2) = getArg(s,0);
-                       setPartnr(mb, getArg(mat[m].mi,k), getArg(q,0), nr);
+                       setPartnr(ml, getArg(mat[m].mi,k), getArg(q,0), nr);
                        pushInstruction(mb,q);
 
                        r = pushArgument(mb,r,getArg(q,0));
@@ -460,7 +479,7 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
                        getArg(q,1) = getArg(mat[m].mi, k);
                        pushInstruction(mb,q);
 
-                       setPartnr(mb, getArg(q, 2), getArg(q,0), k);
+                       setPartnr(ml, getArg(q, 2), getArg(q,0), k);
                        r = pushArgument(mb, r, getArg(q,0));
                }
        }
@@ -485,7 +504,7 @@ mat_leftfetchjoin(MalBlkPtr mb, InstrPtr
                int nr = 1;
                for(k=1; k<mat[m].mi->argc; k++) { 
                        for (j=1; j<mat[n].mi->argc; j++) {
-                               if (overlap(mb, getArg(mat[m].mi, k), 
getArg(mat[n].mi, j), k, j, 0)){
+                               if (overlap(ml, getArg(mat[m].mi, k), 
getArg(mat[n].mi, j), k, j, 0)){
                                        InstrPtr q = copyInstruction(p);
 
                                        getArg(q,0) = newTmpVariable(mb, tpe);
@@ -493,7 +512,7 @@ mat_leftfetchjoin(MalBlkPtr mb, InstrPtr
                                        getArg(q,2) = getArg(mat[n].mi,j);
                                        pushInstruction(mb,q);
                
-                                       setPartnr(mb, getArg(mat[n].mi, j), 
getArg(q,0), nr);
+                                       setPartnr(ml, getArg(mat[n].mi, j), 
getArg(q,0), nr);
                                        r = pushArgument(mb,r,getArg(q,0));
 
                                        nr++;
@@ -510,7 +529,7 @@ mat_leftfetchjoin(MalBlkPtr mb, InstrPtr
                        getArg(q,1) = getArg(mat[m].mi, k);
                        pushInstruction(mb,q);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to