Changeset: f33773f721a8 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f33773f721a8
Modified Files:
sql/backends/monet5/sql_gencode.mx
sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
sql/benchmarks/tpch/LOCKED/Tests/02.stable.out
sql/benchmarks/tpch/LOCKED/Tests/17.stable.out
sql/benchmarks/tpch/Tests/01-22.stable.out
sql/benchmarks/tpch/Tests/02.stable.out
sql/benchmarks/tpch/Tests/17.stable.out
sql/server/rel_optimizer.c
sql/server/rel_prop.c
sql/server/rel_prop.h
sql/server/rel_select.c
sql/storage/bat/bat_storage.c
sql/test/BugDay_2005-10-06_2.9.3/Tests/create_view_with_check_options.SF-1314951.stable.out
sql/test/BugDay_2005-10-06_2.9.3/Tests/view_on_deleted_table.SF-938583.stable.out
sql/test/BugTracker-2008/Tests/view_reply_incorrect.SF-2075097.stable.out
sql/test/BugTracker-2009/Tests/cardinality_of_expression_is_wrong.SF-2581617.stable.out
sql/test/BugTracker-2009/Tests/lookup_column_name_bug_1.SF-2654300.stable.out
sql/test/BugTracker-2009/Tests/lookup_column_name_bug_2.SF-2656762.stable.out
sql/test/BugTracker-2010/Tests/select-view-key.Bug-2673.stable.out
sql/test/BugTracker-2010/Tests/with_row_number_crash.Bug-2631.stable.out
sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.stable.out
sql/test/BugTracker-2011/Tests/nested_select.Bug-2801.stable.out
sql/test/BugTracker/Tests/nested_views_algebra_version.SF-1993765.stable.out
sql/test/BugTracker/Tests/variable_stack_crash.SF-1711251-2.stable.out
sql/test/BugTracker/Tests/variable_stack_crash.SF-1711251.stable.out
sql/test/BugTracker/Tests/with_only_once.SF-1720293.stable.out
sql/test/Tests/create_in_schema.stable.out
sql/test/mserver5-sql-readonly/Tests/mserver5-sql-readonly-view.stable.out
sql/test/osm/Tests/exp_name_bug.stable.out
sql/test/xquery/Tests/q01.stable.out
Branch: Apr2011
Log Message:
fix push select down.
backported number of fixes from default branch (may give conflicts.(shouldn't
;-(
diffs (truncated from 1021 to 300 lines):
diff --git a/sql/backends/monet5/sql_gencode.mx
b/sql/backends/monet5/sql_gencode.mx
--- a/sql/backends/monet5/sql_gencode.mx
+++ b/sql/backends/monet5/sql_gencode.mx
@@ -1629,7 +1629,7 @@
char *n = (s->type==st_append_col)?appendRef:updateRef;
if (s->type == st_append_col && s->flag) { /* fake
append */
- sql->mvc_var = s->nr = r;
+ s->nr = r;
} else {
q = newStmt2(mb, sqlRef, n);
q = pushArgument(mb, q, sql->mvc_var);
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
@@ -59,7 +59,7 @@
% rewrite, count # name
% clob, int # type
% 7, 1 # length
-[ "joinidx", 7 ]
+[ "joinidx", 6 ]
# 11:48:05 >
# 11:48:05 > Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb
--host=localhost --port=35781
@@ -855,7 +855,7 @@
% rewrite, count # name
% clob, int # type
% 7, 1 # length
-[ "joinidx", 1 ]
+[ "joinidx", 0 ]
# 11:48:06 >
# 11:48:06 > Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb
--host=localhost --port=35781
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/02.stable.out
b/sql/benchmarks/tpch/LOCKED/Tests/02.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/02.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/02.stable.out
@@ -37,7 +37,7 @@
% rewrite, count # name
% clob, int # type
% 7, 1 # length
-[ "joinidx", 7 ]
+[ "joinidx", 6 ]
# 09:17:12 >
# 09:17:12 > Done.
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/17.stable.out
b/sql/benchmarks/tpch/LOCKED/Tests/17.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/17.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/17.stable.out
@@ -33,7 +33,7 @@
% rewrite, count # name
% clob, int # type
% 7, 1 # length
-[ "joinidx", 1 ]
+[ "joinidx", 0 ]
# 09:17:19 >
# 09:17:19 > Done.
diff --git a/sql/benchmarks/tpch/Tests/01-22.stable.out
b/sql/benchmarks/tpch/Tests/01-22.stable.out
--- a/sql/benchmarks/tpch/Tests/01-22.stable.out
+++ b/sql/benchmarks/tpch/Tests/01-22.stable.out
@@ -59,7 +59,7 @@
% rewrite, count # name
% clob, int # type
% 7, 1 # length
-[ "joinidx", 7 ]
+[ "joinidx", 6 ]
# 11:48:05 >
# 11:48:05 > Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb
--host=localhost --port=35781
@@ -855,7 +855,7 @@
% rewrite, count # name
% clob, int # type
% 7, 1 # length
-[ "joinidx", 1 ]
+[ "joinidx", 0 ]
# 11:48:06 >
# 11:48:06 > Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb
--host=localhost --port=35781
diff --git a/sql/benchmarks/tpch/Tests/02.stable.out
b/sql/benchmarks/tpch/Tests/02.stable.out
--- a/sql/benchmarks/tpch/Tests/02.stable.out
+++ b/sql/benchmarks/tpch/Tests/02.stable.out
@@ -37,7 +37,7 @@
% rewrite, count # name
% clob, int # type
% 7, 1 # length
-[ "joinidx", 7 ]
+[ "joinidx", 6 ]
# 09:17:12 >
# 09:17:12 > Done.
diff --git a/sql/benchmarks/tpch/Tests/17.stable.out
b/sql/benchmarks/tpch/Tests/17.stable.out
--- a/sql/benchmarks/tpch/Tests/17.stable.out
+++ b/sql/benchmarks/tpch/Tests/17.stable.out
@@ -33,7 +33,7 @@
% rewrite, count # name
% clob, int # type
% 7, 1 # length
-[ "joinidx", 1 ]
+[ "joinidx", 0 ]
# 09:17:19 >
# 09:17:19 > Done.
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
@@ -211,7 +211,7 @@
switch (rel->op) {
case op_basetable:
case op_table:
- rel->p = prop_create(PROP_COUNT, rel->p);
+ rel->p = prop_create(sql->sa, PROP_COUNT, rel->p);
break;
case op_join:
join_properties(rel);
@@ -502,6 +502,7 @@
switch(r->op) {
case op_basetable:
return r;
+ case op_project:
case op_select:
return find_basetable(r->l);
default:
@@ -606,7 +607,7 @@
je->l = je->r;
je->r = s;
}
- je->p = p = prop_create(PROP_JOINIDX, je->p);
+ je->p = p = prop_create(sa, PROP_JOINIDX,
je->p);
p->value = idx;
}
lcols->destroy = NULL;
@@ -963,30 +964,29 @@
list *l = exps_rename(sql, e->l, f, t);
list *r = exps_rename(sql, e->r, f, t);
if (l && r)
- return exp_or(sql->sa, l,r);
+ ne = exp_or(sql->sa, l,r);
} else if (e->flag == cmp_in || e->flag == cmp_notin) {
sql_exp *l = exp_rename(sql, e->l, f, t);
list *r = exps_rename(sql, e->r, f, t);
if (l && r)
- return exp_in(sql->sa, l, r, e->flag);
+ ne = exp_in(sql->sa, l, r, e->flag);
} else {
l = exp_rename(sql, e->l, f, t);
r = exp_rename(sql, e->r, f, t);
if (e->f) {
r2 = exp_rename(sql, e->f, f, t);
if (l && r && r2)
- return exp_compare2(sql->sa, l, r, r2,
e->flag);
+ ne = exp_compare2(sql->sa, l, r, r2,
e->flag);
} else if (l && r) {
- return exp_compare(sql->sa, l, r, e->flag);
+ ne = exp_compare(sql->sa, l, r, e->flag);
}
}
- return NULL;
+ break;
case e_convert:
l = exp_rename(sql, e->l, f, t);
if (l)
- return exp_convert(sql->sa, l, exp_fromtype(e),
exp_totype(e));
- assert(0);
- return NULL;
+ ne = exp_convert(sql->sa, l, exp_fromtype(e),
exp_totype(e));
+ break;
case e_aggr:
case e_func: {
list *l = e->l, *nl = NULL;
@@ -999,15 +999,17 @@
return NULL;
}
if (e->type == e_func)
- return exp_op(sql->sa, nl, e->f);
+ ne = exp_op(sql->sa, nl, e->f);
else
- return exp_aggr(sql->sa, nl, e->f, need_distinct(e),
need_no_nil(e), e->card, has_nil(e));
+ ne = exp_aggr(sql->sa, nl, e->f, need_distinct(e),
need_no_nil(e), e->card, has_nil(e));
+ break;
}
case e_atom:
return e;
}
- assert(0);
- return NULL;
+ if (ne && e->p)
+ ne->p = prop_copy(sql->sa, e->p);
+ return ne;
}
/* push the expression down, ie translate colum references
@@ -1022,7 +1024,7 @@
node *n;
list *nl = new_exp_list(sql->sa);
- for(n = exps->h; n; n=n->next) {
+ for(n = exps->h; n; n = n->next) {
sql_exp *arg = n->data;
arg = _exp_push_down(sql, arg, f, t);
@@ -1041,6 +1043,11 @@
switch(e->type) {
case e_column:
+ if (is_union(f->op)) {
+ int p = list_position(f->exps, rel_find_exp(f, e));
+
+ return list_fetch(t->exps, p);
+ }
if (e->l) {
ne = rel_bind_column2(sql, f, e->l, e->r, 0);
/* if relation name matches expressions relation name,
find column based on column name alone */
@@ -1052,6 +1059,8 @@
e = NULL;
if (ne->name && ne->rname)
e = rel_bind_column2(sql, t, ne->rname, ne->name, 0);
+ if (!e && ne->name && !ne->rname)
+ e = rel_bind_column(sql, t, ne->name, 0);
if (!e && ne->name && ne->r && ne->l)
e = rel_bind_column2(sql, t, ne->l, ne->r, 0);
if (!e && ne->r && !ne->l)
@@ -1905,12 +1914,12 @@
* groupby ( [ union all( groupby( a, [gbe], [ count, sum] ), [ groupby(
b, [gbe], [ count, sum] )) , [gbe], [sum, sum] )
*/
static sql_rel *
-rel_push_aggr(int *changes, mvc *sql, sql_rel *rel)
+rel_push_aggr_down(int *changes, mvc *sql, sql_rel *rel)
{
sql_rel *u = rel->l;
/* TODO disjoint partitions don't need the last group by */
- if (rel->op == op_groupby && /*(!rel->r || list_length(rel->r) == 0)
&&*/
+ if (rel->op == op_groupby &&
u && is_union(u->op) && !need_distinct(u) && u->exps) {
sql_rel *g = rel;
sql_rel *l = u->l;
@@ -1918,9 +1927,9 @@
list *lexps, *rexps;
if (!is_project(l->op))
- u->l = l = rel_project(sql->sa, l, rel_projections(sql,
l, NULL, 1, 1));
+ u->l = l = rel_project(sql->sa, l, rel_projections(sql,
l, NULL, 1, 0));
if (!is_project(r->op))
- u->r = r = rel_project(sql->sa, r, rel_projections(sql,
r, NULL, 1, 1));
+ u->r = r = rel_project(sql->sa, r, rel_projections(sql,
r, NULL, 1, 0));
lexps = l->exps;
rexps = r->exps;
/* make sure we don't create group by on group by's */
@@ -2183,12 +2192,12 @@
sql_exp *e = n->data, *ne = NULL;
if (e->type == e_cmp) {
int err = 0;
- ne = exp_push_down(sql, e, r, sl);
+ ne = exp_push_down(sql, e, r, sl->l);
if (ne && ne != e) {
rel_select_add_exp(sl, ne);
} else
err = 1;
- ne = exp_push_down(sql, e, r, sr);
+ ne = exp_push_down(sql, e, r, sr->l);
if (ne && ne != e) {
rel_select_add_exp(sr, ne);
} else
@@ -2990,7 +2999,8 @@
for (n = l->h; n; n = n->next) {
sql_exp *e = n->data;
- e->used = 1;
+ if (e)
+ e->used = 1;
}
}
}
@@ -3094,6 +3104,7 @@
}
static sql_rel * rel_dce_sub(mvc *sql, sql_rel *rel);
+static sql_rel * rel_dce(mvc *sql, sql_rel *rel);
static sql_rel *
rel_remove_unused(mvc *sql, sql_rel *rel)
@@ -3102,7 +3113,12 @@
return rel;
switch(rel->op) {
- case op_basetable:
+ case op_basetable: {
+ sql_table *t = rel->l;
+
+ if (isMergeTable(t))
+ return rel;
+ }
case op_table:
if (rel->exps) {
node *n;
@@ -3167,9 +3183,6 @@
return rel;
}
-static sql_rel * rel_dce(mvc *sql, sql_rel *rel);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list