Changeset: e2c95ea966c8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e2c95ea966c8
Modified Files:
        monetdb5/optimizer/opt_hitchhiker.c
        monetdb5/optimizer/opt_pipes.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        sql/backends/monet5/sql.mal
        sql/backends/monet5/sql_hitchhiker.c
        sql/backends/monet5/sql_hitchhiker.h
Branch: hitchhiker
Log Message:

Hitchhiker optimizer replaces sql.bind with hh.bind and sql.tid with hh.tid


diffs (283 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
@@ -11,69 +11,56 @@
 #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) stk;
+    (void) pci;
 
-    str modnme;
-       str fcnnme;
     str msg;
-    Symbol s = NULL;
-    int actions = 0;
     char buf[256];
-    lng clk= GDKusec();
+    int i, limit, slimit, actions = 0;
+    // InstrPtr p;
+    lng clk = GDKusec();
 
-    if(pci)
-        removeInstruction(mb, pci);
+    // if (newMalBlkStmt(mb, mb->ssize) < 0)
+    //     throw(MAL, "optimizer.hitchhiker", SQLSTATE(HY013) MAL_MALLOC_FAIL);
 
-    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));
+    limit = mb->stop;
+    slimit = mb->ssize;
+    // old = mb->stmt;
+    
+    // sql in bindRef and tidRef
+    for(i = 0; i < limit; i++)
+    {
+        if(getModuleId(mb->stmt[i]) == sqlRef && (getFunctionId(mb->stmt[i]) 
== bindRef || getFunctionId(mb->stmt[i]) == tidRef))
+        {
+            // if((q = copyInstruction(p)) == NULL) {
+            //     for (; i < slimit; i++)
+            //         if (old[i])
+            //             freeInstruction(old[i]);
+            //     GDKfree(old);
 
-        if(s == NULL) {
-            char buf[1024];
-            snprintf(buf, 1024, "%s.%s", modnme, fcnnme);
-            throw(MAL, "optimizer.hitchhiker", RUNTIME_OBJECT_UNDEFINED ":%s", 
buf);
+            //     return createException(MAL, "optimizer.hitchhiker", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+            // }
+
+            setModuleId(mb->stmt[i], hitchhikerRef);
+            actions++;
         }
 
-        mb = s->def;
-        stk = 0;
+        // if(p)
+        //     pushInstruction(mb, p);
     }
 
-    if(mb->errors) {
-        // when we have errors, we still want to see them
-        addtoMalBlkHistory(mb);
-        return MAL_SUCCEED;
-    }
+    // free old
+    // for (; i < slimit; i++)
+    //     if (old[i])
+    //         freeInstruction(old[i]);
+    // GDKfree(old);
 
-    // number of successfull changes to the code
-    actions = OPThitchhiker(cntxt, mb, stk, pci);
+    if(mb->errors)
+        throw(MAL, "optimizer.hitchhiker", SQLSTATE(42000) PROGRAM_GENERAL);
 
     // defense line against incorrect plans
     msg = chkTypes(cntxt->usermodule, mb, FALSE);
diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c
--- a/monetdb5/optimizer/opt_pipes.c
+++ b/monetdb5/optimizer/opt_pipes.c
@@ -91,6 +91,7 @@ static struct PIPELINES {
         "optimizer.postfix();"
 //      "optimizer.jit();" awaiting the new batcalc api
         "optimizer.wlc();"
+        "optimizer.hitchhiker();"
         "optimizer.garbageCollector();",
         "stable", NULL, NULL, 1},
 /*
@@ -205,6 +206,7 @@ static struct PIPELINES {
         "optimizer.postfix();"
 //      "optimizer.jit();" awaiting the new batcalc api
         "optimizer.wlc();"
+        "optimizer.hitchhiker();"
         "optimizer.garbageCollector();",
         "stable", NULL, NULL, 1},
 /* The sequential pipe line is (and should be kept!) identical to the
@@ -245,6 +247,7 @@ static struct PIPELINES {
         "optimizer.postfix();"
 //      "optimizer.jit();" awaiting the new batcalc api
         "optimizer.wlc();"
+        "optimizer.hitchhiker();"
         "optimizer.garbageCollector();",
         "stable", NULL, NULL, 1},
 /* Experimental pipelines stressing various components under
diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c
--- a/monetdb5/optimizer/opt_prelude.c
+++ b/monetdb5/optimizer/opt_prelude.c
@@ -144,6 +144,7 @@ str groupdoneRef;
 str groupRef;
 str hashRef;
 str hgeRef;
+str hitchhikerRef;
 str identityRef;
 str ifthenelseRef;
 str ilikeRef;
@@ -444,6 +445,7 @@ void optimizerInit(void)
        groupRef = putName("group");
        hashRef = putName("hash");
        hgeRef = putName("hge");
+       hitchhikerRef = putName("hh");
        identityRef = putName("identity");
        ifthenelseRef = putName("ifthenelse");
        ilikeRef = putName("ilike");
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -141,6 +141,7 @@ mal_export  str groupdoneRef;
 mal_export  str groupRef;
 mal_export  str hashRef;
 mal_export  str hgeRef;
+mal_export  str hitchhikerRef;
 mal_export  str identityRef;
 mal_export  str ifthenelseRef;
 mal_export  str ilikeRef;
diff --git a/sql/backends/monet5/sql.mal b/sql/backends/monet5/sql.mal
--- a/sql/backends/monet5/sql.mal
+++ b/sql/backends/monet5/sql.mal
@@ -4,9 +4,9 @@
 #
 # Copyright 1997 - July 2008 CWI, August 2008 - 2020 MonetDB B.V.
 
+module hh;
 module batsql;
 module sql;
-module hh;
 
 pattern shutdown(delay:bte, force:bit):str
 address SQLshutdown_wrap;
@@ -209,33 +209,27 @@ comment "Bind the 'schema.table.index' B
        1 - inserts
        2 - updates";
 
-pattern hh.bind(mvc:int, schema:str, table:str, column:str, access:int 
):bat[:any_1]
-address sql_hitchhiker
-comment "Bind the 'schema.table.column' BAT with access kind:
-       0 - base table
-       1 - inserts
-       2 - updates";
+
+
 
-pattern hh.bind(mvc:int, schema:str, table:str, column:str, access:int 
)(uid:bat[:oid],uval:bat[:any_1])
-address sql_hitchhiker
-comment "Bind the 'schema.table.column' BAT with access kind:
-       0 - base table
-       1 - inserts
-       2 - updates";
+pattern hh.bind(mvc:int, schema:str, table:str, column:str, 
access:int):bat[:any_1]
+address hh_bind
+comment "Hitchhiker hh.bind";
+
+pattern hh.bind(mvc:int, schema:str, table:str, column:str, 
access:int)(uid:bat[:oid],uval:bat[:any_1])
+address hh_bind
+comment "Hitchhiker hh.bind";
 
-pattern hh.bind(mvc:int, schema:str, table:str, column:str, access:int, 
part_nr:int, nr_parts:int ):bat[:any_1]
-address sql_hitchhiker
-comment "Bind the 'schema.table.column' BAT partition with access kind:
-       0 - base table
-       1 - inserts
-       2 - updates";
+pattern hh.bind(mvc:int, schema:str, table:str, column:str, access:int, 
part_nr:int, nr_parts:int):bat[:any_1]
+address hh_bind
+comment "Hitchhiker hh.bind";
 
-pattern hh.bind(mvc:int, schema:str, table:str, column:str, access:int, 
part_nr:int, nr_parts:int )(uid:bat[:oid],uval:bat[:any_1])
-address sql_hitchhiker
-comment "Bind the 'schema.table.column' BAT with access kind:
-       0 - base table
-       1 - inserts
-       2 - updates";
+pattern hh.bind(mvc:int, schema:str, table:str, column:str, access:int, 
part_nr:int, nr_parts:int)(uid:bat[:oid],uval:bat[:any_1])
+address hh_bind
+comment "Hitchhiker hh.bind";
+
+
+
 
 pattern emptybind(mvc:int, schema:str, table:str, column:str, access:int 
):bat[:any_1]
 address mvc_bind_wrap;
@@ -329,6 +323,18 @@ pattern tid( mvc:int, sname:str, tname:s
 address SQLtid
 comment "Return the tables tid column.";
 
+
+
+
+pattern hh.tid(mvc:int, sname:str, tname:str):bat[:oid] 
+address hh_tid
+comment "Hitchhiker hh.tid";
+pattern hh.tid(mvc:int, sname:str, tname:str, part_nr:int, 
nr_parts:int):bat[:oid] 
+address hh_tid
+comment "Hitchhiker hh.tid";
+
+
+
 unsafe pattern delete(mvc:int, sname:str, tname:str, b:any):int
 address mvc_delete_wrap
 comment "Delete a row from a table. Returns sequence number for order 
dependece.";
diff --git a/sql/backends/monet5/sql_hitchhiker.c 
b/sql/backends/monet5/sql_hitchhiker.c
--- a/sql/backends/monet5/sql_hitchhiker.c
+++ b/sql/backends/monet5/sql_hitchhiker.c
@@ -9,8 +9,16 @@
 #include "monetdb_config.h"
 #include "sql_hitchhiker.h"
 
+
 str
-sql_hitchhiker(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+hh_tid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+    return SQLtid(cntxt, mb, stk, pci);
+}
+
+
+str
+hh_bind(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
     return mvc_bind_wrap(cntxt, mb, stk, pci);
 }
diff --git a/sql/backends/monet5/sql_hitchhiker.h 
b/sql/backends/monet5/sql_hitchhiker.h
--- a/sql/backends/monet5/sql_hitchhiker.h
+++ b/sql/backends/monet5/sql_hitchhiker.h
@@ -21,6 +21,7 @@
 #define sql5_export extern
 #endif
 
-sql5_export str sql_hitchhiker(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+sql5_export str hh_tid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+sql5_export str hh_bind(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 
 #endif /* _SQL_HITCHHIKER_ */
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to