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