Changeset: 80808ac138ca for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/80808ac138ca
Modified Files:
        monetdb5/optimizer/opt_mergetable.c
Branch: Jul2021
Log Message:

call mat_apply1 on identity functions.


diffs (78 lines):

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
@@ -401,7 +401,7 @@ mat_assign(MalBlkPtr mb, InstrPtr p, mat
        return r;
 }
 
-static InstrPtr
+static int
 mat_apply1(MalBlkPtr mb, InstrPtr p, matlist_t *ml, int m, int var)
 {
        int tpe, k, is_select = isSelect(p), is_mirror = (getFunctionId(p) == 
mirrorRef);
@@ -421,14 +421,14 @@ mat_apply1(MalBlkPtr mb, InstrPtr p, mat
        }
 
        if((r = newInstructionArgs(mb, matRef, packRef, mat[m].mi->argc)) == 
NULL)
-               return NULL;
+               return -1;
        getArg(r, 0) = getArg(p,0);
        tpe = getArgType(mb,p,0);
 
        if (is_identity) {
                if((q = newInstruction(mb,  NULL,NULL)) == NULL) {
                        freeInstruction(r);
-                       return NULL;
+                       return -1;
                }
                getArg(q, 0) = newTmpVariable(mb, TYPE_oid);
                q->retc = 1;
@@ -441,7 +441,7 @@ mat_apply1(MalBlkPtr mb, InstrPtr p, mat
                int res = 0;
                if((q = copyInstruction(p)) == NULL) {
                        freeInstruction(r);
-                       return NULL;
+                       return -1;
                }
 
                if (is_assign)
@@ -471,11 +471,14 @@ mat_apply1(MalBlkPtr mb, InstrPtr p, mat
                        res = setPartnr(ml, -1, getArg(q,0), k);
                if(res) {
                        freeInstruction(r);
-                       return NULL;
+                       return -1;
                }
                r = addArgument(mb, r, getArg(q, 0));
        }
-       return r;
+       if(!r || mat_add(ml, r, mat_type(ml->v, m), getFunctionId(p))) {
+               return -1;
+       }
+       return 0;
 }
 
 static int
@@ -483,6 +486,8 @@ mat_apply(MalBlkPtr mb, InstrPtr p, matl
 {
        int matvar[8], fargument[8], k, l, parts = 0;
 
+       if (nrmats == 1 && (getFunctionId(p) == identityRef && getModuleId(p) 
== batcalcRef))
+               return mat_apply1(mb, p, ml, is_a_mat(getArg(p,1),ml), 1);
        assert(nrmats <= 8);
 
        for(k=p->retc, l=0; k < p->argc; k++) {
@@ -2345,12 +2350,7 @@ OPTmergetableImplementation(Client cntxt
                   (m=is_a_mat(getArg(p,fm), &ml)) >= 0 && bats == 2 &&
                        isaBatType(getArgType(mb,p,2)) && 
isVarConstant(mb,getArg(p,2)) &&
                        is_bat_nil(getVarConstant(mb,getArg(p,2)).val.bval)) {
-                       if ((r = mat_apply1(mb, p, &ml, m, fm)) != NULL) {
-                               if(mat_add(&ml, r, mat_type(ml.v, m), 
getFunctionId(p))) {
-                                       msg = 
createException(MAL,"optimizer.mergetable",SQLSTATE(HY013) MAL_MALLOC_FAIL);
-                                       goto cleanup;
-                               }
-                       } else {
+                       if (mat_apply1(mb, p, &ml, m, fm)) {
                                msg = 
createException(MAL,"optimizer.mergetable",SQLSTATE(HY013) MAL_MALLOC_FAIL);
                                goto cleanup;
                        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to