Changeset: d310abf48269 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d310abf48269
Modified Files:
monetdb5/optimizer/opt_aliases.c
monetdb5/optimizer/opt_bincopyfrom.c
monetdb5/optimizer/opt_coercion.c
monetdb5/optimizer/opt_dataflow.c
monetdb5/optimizer/opt_deadcode.c
monetdb5/optimizer/opt_emptybind.c
monetdb5/optimizer/opt_garbageCollector.c
monetdb5/optimizer/opt_generator.c
monetdb5/optimizer/opt_mask.c
monetdb5/optimizer/opt_matpack.c
monetdb5/optimizer/opt_profiler.c
monetdb5/optimizer/opt_projectionpath.c
monetdb5/optimizer/opt_pushselect.c
monetdb5/optimizer/opt_volcano.c
Branch: default
Log Message:
Minor cleanup of the optimizer codes
diffs (truncated from 456 to 300 lines):
diff --git a/monetdb5/optimizer/opt_aliases.c b/monetdb5/optimizer/opt_aliases.c
--- a/monetdb5/optimizer/opt_aliases.c
+++ b/monetdb5/optimizer/opt_aliases.c
@@ -39,6 +39,7 @@ OPTaliasesImplementation(Client cntxt, M
break;
}
if( i == limit){
+ // we didn't found a simple assignment that warrants a rewrite
goto wrapup;
}
k = i;
@@ -82,8 +83,7 @@ OPTaliasesImplementation(Client cntxt, M
// if ( msg == MAL_SUCCEED)
// msg = chkDeclarations(mb);
wrapup:
- /* keep all actions taken as a post block comment
- * and update statics */
+ /* keep all actions taken as a post block comment and update statics */
usec= GDKusec() - usec;
snprintf(buf,256,"%-20s actions=%2d time=" LLFMT "
usec","aliases",actions,usec);
newComment(mb,buf);
diff --git a/monetdb5/optimizer/opt_bincopyfrom.c
b/monetdb5/optimizer/opt_bincopyfrom.c
--- a/monetdb5/optimizer/opt_bincopyfrom.c
+++ b/monetdb5/optimizer/opt_bincopyfrom.c
@@ -24,6 +24,8 @@ OPTbincopyfromImplementation(Client cntx
InstrPtr *old_mb_stmt = NULL;
lng usec = GDKusec();
int actions = 0;
+ size_t old_ssize = 0;
+ size_t old_stop = 0;
(void)stk;
(void)pci;
@@ -39,15 +41,14 @@ OPTbincopyfromImplementation(Client cntx
}
}
if (found_at == -1)
- return MAL_SUCCEED;
+ // we didn't find a reason to modify the plan
+ goto wrapup;
old_mb_stmt = mb->stmt;
- size_t old_ssize = mb->ssize;
- size_t old_stop = mb->stop;
- if (newMalBlkStmt(mb, mb->stop + getInstrPtr(mb, found_at)->argc) < 0) {
- msg = createException(MAL, "optimizer.bincopyfrom",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
- goto end;
- }
+ old_ssize = mb->ssize;
+ old_stop = mb->stop;
+ if (newMalBlkStmt(mb, mb->stop + getInstrPtr(mb, found_at)->argc) < 0)
+ throw(MAL, "optimizer.bincopyfrom", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
for (size_t i = 0; i < old_stop; i++) {
InstrPtr p = old_mb_stmt[i];
@@ -79,6 +80,7 @@ end:
msg = chkDeclarations(mb);
}
/* keep all actions taken as a post block comment */
+wrapup:
usec = GDKusec()- usec;
char buf[256];
snprintf(buf, sizeof(buf), "%-20s actions=%2d time=" LLFMT "
usec","bincopyfrom",actions, usec);
diff --git a/monetdb5/optimizer/opt_coercion.c
b/monetdb5/optimizer/opt_coercion.c
--- a/monetdb5/optimizer/opt_coercion.c
+++ b/monetdb5/optimizer/opt_coercion.c
@@ -164,10 +164,10 @@ OPTcoercionImplementation(Client cntxt,M
/* Defense line against incorrect plans */
if( actions > 0){
msg = chkTypes(cntxt->usermodule, mb, FALSE);
- if (!msg)
- msg = chkFlow(mb);
- if (!msg)
- msg = chkDeclarations(mb);
+ if (!msg)
+ msg = chkFlow(mb);
+ if (!msg)
+ msg = chkDeclarations(mb);
}
/* keep all actions taken as a post block comment */
usec = GDKusec()- usec;
diff --git a/monetdb5/optimizer/opt_dataflow.c
b/monetdb5/optimizer/opt_dataflow.c
--- a/monetdb5/optimizer/opt_dataflow.c
+++ b/monetdb5/optimizer/opt_dataflow.c
@@ -336,7 +336,7 @@ OPTdataflowImplementation(Client cntxt,
int flowblock= 0;
InstrPtr *old = NULL, q;
int limit, vlimit;
- States states;
+ States states = NULL;
char buf[256];
region_state state = { singleton_region };
lng usec = GDKusec();
@@ -344,20 +344,19 @@ OPTdataflowImplementation(Client cntxt,
/* don't use dataflow on single processor systems */
if (GDKnr_threads <= 1 || cntxt->workerlimit == 1)
- return MAL_SUCCEED;
+ goto wrapup;
if ( optimizerIsApplied(mb,"dataflow"))
- return MAL_SUCCEED;
+ goto wrapup;
(void) stk;
/* inlined functions will get their dataflow control later */
if ( mb->inlineProp)
- return MAL_SUCCEED;
+ goto wrapup;
vlimit = mb->vsize;
states = (States) GDKzalloc(vlimit * sizeof(char));
if (states == NULL ){
- msg= createException(MAL,"optimizer.dataflow", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- goto wrapup;
+ throw(MAL,"optimizer.dataflow", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
setVariableScope(mb);
@@ -366,9 +365,8 @@ OPTdataflowImplementation(Client cntxt,
slimit= mb->ssize;
old = mb->stmt;
if (newMalBlkStmt(mb, mb->ssize) < 0) {
- msg= createException(MAL,"optimizer.dataflow", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- actions = -1;
- goto wrapup;
+ GDKfree(states);
+ throw(MAL,"optimizer.dataflow", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
/* inject new dataflow barriers using a single pass through the program
*/
diff --git a/monetdb5/optimizer/opt_deadcode.c
b/monetdb5/optimizer/opt_deadcode.c
--- a/monetdb5/optimizer/opt_deadcode.c
+++ b/monetdb5/optimizer/opt_deadcode.c
@@ -15,7 +15,7 @@ str
OPTdeadcodeImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci)
{
int i, k, se,limit, slimit;
- InstrPtr p=0, *old= mb->stmt;
+ InstrPtr p=0, *old= NULL;
int actions = 0;
int *varused=0;
char buf[256];
@@ -27,17 +27,18 @@ OPTdeadcodeImplementation(Client cntxt,
(void) stk; /* to fool compilers */
if ( mb->inlineProp )
- return MAL_SUCCEED;
+ goto wrapup;
varused = GDKzalloc(mb->vtop * sizeof(int));
if (varused == NULL)
- return MAL_SUCCEED;
+ goto wrapup;
+ old = mb->stmt;
limit = mb->stop;
slimit = mb->ssize;
if (newMalBlkStmt(mb, mb->ssize) < 0) {
- msg= createException(MAL,"optimizer.deadcode", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- goto wrapup;
+ GDKfree(varused);
+ throw(MAL,"optimizer.deadcode", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
// Calculate the instructions in which a variable is used.
diff --git a/monetdb5/optimizer/opt_emptybind.c
b/monetdb5/optimizer/opt_emptybind.c
--- a/monetdb5/optimizer/opt_emptybind.c
+++ b/monetdb5/optimizer/opt_emptybind.c
@@ -39,9 +39,9 @@ str
OPTemptybindImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci)
{
int i,j, actions =0, extras= 0;
- int *empty;
+ int *empty = NULL;
int limit = mb->stop, slimit = mb->ssize;
- InstrPtr p, q, *old = mb->stmt, *updated;
+ InstrPtr p, q, *old = NULL, *updated = NULL;
char buf[256];
lng usec = GDKusec();
str sch,tbl;
@@ -59,8 +59,9 @@ OPTemptybindImplementation(Client cntxt,
for( i=0; i< mb->stop; i++)
if( getFunctionId(getInstrPtr(mb,i)) == emptybindRef ||
getFunctionId(getInstrPtr(mb,i)) == emptybindidxRef)
extras += getInstrPtr(mb,i)->argc;
- if (extras == 0)
+ if (extras == 0){
goto wrapup;
+ }
// track of where 'emptybind' results are produced
// reserve space for maximal number of emptybat variables created
@@ -71,9 +72,10 @@ OPTemptybindImplementation(Client cntxt,
updated= (InstrPtr *) GDKzalloc(esize * sizeof(InstrPtr));
if( updated == 0){
GDKfree(empty);
- return 0;
+ throw(MAL,"optimizer.emptybind", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
+ old = mb->stmt;
if (newMalBlkStmt(mb, mb->ssize) < 0) {
GDKfree(empty);
GDKfree(updated);
diff --git a/monetdb5/optimizer/opt_garbageCollector.c
b/monetdb5/optimizer/opt_garbageCollector.c
--- a/monetdb5/optimizer/opt_garbageCollector.c
+++ b/monetdb5/optimizer/opt_garbageCollector.c
@@ -40,7 +40,7 @@ OPTgarbageCollectorImplementation(Client
(void) pci;
(void) stk;
if ( mb->inlineProp)
- return 0;
+ goto wrapup;
limit = mb->stop;
@@ -120,6 +120,7 @@ OPTgarbageCollectorImplementation(Client
msg = chkDeclarations(mb);
}
/* keep all actions taken as a post block comment */
+wrapup:
usec = GDKusec()- usec;
snprintf(buf,256,"%-20s actions=%2d time=" LLFMT "
usec","garbagecollector",actions, usec);
newComment(mb,buf);
diff --git a/monetdb5/optimizer/opt_generator.c
b/monetdb5/optimizer/opt_generator.c
--- a/monetdb5/optimizer/opt_generator.c
+++ b/monetdb5/optimizer/opt_generator.c
@@ -83,11 +83,14 @@ OPTgeneratorImplementation(Client cntxt,
p = old[i];
if ( getModuleId(p) == generatorRef && getFunctionId(p) ==
seriesRef)
needed = 1;
- if (p->token == RETURNsymbol || p->barrier == RETURNsymbol)
- return 0;
+ /* avoid error in table-udf-column-descriptor */
+ if (p->token == RETURNsymbol || p->barrier == RETURNsymbol){
+ old = NULL;
+ goto wrapup;
+ }
}
if (!needed)
- return 0;
+ goto wrapup;
series = (InstrPtr*) GDKzalloc(sizeof(InstrPtr) * mb->vtop);
if(series == NULL)
@@ -168,6 +171,7 @@ OPTgeneratorImplementation(Client cntxt,
// if (!msg)
// msg = chkDeclarations(mb);
/* keep all actions taken as a post block comment */
+wrapup:
usec = GDKusec()- usec;
snprintf(buf,256,"%-20s actions=%2d time=" LLFMT "
usec","generator",actions, usec);
newComment(mb,buf);
diff --git a/monetdb5/optimizer/opt_mask.c b/monetdb5/optimizer/opt_mask.c
--- a/monetdb5/optimizer/opt_mask.c
+++ b/monetdb5/optimizer/opt_mask.c
@@ -16,7 +16,7 @@ str
OPTmaskImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
int i, j, k, limit, slimit;
- InstrPtr p=0, q=0, r=0, *old= mb->stmt;
+ InstrPtr p=0, q=0, r=0, *old= NULL;
int actions = 0;
int *varused=0;
char buf[256];
@@ -28,17 +28,18 @@ OPTmaskImplementation(Client cntxt, MalB
(void) stk; /* to fool compilers */
if ( mb->inlineProp )
- return MAL_SUCCEED;
+ goto wrapup;
varused = GDKzalloc(2 * mb->vtop * sizeof(int));
if (varused == NULL)
- return MAL_SUCCEED;
+ goto wrapup;
limit = mb->stop;
slimit = mb->ssize;
+ old = mb->stmt;
if (newMalBlkStmt(mb, mb->ssize) < 0) {
- msg= createException(MAL,"optimizer.deadcode", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- goto wrapup;
+ GDKfree(varused);
+ throw(MAL,"optimizer.deadcode", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
// Consolidate the actual need for variables
@@ -94,13 +95,13 @@ OPTmaskImplementation(Client cntxt, MalB
msg = chkDeclarations(mb);
}
/* keep all actions taken as a post block comment */
+wrapup:
usec = GDKusec()- usec;
snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " usec","mask",actions,
usec);
newComment(mb,buf);
if( actions > 0)
addtoMalBlkHistory(mb);
-wrapup:
if(old) GDKfree(old);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list