Changeset: 8c25de4ce971 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8c25de4ce971
Modified Files:
        monetdb5/optimizer/opt_hitchhiker.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:

Add hh.move before every sql.tid statement


diffs (232 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
@@ -20,48 +20,58 @@ OPThitchhikerImplementation(Client cntxt
 
     str msg;
     char buf[256];
-    int i, limit, slimit, actions = 0;
-    // InstrPtr p;
+    int i, limit, slimit, updates = 0, actions = 0;
+    InstrPtr p, q, *old;
     lng clk = GDKusec();
 
-    // if (newMalBlkStmt(mb, mb->ssize) < 0)
-    //     throw(MAL, "optimizer.hitchhiker", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+    // check if optimizer has been applied
+    if(optimizerIsApplied(mb, "hh"))
+        return MAL_SUCCEED;
 
     limit = mb->stop;
     slimit = mb->ssize;
-    // old = mb->stmt;
-    
-    // sql in bindRef and tidRef
+    old = mb->stmt;
+
+    // count the number statements that need to be inserted
+    // in practice, for every sql.tid we need a hh.move
     for(i = 0; i < limit; i++)
+        if(getModuleId(mb->stmt[i]) == sqlRef && getFunctionId(mb->stmt[i]) == 
tidRef)
+            updates++;
+
+    if(updates)
     {
-        if(getModuleId(mb->stmt[i]) == sqlRef && (getFunctionId(mb->stmt[i]) 
== bindRef || getFunctionId(mb->stmt[i]) == tidRef))
+        // malloc new MAL block statement
+        if (newMalBlkStmt(mb, mb->ssize + updates) < 0)
+            throw(MAL, "hitchhiker.optimizer", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+
+        // locate sql.tid and inject hh.move calls before that
+        for(i = 0; i < limit; i++)
         {
-            // if((q = copyInstruction(p)) == NULL) {
-            //     for (; i < slimit; i++)
-            //         if (old[i])
-            //             freeInstruction(old[i]);
-            //     GDKfree(old);
+            p = old[i];
 
-            //     return createException(MAL, "optimizer.hitchhiker", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
-            // }
+            // if instruction IS sql.tid first inject the new instruction first
+            if(getModuleId(p) == sqlRef && getFunctionId(p) == tidRef)
+            {
+                // create a new instruction and push it
+                q = newInstruction(mb, hitchhikerRef, moveRef);
+                getArg(q, 0) = newTmpVariable(mb, TYPE_any);
+                // setDestVar(q, newTmpVariable(mb, Typ));
+                pushInstruction(mb, q);
+                actions++;
+            }
 
-            setModuleId(mb->stmt[i], hitchhikerRef);
-            actions++;
+            // push the original instructions
+            if(p)
+                pushInstruction(mb, p);
         }
 
-        // if(p)
-        //     pushInstruction(mb, p);
+        // free old
+        for (; i < slimit; i++)
+            if (old[i])
+                freeInstruction(old[i]);
+        GDKfree(old);
     }
 
-    // free old
-    // for (; i < slimit; i++)
-    //     if (old[i])
-    //         freeInstruction(old[i]);
-    // GDKfree(old);
-
-    if(mb->errors)
-        throw(MAL, "optimizer.hitchhiker", SQLSTATE(42000) PROGRAM_GENERAL);
-
     // defense line against incorrect plans
     msg = chkTypes(cntxt->usermodule, mb, FALSE);
     if(msg == MAL_SUCCEED) msg = chkFlow(mb);
@@ -69,7 +79,7 @@ OPThitchhikerImplementation(Client cntxt
 
     clk = GDKusec() - clk;
     snprintf(buf, 256, "%-20s actions=%2d time=" LLFMT " usec", 
"optimizer.hitchhiker", actions, clk);
-    newComment(mb,buf);
+    newComment(mb, buf);
     addtoMalBlkHistory(mb);
 
     return msg;
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
@@ -187,6 +187,7 @@ str mirrorRef;
 str mitosisRef;
 str mkeyRef;
 str mmathRef;
+str moveRef;
 str mtimeRef;
 str mulRef;
 str multicolumnRef;
@@ -488,6 +489,7 @@ void optimizerInit(void)
        mitosisRef = putName("mitosis");
        mkeyRef = putName("mkey");
        mmathRef = putName("mmath");
+       moveRef = putName("move");
        mtimeRef = putName("mtime");
        mulRef = putName("*");
        multicolumnRef = putName("multicolumn");
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
@@ -186,6 +186,7 @@ mal_export  str mirrorRef;
 mal_export  str mitosisRef;
 mal_export  str mkeyRef;
 mal_export  str mmathRef;
+mal_export  str moveRef;
 mal_export  str mtimeRef;
 mal_export  str mulRef;
 mal_export  str multicolumnRef;
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
@@ -209,28 +209,6 @@ 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 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 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 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;
 pattern bind(mvc:int, schema:str, table:str, column:str, access:int 
):bat[:any_1]
@@ -316,6 +294,14 @@ unsafe pattern clear_table(sname:str, tn
 address mvc_clear_table_wrap
 comment "Clear the table sname.tname.";
 
+
+
+pattern hh.move() :void
+address hh_move
+comment "Hitchhiker migrate to another database";
+
+
+
 pattern tid( mvc:int, sname:str, tname:str):bat[:oid] 
 address SQLtid
 comment "Return a column with the valid tuple identifiers associated with the 
table sname.tname.";
@@ -323,18 +309,6 @@ 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
@@ -11,14 +11,12 @@
 
 
 str
-hh_tid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+hh_move(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-    return SQLtid(cntxt, mb, stk, pci);
+    (void) cntxt;
+    (void) mb;
+    (void) stk;
+    (void) pci;
+    
+    return MAL_SUCCEED;
 }
-
-
-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,7 +21,6 @@
 #define sql5_export extern
 #endif
 
-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);
+sql5_export str hh_move(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