Changeset: 070707c4bb0b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/070707c4bb0b
Modified Files:
        monetdb5/optimizer/opt_commonTerms.c
        monetdb5/optimizer/opt_constants.c
Branch: default
Log Message:

Refine the optimizers to not skip sql.tid duplicate elimination


diffs (42 lines):

diff --git a/monetdb5/optimizer/opt_commonTerms.c 
b/monetdb5/optimizer/opt_commonTerms.c
--- a/monetdb5/optimizer/opt_commonTerms.c
+++ b/monetdb5/optimizer/opt_commonTerms.c
@@ -131,6 +131,11 @@ OPTcommonTermsImplementation(Client cntx
                        pushInstruction(mb,p);
                        continue;
                }
+               /* simple SQL bind operations need not be merged, they are 
cheap and/or can be duplicated eliminated elsewhere cheaper */
+               if( getModuleId(p) == sqlRef && getFunctionId(p) != tidRef){
+                       pushInstruction(mb,p);
+                       continue;
+               }
 
                /* from here we have a candidate to look for a match */
 
@@ -147,7 +152,7 @@ OPTcommonTermsImplementation(Client cntx
                bailout = 1024 ;  // don't run over long collision list
                /* Look into the hash structure for matching instructions */
                for (j = hash[h];  j > 0 && bailout-- > 0  ; j = list[j])
-                       if ( (q= getInstrPtr(mb,j)) && getFunctionId(q) == 
getFunctionId(p) && getModuleId(q) == getModuleId(p)   && getModuleId(p) != 
sqlRef){
+                       if ( (q= getInstrPtr(mb,j)) && getFunctionId(q) == 
getFunctionId(p) && getModuleId(q) == getModuleId(p)){
                                TRC_DEBUG(MAL_OPTIMIZER, "Candidate[%d->%d] %d 
%d :%d %d %d=%d %d %d %d\n",
                                        j, list[j],
                                        hasSameSignature(mb, p, q),
diff --git a/monetdb5/optimizer/opt_constants.c 
b/monetdb5/optimizer/opt_constants.c
--- a/monetdb5/optimizer/opt_constants.c
+++ b/monetdb5/optimizer/opt_constants.c
@@ -57,7 +57,13 @@ OPTconstantsImplementation(Client cntxt,
 
        for(i=0; i<mb->stop; i++){
                q = getInstrPtr(mb,i);
-               if( hasSideEffects(mb, q, 1) || getModuleId(q) == sqlRef )
+               if ( !q) {
+                       continue;
+               }
+               if ( getModuleId(p) == sqlRef && getFunctionId(p) != tidRef) {
+                       continue;
+               }
+               if( hasSideEffects(mb, q, 1) )
                        continue;
                for(k= q->retc; k < q->argc; k++){
                        j = getArg(q,k);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to