Changeset: ee3b12e8326a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ee3b12e8326a
Modified Files:
        monetdb5/optimizer/opt_remap.c
Branch: pushcands
Log Message:

for like/notlike push nil:bat's to the end when trying to convert to a 
batalgebra.like/notlike
This shows the general idea of rewriting scalar cases into bulk cases with 
(only) candidate api's.


diffs (49 lines):

diff --git a/monetdb5/optimizer/opt_remap.c b/monetdb5/optimizer/opt_remap.c
--- a/monetdb5/optimizer/opt_remap.c
+++ b/monetdb5/optimizer/opt_remap.c
@@ -224,15 +224,23 @@ OPTmultiplexInline(Client cntxt, MalBlkP
                q= getInstrPtr(mq,i);
                if( q->token== ENDsymbol)
                        break;
+               int add_nils = 0;
                for(j=0; j<q->argc; j++)
                        if ( upgrade[getArg(q,j)]){
                                if ( blockStart(q) ||
                                         q->barrier== REDOsymbol || 
q->barrier==LEAVEsymbol )
                                        goto terminateMX;
                                if (getModuleId(q)){
-                                       
snprintf(buf,1024,"bat%s",getModuleId(q));
-                                       setModuleId(q,putName(buf));
-                                       q->typechk = TYPE_UNKNOWN;
+                                       if (strncmp(getModuleId(q), "bat", 3) 
!= 0) {
+                                               
snprintf(buf,1024,"bat%s",getModuleId(q));
+                                               setModuleId(q,putName(buf));
+                                               q->typechk = TYPE_UNKNOWN;
+                                       }
+                                       if (getModuleId(q) == batalgebraRef && 
(getFunctionId(q) == likeRef || getFunctionId(q) == not_likeRef)) {
+                                               if (j >= q->retc)
+                                                       add_nils++;
+                                               continue;
+                                       }
                                        if (q->retc == 1 &&
                                                ((getModuleId(q) == batcalcRef 
&&
                                                (getFunctionId(q) == mulRef || 
getFunctionId(q) == divRef || getFunctionId(q) == plusRef || getFunctionId(q) 
== minusRef || getFunctionId(q) == modRef)) || getModuleId(q) == batmtimeRef || 
getModuleId(q) == batstrRef)) {
@@ -288,9 +296,17 @@ OPTmultiplexInline(Client cntxt, MalBlkP
                                        break;
                                }
                }
+               if (add_nils) {
+                       for(j=0; j<add_nils; j++)
+                               q = pushNil(mq, q, TYPE_bat);
+                   /* now see if we can resolve the instruction */
+                       typeChecker(cntxt->usermodule,mq,q,i,TRUE);
+                       if( q->typechk== TYPE_UNKNOWN)
+                               goto terminateMX;
+                       actions++;
+               }
        }
 
-
        if(mq->errors){
 terminateMX:
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to