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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list