Changeset: 9b77e58aa75e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9b77e58aa75e
Modified Files:
sql/server/rel_select.c
sql/test/bugs/Tests/zero_or_one_bug.stable.out
Branch: Jul2012
Log Message:
fixed bug 3093. When we repeat the projection of partial query before the
correlated subquery we need to use the aliases of this partial projection.
diffs (71 lines):
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -4744,7 +4744,7 @@ rel_select_exp(mvc *sql, sql_rel *rel, s
list *pre_prj = NULL;
list *outer_gbexps = NULL;
sql_rel *inner = NULL;
- int decorrelated = 0;
+ int decorrelated = 0, projection = 0;
assert(sn->s.token == SQL_SELECT);
if (!sn->selection)
@@ -4973,6 +4973,7 @@ rel_select_exp(mvc *sql, sql_rel *rel, s
sql_exp *e = rel_lastexp(sql, rel->r);
list *exps = list_dup(pre_prj, (fdup)NULL);
+ projection = 1;
exps = list_merge(exps, rel_projections(sql, outer,
NULL, 1, 1), (fdup)NULL);
rel = rel_project(sql->sa, rel, exps);
rel_project_add_exp(sql, rel, e);
@@ -4990,6 +4991,7 @@ rel_select_exp(mvc *sql, sql_rel *rel, s
if (outer && pre_prj) {
sql_rel *l;
node *n;
+ list *exps;
if (outer_gbexps) {
assert(is_groupby(rel->op));
@@ -5003,7 +5005,20 @@ rel_select_exp(mvc *sql, sql_rel *rel, s
rel->exps = outer_gbexps;
exps_fix_card(outer_gbexps, rel->card);
}
- l = rel = rel_project(sql->sa, rel, pre_prj);
+ if (projection) {
+ exps = new_exp_list(sql->sa);
+ for (n = pre_prj->h; n; n = n->next) {
+ sql_exp *pe = n->data;
+
+ if (!exp_name(pe))
+ exp_label(sql->sa, pe, ++sql->label);
+ pe = exp_column(sql->sa, exp_relname(pe),
exp_name(pe), exp_subtype(pe), exp_card(pe), has_nil(pe), is_intern(pe));
+ append(exps, pe);
+ }
+ } else {
+ exps = pre_prj;
+ }
+ l = rel = rel_project(sql->sa, rel, exps);
while(l && l->op != op_join)
l = l->l;
if (l && l->op == op_join && l->l == outer && ek.card !=
card_set)
diff --git a/sql/test/bugs/Tests/zero_or_one_bug.stable.out
b/sql/test/bugs/Tests/zero_or_one_bug.stable.out
--- a/sql/test/bugs/Tests/zero_or_one_bug.stable.out
+++ b/sql/test/bugs/Tests/zero_or_one_bug.stable.out
@@ -60,7 +60,7 @@ Ready.
#FROM my_table1 x
#;
% ., .my_table2 # table_name
-% isnull_not_isnull_id1, L2 # name
+% L3, L2 # name
% int, varchar # type
% 1, 0 # length
[ 1, NULL ]
@@ -78,7 +78,7 @@ Ready.
#FROM my_table1 x
#;
% ., .my_table2 # table_name
-% isnull_not_isnull_id1, my_col1 # name
+% L3, my_col1 # name
% int, varchar # type
% 1, 0 # length
[ 1, NULL ]
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list