Changeset: 054504135056 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=054504135056
Modified Files:
sql/server/rel_exp.c
sql/server/rel_select.c
sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.stable.out
sql/test/BugTracker-2011/Tests/exists-select.Bug-2933.stable.out
sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out
Branch: Feb2013
Log Message:
fixed (again) bug exists-select.Bug-2933.stable.out
diffs (truncated from 336 to 300 lines):
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
@@ -494,6 +494,7 @@ exp_label(sql_allocator *sa, sql_exp *e,
nme = number2name(name, 16, nr);
e->name = sa_strdup(sa, nme);
+ e->rname = sa_strdup(sa, nme);
return e;
}
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
@@ -163,14 +163,14 @@ rel_label( mvc *sql, sql_rel *r)
}
static sql_exp *
-exp_alias_or_copy( mvc *sql, char *tname, char *cname, sql_rel *orel, sql_exp
*old, int settname)
+exp_alias_or_copy( mvc *sql, char *tname, char *cname, sql_rel *orel, sql_exp
*old)
{
sql_exp *ne = NULL;
- if (settname && !tname)
+ if (!tname)
tname = old->rname;
- if (settname && !tname && old->type == e_column)
+ if (!tname && old->type == e_column)
tname = old->l;
if (!cname && exp_name(old) && exp_name(old)[0] == 'L') {
@@ -242,9 +242,9 @@ rel_table_projections( mvc *sql, sql_rel
sql_exp *e = en->data;
/* first check alias */
if (!is_intern(e) && e->rname &&
strcmp(e->rname, tname) == 0)
- append(exps, exp_alias_or_copy(sql,
tname, exp_name(e), rel, e, 1));
+ append(exps, exp_alias_or_copy(sql,
tname, exp_name(e), rel, e));
if (!is_intern(e) && !e->rname && e->l &&
strcmp(e->l, tname) == 0)
- append(exps, exp_alias_or_copy(sql,
tname, exp_name(e), rel, e, 1));
+ append(exps, exp_alias_or_copy(sql,
tname, exp_name(e), rel, e));
}
if (exps && list_length(exps))
return exps;
@@ -368,7 +368,7 @@ rel_projections(mvc *sql, sql_rel *rel,
for (en = rel->exps->h; en; en = en->next) {
sql_exp *e = en->data;
if (intern || !is_intern(e)) {
- append(exps, e = exp_alias_or_copy(sql,
tname, exp_name(e), rel, e, settname));
+ append(exps, e = exp_alias_or_copy(sql,
tname, exp_name(e), rel, e));
if (!settname) /* noname use alias */
exp_setrelname(sql->sa, e,
label);
@@ -796,7 +796,7 @@ rel_lastexp(mvc *sql, sql_rel *rel )
rel = rel_parent(rel);
assert(list_length(rel->exps));
if (rel->op == op_project)
- return exp_alias_or_copy(sql, NULL, NULL, rel,
rel->exps->t->data, 1);
+ return exp_alias_or_copy(sql, NULL, NULL, rel,
rel->exps->t->data);
assert(is_project(rel->op));
e = rel->exps->t->data;
return exp_column(sql->sa, e->rname, e->name, exp_subtype(e), e->card,
has_nil(e), is_intern(e));
@@ -1403,7 +1403,7 @@ rel_bind_column( mvc *sql, sql_rel *rel,
if ((is_project(rel->op) || is_base(rel->op)) && rel->exps) {
sql_exp *e = exps_bind_column(rel->exps, cname, NULL);
if (e)
- return exp_alias_or_copy(sql, e->rname, cname, rel, e,
1);
+ return exp_alias_or_copy(sql, e->rname, cname, rel, e);
}
return NULL;
}
@@ -1420,7 +1420,7 @@ rel_bind_column2( mvc *sql, sql_rel *rel
if (rel->exps && (is_project(rel->op) || is_base(rel->op))) {
sql_exp *e = exps_bind_column2(rel->exps, tname, cname);
if (e)
- return exp_alias_or_copy(sql, tname, cname, rel, e, 1);
+ return exp_alias_or_copy(sql, tname, cname, rel, e);
}
if (is_project(rel->op) && rel->l) {
if (!is_processed(rel))
@@ -2837,12 +2837,28 @@ rel_find_identity(mvc *sql, sql_rel *r,
ne = rel_find_identity(sql, r->l, e);
if (ne && r->exps) { /* find exp pointing to ne */
+ /* first find in group by list */
+ if (is_groupby(r->op) && r->r) {
+ list *l = r->r;
+ for (n = l->h; n; n = n->next) {
+ sql_exp *re = n->data;
+
+ if (ne->rname && re->l &&
strcmp(ne->rname, re->l) == 0 && strcmp(ne->name, re->r) == 0) {
+ ne = re;
+ break;
+ }
+ if (!ne->rname && !re->l &&
strcmp(ne->name, re->r) == 0) {
+ ne = re;
+ break;
+ }
+ }
+ }
for (n = r->exps->h; n; n = n->next) {
sql_exp *re = n->data;
- if (e->rname && re->l && strcmp(e->rname,
re->l) == 0 && strcmp(e->name, re->r) == 0)
+ if (ne->rname && re->l && strcmp(ne->rname,
re->l) == 0 && strcmp(ne->name, re->r) == 0)
return re;
- if (!e->rname && !re->l && strcmp(e->name,
re->r) == 0)
+ if (!ne->rname && !re->l && strcmp(ne->name,
re->r) == 0)
return re;
}
} else if (r->exps) {
@@ -3130,6 +3146,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
/* find expression back */
re = rel_find_identity(sql, r, le );
+ re = exp_alias_or_copy(sql, NULL, NULL, r, re);
if (!le || !re)
return NULL;
@@ -3779,7 +3796,7 @@ static sql_exp *
if (gr && e && is_project(gr->op) && !is_set(gr->op) && e->type
!= e_column) {
rel_project_add_exp(sql, gr, e);
- e = exp_alias_or_copy(sql, exp_relname(e), exp_name(e),
gr->l, e, 0);
+ e = exp_alias_or_copy(sql, exp_relname(e), exp_name(e),
gr->l, e);
}
if (!e)
return NULL;
diff --git
a/sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.stable.out
b/sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.stable.out
---
a/sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.stable.out
+++
b/sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.stable.out
@@ -70,7 +70,7 @@ project (
| | distinct project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as L.a ]
+| ) [ t2606a.a as L.a ]
) [ L.a ] [ L.a ASC ]
#select * from t2606a union select * from t2606b order by a;
% .L # table_name
@@ -99,7 +99,7 @@ project (
| | distinct project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as L.a ]
+| ) [ t2606a.a as L.a ]
) [ L.a ] [ L.a ASC ]
#( select * from t2606a union select * from t2606b ) order by a;
% .L # table_name
@@ -128,7 +128,7 @@ project (
| | distinct project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as L.a ]
+| ) [ t2606a.a as L.a ]
) [ L.a ] [ L.a ASC ]
#( select * from t2606a ) union ( select * from t2606b ) order by a;
% .L # table_name
@@ -157,7 +157,7 @@ project (
| | project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as L.a ]
+| ) [ t2606a.a as L.a ]
) [ L.a ] [ L.a ASC ]
#select * from t2606a except select * from t2606b order by a;
% sys.L # table_name
@@ -180,7 +180,7 @@ project (
| | project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as L.a ]
+| ) [ t2606a.a as L.a ]
) [ L.a ] [ L.a ASC ]
#( select * from t2606a except select * from t2606b ) order by a;
% sys.L # table_name
@@ -203,7 +203,7 @@ project (
| | project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as L.a ]
+| ) [ t2606a.a as L.a ]
) [ L.a ] [ L.a ASC ]
#( select * from t2606a ) except ( select * from t2606b ) order by a;
% sys.L # table_name
@@ -226,7 +226,7 @@ project (
| | project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as L.a ]
+| ) [ t2606a.a as L.a ]
) [ L.a ] [ L.a ASC ]
#select * from t2606a intersect select * from t2606b order by a;
% sys.L # table_name
@@ -249,7 +249,7 @@ project (
| | project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as L.a ]
+| ) [ t2606a.a as L.a ]
) [ L.a ] [ L.a ASC ]
#( select * from t2606a intersect select * from t2606b ) order by a;
% sys.L # table_name
@@ -272,7 +272,7 @@ project (
| | project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as L.a ]
+| ) [ t2606a.a as L.a ]
) [ L.a ] [ L.a ASC ]
#( select * from t2606a ) intersect ( select * from t2606b ) order by a;
% sys.L # table_name
@@ -295,7 +295,7 @@ project (
| | distinct project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as t.a ]
+| ) [ t2606a.a as t.a ]
) [ t.a ] [ t.a ASC ]
#select * from (select * from t2606a union select * from t2606b) as t order by
a;
% .t # table_name
@@ -324,7 +324,7 @@ project (
| | project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as t.a ]
+| ) [ t2606a.a as t.a ]
) [ t.a ] [ t.a ASC ]
#select * from (select * from t2606a except select * from t2606b) as t order
by a;
% sys.t # table_name
@@ -347,7 +347,7 @@ project (
| | project (
| | | table(sys.t2606b) [ t2606b.a, t2606b.%TID% NOT NULL ] COUNT
| | ) [ t2606b.a ]
-| ) [ a as t.a ]
+| ) [ t2606a.a as t.a ]
) [ t.a ] [ t.a ASC ]
#select * from (select * from t2606a intersect select * from t2606b) as t
order by a;
% sys.t # table_name
diff --git a/sql/test/BugTracker-2011/Tests/exists-select.Bug-2933.stable.out
b/sql/test/BugTracker-2011/Tests/exists-select.Bug-2933.stable.out
--- a/sql/test/BugTracker-2011/Tests/exists-select.Bug-2933.stable.out
+++ b/sql/test/BugTracker-2011/Tests/exists-select.Bug-2933.stable.out
@@ -61,7 +61,7 @@ Ready.
# EXISTS (SELECT pre FROM _rank2933 AS ancestor WHERE
# ancestor.pre < _rank1.pre AND _rank1.pre < ancestor.post AND
# ancestor.pre < _rank2.pre AND _rank2.pre < ancestor.post);
-% sys._rank1 # table_name
+% sys.L3 # table_name
% L3 # name
% wrd # type
% 1 # length
@@ -77,7 +77,7 @@ Ready.
# ancestor.pre < _rank1.pre AND _rank1.pre < ancestor.post
# INTERSECT SELECT pre FROM _rank2933 AS ancestor WHERE
# ancestor.pre < _rank2.pre AND _rank2.pre < ancestor.post);
-% sys._rank1 # table_name
+% sys.L5 # table_name
% L5 # name
% wrd # type
% 1 # length
@@ -85,7 +85,7 @@ Ready.
#DROP TABLE _rank2933;
#SELECT 123 AS dummy1 FROM tables n WHERE EXISTS ( SELECT 456 AS dummy2 FROM
# (SELECT * FROM columns) nnn WHERE n.id > 0 );
-% . # table_name
+% .L2 # table_name
% dummy1 # name
% tinyint # type
% 3 # length
diff --git
a/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
b/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
---
a/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
+++
b/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
@@ -168,9 +168,9 @@ function user.s4_1(A0:str):void;
X_14 := sql.subdelta(X_52,X_3,X_9,X_53,X_54);
X_15 := sql.projectdelta(X_14,X_6,X_9,r1_9,X_12);
X_16 := sql.bind(X_2,"sys","functions","func",0);
- (X_18,r1_35) := sql.bind(X_2,"sys","functions","func",2);
+ (X_18,r1_36) := sql.bind(X_2,"sys","functions","func",2);
X_22 := sql.bind(X_2,"sys","functions","func",1);
- X_23 := sql.projectdelta(X_14,X_16,X_18,r1_35,X_22);
+ X_23 := sql.projectdelta(X_14,X_16,X_18,r1_36,X_22);
X_24 := sql.resultSet(2,1,X_15);
sql.rsColumn(X_24,"sys.functions","name","varchar",256,0,X_15);
sql.rsColumn(X_24,"sys.functions","func","varchar",8196,0,X_23);
@@ -196,9 +196,9 @@ function user.s5_1(A0:str):void;
X_14 := sql.subdelta(X_53,X_3,X_9,X_54,X_55);
X_15 := sql.projectdelta(X_14,X_6,X_9,r1_9,X_12);
X_16 := sql.bind(X_2,"sys","functions","func",0);
- (X_18,r1_35) := sql.bind(X_2,"sys","functions","func",2);
+ (X_18,r1_36) := sql.bind(X_2,"sys","functions","func",2);
X_22 := sql.bind(X_2,"sys","functions","func",1);
- X_23 := sql.projectdelta(X_14,X_16,X_18,r1_35,X_22);
+ X_23 := sql.projectdelta(X_14,X_16,X_18,r1_36,X_22);
X_24 := sql.resultSet(2,1,X_15);
sql.rsColumn(X_24,"sys.functions","name","varchar",256,0,X_15);
sql.rsColumn(X_24,"sys.functions","func","varchar",8196,0,X_23);
@@ -224,9 +224,9 @@ function user.s6_1(A0:str):void;
X_14 := sql.subdelta(X_53,X_3,X_9,X_54,X_55);
X_15 := sql.projectdelta(X_14,X_6,X_9,r1_9,X_12);
X_16 := sql.bind(X_2,"sys","functions","func",0);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list