Changeset: 6399077ff8a4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6399077ff8a4
Modified Files:
monetdb5/optimizer/opt_reorder.mx
sql/backends/monet5/sql_optimizer.c
sql/benchmarks/ATIS/Tests/select_group.stable.out
sql/benchmarks/viam/Tests/viam.stable.out
sql/server/rel_exp.c
sql/server/rel_optimizer.c
sql/server/rel_updates.c
sql/test/ADT2006/Tests/benesamo.stable.out
sql/test/ADT2006/Tests/bram.stable.out
sql/test/ADT2006/Tests/woud.stable.out
sql/test/BugDay_2005-12-19_2.9.3/Tests/delete_cascade.SF-1296395.stable.out
sql/test/BugTracker-2011/Tests/exists-select.Bug-2933.stable.out
sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err
sql/test/Dependencies/Tests/Dependencies.stable.out
sql/test/Tests/zones.stable.out
sql/test/bugs/Tests/rangejoin_optimize_bug.stable.out
sql/test/bugs/Tests/timestamp_comparison-bug-sf-1158581.stable.out
sql/test/leaks/Tests/check1.stable.out
sql/test/leaks/Tests/check2.stable.out
sql/test/leaks/Tests/check3.stable.out
sql/test/leaks/Tests/check4.stable.out
sql/test/leaks/Tests/check5.stable.out
sql/test/mapi/Tests/php_monetdb.stable.out
Branch: default
Log Message:
added a push_func down optimizer(s).
also fixed same leaks
diffs (truncated from 1882 to 300 lines):
diff --git a/monetdb5/optimizer/opt_reorder.mx
b/monetdb5/optimizer/opt_reorder.mx
--- a/monetdb5/optimizer/opt_reorder.mx
+++ b/monetdb5/optimizer/opt_reorder.mx
@@ -93,7 +93,8 @@ typedef struct{
} *Node, NodeRecord;
static Node *
-OPTdependencies(Client cntxt, MalBlkPtr mb, int **Ulist){
+OPTdependencies(Client cntxt, MalBlkPtr mb, int **Ulist)
+{
Node *list = (Node *) GDKzalloc(sizeof(Node) * mb->stop);
int *var = (int*) GDKzalloc(sizeof(int) * mb->vtop), *uselist = NULL;
int i,j,sz=0;
@@ -244,8 +245,10 @@ OPTreorderImplementation(Client cntxt, M
limit= mb->stop;
slimit= mb->ssize;
old = mb->stmt;
- if ( newMalBlkStmt(mb, mb->ssize) < 0)
+ if ( newMalBlkStmt(mb, mb->ssize) < 0) {
+ GDKfree(uselist);
return 0;
+ }
pushInstruction(mb,old[0]);
old[0]=0;
@@ -293,6 +296,7 @@ OPTreorderImplementation(Client cntxt, M
if (old[i])
freeInstruction(old[i]);
OPTremoveDep(dep, limit);
+ GDKfree(uselist);
GDKfree(old);
return 1;
}
diff --git a/sql/backends/monet5/sql_optimizer.c
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -508,6 +508,7 @@ setOptimizers(str optimizer)
{
int top=0;
char *base=0, *nxt, *nme, *pipe="notdefined";
+ char *pipedef = NULL;
/* do nothing if the pipe line is already set */
if ( optimizerpipe && optimizer && strcmp(optimizerpipe,optimizer) == 0
&& strcmp(optimizer,"off") )
@@ -517,21 +518,19 @@ setOptimizers(str optimizer)
if (optimizer == NULL || *optimizer == 0 ) {
pipe = GDKgetenv(minimalPipe);
if ( pipe == NULL)
- pipe= getPipeDefinition(optimizer);
+ pipedef = pipe= getPipeDefinition(optimizer);
if ( pipe )
optimizer = pipe;
- } else
- /* optimizers can be temporarily turned on/off */
- if(strcmp(optimizer,"off")==0 ) {
+ } else if(strcmp(optimizer,"off")==0 ) {
+ /* optimizers can be temporarily turned on/off */
if ( previouspipe )
return optimizerpipe;
previouspipe = optimizerpipe; /* give reference away */
optimizerpipe = NULL;
- pipe= getPipeDefinition(minimalPipe);
+ pipedef = pipe= getPipeDefinition(minimalPipe);
if ( pipe )
optimizer = pipe;
- } else
- if (strcmp(optimizer,"on")==0){
+ } else if (strcmp(optimizer,"on")==0){
if ( previouspipe == NULL)
return optimizerpipe;
optimizer= previouspipe;
@@ -540,7 +539,7 @@ setOptimizers(str optimizer)
/* the optimizer may be an environment alias */
pipe = GDKgetenv(optimizer);
if ( pipe == NULL)
- pipe= getPipeDefinition(optimizer);
+ pipedef = pipe= getPipeDefinition(optimizer);
if ( pipe )
optimizer = pipe;
}
@@ -549,7 +548,8 @@ setOptimizers(str optimizer)
need to also free the old value, making sure we don't first
free the value that maybe we want to strdup (in case
optimizer==optimizerpipe) */
- optimizer = GDKstrdup(optimizer);
+ if (!pipedef) /* pipedef is already strdupped */
+ optimizer = GDKstrdup(optimizer);
if (base) /* free old value of previouspipe */
GDKfree(base);
if (optimizerpipe)
diff --git a/sql/benchmarks/ATIS/Tests/select_group.stable.out
b/sql/benchmarks/ATIS/Tests/select_group.stable.out
--- a/sql/benchmarks/ATIS/Tests/select_group.stable.out
+++ b/sql/benchmarks/ATIS/Tests/select_group.stable.out
@@ -56,7 +56,7 @@ Ready.
[ "JULY", "SUNDAY" ]
#select day_name.day_name,flight_day.day_code,count(*) from
flight_day,day_name where day_name.day_code=flight_day.day_code group by
flight_day.day_code,day_name.day_name order by day_code;
% sys.day_name, sys.flight_day, sys.flight_day # table_name
-% day_name, day_code, L4 # name
+% day_name, day_code, L7 # name
% char, decimal, wrd # type
% 9, 2, 2 # length
[ "MONDAY", 1, 64 ]
@@ -67,57 +67,57 @@ Ready.
[ "SATURDAY", 6, 64 ]
[ "SUNDAY", 7, 64 ]
% sys.aircraft # table_name
-% L5 # name
+% L10 # name
% decimal # type
% 2 # length
[ 278 ]
% sys. # table_name
-% L6 # name
+% L11 # name
% double # type
% 24 # length
[ 2.059259259 ]
% sys. # table_name
-% L11 # name
+% L14 # name
% double # type
% 24 # length
[ 2.376068376 ]
% sys.aircraft, sys.aircraft, sys.aircraft # table_name
-% L14, L15, L16 # name
+% L20, L21, L22 # name
% wrd, int, int # type
% 2, 3, 6 # length
[ 94, 240, 165710 ]
% sys.flight, sys.flight # table_name
-% L17, L20 # name
+% L23, L24 # name
% int, int # type
% 6, 6 # length
[ 101908, 101908 ]
% sys.flight, sys.flight # table_name
-% L21, L22 # name
+% L25, L26 # name
% char, char # type
% 3, 3 # length
[ "ATL", "ATL" ]
% sys.aircraft # table_name
-% L23 # name
+% L27 # name
% wrd # type
% 2 # length
[ 50 ]
% sys.aircraft # table_name
-% L24 # name
+% L30 # name
% wrd # type
% 2 # length
[ 94 ]
% sys.flight # table_name
-% L25 # name
+% L31 # name
% wrd # type
% 3 # length
[ 279 ]
% sys.flight, sys.flight, sys. # table_name
-% from_airport, to_airport, L26 # name
+% from_airport, to_airport, L32 # name
% char, char, double # type
% 3, 3, 24 # length
[ "ATL", "BOS", 154.3684211 ]
% sys.ground_service, sys. # table_name
-% city_code, L31 # name
+% city_code, L35 # name
% char, double # type
% 4, 24 # length
[ "MATL", 9 ]
@@ -132,7 +132,7 @@ Ready.
[ "WWAS", 12 ]
[ "BBWI", 5 ]
% sys.ground_service, sys.ground_service # table_name
-% L34, city_code # name
+% L41, city_code # name
% wrd, char # type
% 1, 4 # length
[ 3, "MATL" ]
@@ -155,7 +155,7 @@ Ready.
[ "PROPELLER", 16 ]
[ "TURBOPROP", 32 ]
% sys.aircraft, sys.aircraft # table_name
-% category, L37 # name
+% category, L45 # name
% char, wrd # type
% 10, 2 # length
[ "JET", 15 ]
diff --git a/sql/benchmarks/viam/Tests/viam.stable.out
b/sql/benchmarks/viam/Tests/viam.stable.out
--- a/sql/benchmarks/viam/Tests/viam.stable.out
+++ b/sql/benchmarks/viam/Tests/viam.stable.out
@@ -30,15 +30,6 @@ Ready.
% 2, 24 # length
[ 0, 0.3069530136 ]
[ 10, 0.3421598259 ]
-[ 1, 0.3113380553 ]
-[ 2, 0.3158491548 ]
-[ 3, 0.3202903953 ]
-[ 4, 0.3248978475 ]
-[ 5, 0.3292224557 ]
-[ 6, 0.3330400058 ]
-[ 7, 0.3366659278 ]
-[ 8, 0.3393862282 ]
-[ 9, 0.3415804093 ]
[ 11, 0.3414150065 ]
[ 12, 0.3382639558 ]
[ 13, 0.3357380414 ]
@@ -48,22 +39,22 @@ Ready.
[ 17, 0.3240110451 ]
[ 18, 0.3202647068 ]
[ 19, 0.3168082588 ]
+[ 1, 0.3113380553 ]
[ 20, 0.3158073029 ]
[ 21, 0.3154659088 ]
[ 22, 0.3139201927 ]
[ 23, 0.3134433635 ]
[ 24, 0.3130393499 ]
+[ 2, 0.3158491548 ]
+[ 3, 0.3202903953 ]
+[ 4, 0.3248978475 ]
+[ 5, 0.3292224557 ]
+[ 6, 0.3330400058 ]
+[ 7, 0.3366659278 ]
+[ 8, 0.3393862282 ]
+[ 9, 0.3415804093 ]
[ 25, 0.3135247271 ]
[ 35, 0.3000286778 ]
-[ 26, 0.3128866098 ]
-[ 27, 0.3136826694 ]
-[ 28, 0.3143216616 ]
-[ 29, 0.3153907247 ]
-[ 30, 0.3141233276 ]
-[ 31, 0.3113860356 ]
-[ 32, 0.3090121901 ]
-[ 33, 0.3060122738 ]
-[ 34, 0.3028020651 ]
[ 36, 0.296002269 ]
[ 37, 0.290913483 ]
[ 38, 0.2835143166 ]
@@ -73,18 +64,22 @@ Ready.
[ 42, 0.2679928431 ]
[ 43, 0.2675193019 ]
[ 44, 0.2673059053 ]
+[ 26, 0.3128866098 ]
[ 45, 0.2655931324 ]
[ 46, 0.2607816973 ]
[ 47, 0.2583583932 ]
[ 48, 0.2567394975 ]
[ 49, 0.2519025657 ]
+[ 27, 0.3136826694 ]
+[ 28, 0.3143216616 ]
+[ 29, 0.3153907247 ]
+[ 30, 0.3141233276 ]
+[ 31, 0.3113860356 ]
+[ 32, 0.3090121901 ]
+[ 33, 0.3060122738 ]
+[ 34, 0.3028020651 ]
[ 50, 0.2493345457 ]
[ 60, 0.2834349046 ]
-[ 51, 0.2496920232 ]
-[ 52, 0.2486809716 ]
-[ 53, 0.2519123037 ]
-[ 54, 0.2604823805 ]
-[ 55, 0.271042367 ]
[ 61, 0.2985857118 ]
[ 62, 0.3154686896 ]
[ 63, 0.3096781646 ]
@@ -94,11 +89,16 @@ Ready.
[ 67, 0.2983151227 ]
[ 68, 0.3048942813 ]
[ 69, 0.315040494 ]
+[ 51, 0.2496920232 ]
[ 70, 0.3288443923 ]
[ 71, 0.3404737413 ]
[ 72, 0.3572909931 ]
[ 73, 0.3603464961 ]
[ 74, 0.3620469868 ]
+[ 52, 0.2486809716 ]
+[ 53, 0.2519123037 ]
+[ 54, 0.2604823805 ]
+[ 55, 0.271042367 ]
# 19:17:39 >
# 19:17:39 > Done.
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -365,7 +365,6 @@ exp_label(sql_allocator *sa, sql_exp *e,
char name[16], *nme;
nme = number2name(name, 16, nr);
- assert(e->name == NULL);
e->name = sa_strdup(sa, nme);
return e;
}
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -832,12 +832,12 @@ order_joins(mvc *sql, list *rels, list *
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list