Changeset: 8e11b67b43a4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8e11b67b43a4
Modified Files:
        monetdb5/optimizer/opt_hitchhiker.c
Branch: hitchhiker
Log Message:

Optimizer start


diffs (88 lines):

diff --git a/monetdb5/optimizer/opt_hitchhiker.c 
b/monetdb5/optimizer/opt_hitchhiker.c
--- a/monetdb5/optimizer/opt_hitchhiker.c
+++ b/monetdb5/optimizer/opt_hitchhiker.c
@@ -10,14 +10,80 @@
 #include "opt_hitchhiker.h"
 #include "mal_interpreter.h"
 
+
+
+static int 
+OPThitchhiker(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+    (void) cntxt;
+       (void) pci;
+       (void) stk;
+    (void) mb;
+    return 0;
+}
+
+
 str
 OPThitchhikerImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci)
 {
     (void) cntxt;
-    (void) mb;
-    (void) stk;
-    (void) pci;
+
+    str modnme;
+       str fcnnme;
+    str msg;
+    Symbol s = NULL;
+    int actions = 0;
+    char buf[256];
+    lng clk= GDKusec();
+
+    if(pci)
+        removeInstruction(mb, pci);
+
+    if(pci && pci->argc > 1){
+        if( getArgType(mb, pci, 1) != TYPE_str ||
+            getArgType(mb, pci, 2) != TYPE_str ||
+            !isVarConstant(mb, getArg(pci, 1)) ||
+            !isVarConstant(mb, getArg(pci, 2))
+        ) {
+            throw(MAL, "optimizer.hitchhiker", ILLARG_CONSTANTS);
+        }
+        if(stk != 0) {
+            modnme = *getArgReference_str(stk, pci, 1);
+            fcnnme = *getArgReference_str(stk, pci, 2);
+        } else {
+            modnme = getArgDefault(mb, pci, 1);
+            fcnnme = getArgDefault(mb, pci, 2);
+        }
+        s = findSymbol(cntxt->usermodule, putName(modnme), putName(fcnnme));
 
-    str msg = MAL_SUCCEED;
+        if(s == NULL) {
+            char buf[1024];
+            snprintf(buf, 1024, "%s.%s", modnme, fcnnme);
+            throw(MAL, "optimizer.hitchhiker", RUNTIME_OBJECT_UNDEFINED ":%s", 
buf);
+        }
+
+        mb = s->def;
+        stk = 0;
+    }
+
+    if(mb->errors) {
+        // when we have errors, we still want to see them
+        addtoMalBlkHistory(mb);
+        return MAL_SUCCEED;
+    }
+
+    // number of successfull changes to the code
+    actions = OPThitchhiker(cntxt, mb, stk, pci);
+
+    // defense line against incorrect plans
+    msg = chkTypes(cntxt->usermodule, mb, FALSE);
+    if(msg == MAL_SUCCEED) msg = chkFlow(mb);
+    if(msg == MAL_SUCCEED) msg = chkDeclarations(mb);
+
+    clk = GDKusec() - clk;
+    snprintf(buf, 256, "%-20s actions=%2d time=" LLFMT " usec", 
"optimizer.hitchhiker", actions, clk);
+    newComment(mb,buf);
+    addtoMalBlkHistory(mb);
+
     return msg;
 }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to