Update of /cvsroot/monetdb/sql/src/backends/monet5
In directory
sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv923/src/backends/monet5
Modified Files:
sql_optimizer.mx
Log Message:
propagated changes of Thursday Apr 08 2010 - Monday Apr 12 2010
from the Feb2010 branch to the development trunk
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010/04/08 - stmane: src/backends/monet5/sql_optimizer.mx,1.243.2.1
- fixed comment
- fixed off-by-one bug
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010/04/08 - stmane: src/backends/monet5/sql_optimizer.mx,1.243.2.2
undo my previous off-by-one "fix";
though not too obvious, the code was indeed correct
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010/04/08 - stmane: src/backends/monet5/sql_optimizer.mx,1.243.2.3
At a third glance, there was a minor issue after all:
With an optimizer pipeling consisting of more than 255 optimizers
--- not that I would expect that to occur in practice ---
the code in setOptimizers() silently ignored all optimizers
beyond the 255th, as the respective error message would never
be triggered.
Just to be sure, we now indeed raise an exception and
fall back to the default pipeline (as the original code suggested)
in case we encounter a pipeline of more than 255 optimizers.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010/04/08 - stmane: src/backends/monet5/sql_optimizer.mx,1.243.2.4
fixing ID: 2983773 "SQL: minimal optimizer pipe unstable"
https://sourceforge.net/tracker/index.php?func=detail&aid=2983773&group_id=56967&atid=482468
In the code of and related to setOptimizers(),
make sure we use GDKstrdup() & GDKfree() only when indeed required
and thus not only prevent double free's
but also avoid memory leakage.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Index: sql_optimizer.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_optimizer.mx,v
retrieving revision 1.245
retrieving revision 1.246
diff -u -d -r1.245 -r1.246
--- sql_optimizer.mx 14 Mar 2010 08:25:48 -0000 1.245
+++ sql_optimizer.mx 12 Apr 2010 09:20:51 -0000 1.246
@@ -539,19 +539,19 @@
/* catch minimal pipes */
if (optimizer == NULL || *optimizer == 0 )
- optimizer= GDKstrdup(minimalPlan);
+ optimizer= minimalPlan;
else
/* optimizers can be temporarily turned on/off */
if(strcmp(optimizer,"off")==0){
if( previouspipe == NULL)
previouspipe = optimizerpipe;
- else return GDKstrdup(optimizerpipe);
- optimizer= GDKstrdup(minimalPlan);
+ else return optimizerpipe;
+ optimizer= minimalPlan;
} else
if (strcmp(optimizer,"on")==0){
if (previouspipe)
optimizer= previouspipe;
- else return GDKstrdup(optimizerpipe);
+ else return optimizerpipe;
previouspipe = 0;
} else {
/* the optimizer may be an environment alias */
@@ -563,7 +563,7 @@
optimizerpipe= optimizer;
base = optimizer = GDKstrdup(optimizer);
- /* An optimizer pipe is a semicolon separated list of names */
+ /* An optimizer pipe is a comma separated list of names */
while (optimizer && *optimizer ) {
nxt = strchr(optimizer,',');
if (nxt){
@@ -572,23 +572,25 @@
}
if ((nme = putName(optimizer,strlen(optimizer))) == 0)
showException(SQL,"optimizer"," '%s' pipeline does not
exist\n",optimizer);
- else if (top<255)
- optimizers[top++] = nme;
+ else if (top<256)
+ optimizers[top++] = nme;
+ else
+ break;
optimizer = nxt;
}
- optimizers[top] = 0;
GDKfree(base);
- if (top <= 1 && pipe == NULL){
- showException(SQL,"optimizer","Optimizer '%s' pipeline does not
exist, use default pipe instead\n", optimizerpipe?optimizerpipe:"undefined");
- setOptimizers("default_pipe");
- return GDKstrdup("default_pipe");
- }else
if (top == 256){
showException(SQL,"optimizer","Too many optimizer steps, use
default pipe instead\n");
setOptimizers("default_pipe");
- return GDKstrdup("default_pipe");
+ return "default_pipe";
}
- return GDKstrdup(optimizerpipe);
+ optimizers[top] = 0;
+ if (top <= 1 && pipe == NULL){
+ showException(SQL,"optimizer","Optimizer '%s' pipeline does not
exist, use default pipe instead\n", optimizerpipe?optimizerpipe:"undefined");
+ setOptimizers("default_pipe");
+ return "default_pipe";
+ }
+ return optimizerpipe;
}
static void
@@ -639,7 +641,7 @@
return;
}
optimizer = stack_get_string(be->mvc, "optimizer");
- stack_set_var(be->mvc, "optimizer", VALset(&src, TYPE_str,
setOptimizers(optimizer)));
+ stack_set_var(be->mvc, "optimizer", VALset(&src, TYPE_str,
GDKstrdup(setOptimizers(optimizer))));
addOptimizers(c,mb);
SQLgetStatistics(c,(mvc *) c->state[MAL_SCENARIO_OPTIMIZE],mb);
if ( m->emod & mod_debug )
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins