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