Changeset: ad388b56b27d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ad388b56b27d
Modified Files:
sql/server/rel_select.c
sql/server/sql_var.c
sql/test/scoping/Tests/scoping03.sql
sql/test/scoping/Tests/scoping03.stable.err
Branch: scoping
Log Message:
Test fixes
diffs (72 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
@@ -1211,11 +1211,11 @@ rel_column_ref(sql_query *query, sql_rel
/* some views are just in the stack, like before and after
updates views */
if (rel && sql->use_views) {
sql_rel *v = NULL;
- int proj = stack_find_rel_view_projection_columns(sql,
name, &v); /* trigger views are basetables relations, so those might conflict */
-
- if (proj < 0 || (v && exp))
+ int dup = stack_find_rel_view_projection_columns(sql,
name, &v); /* trigger views are basetables relations, so those may conflict */
+
+ if (dup < 0 || (v && exp && *rel && is_base(v->op) && v
!= *rel)) /* comparing pointers, ugh */
return sql_error(sql, ERR_AMBIGUOUS,
SQLSTATE(42000) "SELECT: identifier '%s' ambiguous", name);
- if (v) {
+ if (v && !exp) {
if (*rel)
*rel = rel_crossproduct(sql->sa, *rel,
v, op_join);
else
@@ -1284,7 +1284,7 @@ rel_column_ref(sql_query *query, sql_rel
if (rel && sql->use_views) {
sql_rel *v = stack_find_rel_view(sql, tname);
- if (v && exp && is_base(v->op)) /* trigger views are
basetables relations, so those might conflict */
+ if (v && exp && *rel && is_base(v->op) && v != *rel) /*
trigger views are basetables relations, so those may conflict */
return sql_error(sql, ERR_AMBIGUOUS,
SQLSTATE(42000) "SELECT: identifier '%s.%s' ambiguous", tname, cname);
if (v && !exp) {
if (*rel)
diff --git a/sql/server/sql_var.c b/sql/server/sql_var.c
--- a/sql/server/sql_var.c
+++ b/sql/server/sql_var.c
@@ -493,6 +493,7 @@ stack_find_rel_view_projection_columns(m
sql_rel_view *var = (sql_rel_view*) n->data;
assert(var->name);
+ /* trigger views are basetables relations, so
those may conflict */
if (is_base(var->rel_view->op) &&
rel_bind_column(sql, var->rel_view, name, 0, 0)) {
if (*res)
return -1;
diff --git a/sql/test/scoping/Tests/scoping03.sql
b/sql/test/scoping/Tests/scoping03.sql
--- a/sql/test/scoping/Tests/scoping03.sql
+++ b/sql/test/scoping/Tests/scoping03.sql
@@ -23,7 +23,7 @@ create or replace trigger mytrigger2
create or replace trigger mytrigger2
after delete on fun referencing old row as "fun3"
- for each statement update fun2 fun3 set b = (select a from fun3);
--error, identifier "a" is ambiguous, it could be either for old row or table
to update
+ for each statement update fun2 fun3 set c = (select a from fun3);
--error, identifier "a" is ambiguous, it could be either for old row or table
to update
create or replace trigger mytrigger2
after delete on fun referencing old row as "del"
@@ -35,7 +35,7 @@ select c, d from fun2;
delete from fun;
-- 1 row deleted
select c, d from fun2;
- --empty
+ --empty
create or replace trigger mytrigger3
after insert on fun referencing new row as "fun2"
diff --git a/sql/test/scoping/Tests/scoping03.stable.err
b/sql/test/scoping/Tests/scoping03.stable.err
--- a/sql/test/scoping/Tests/scoping03.stable.err
+++ b/sql/test/scoping/Tests/scoping03.stable.err
@@ -32,7 +32,7 @@ CODE = 42000
MAPI = (monetdb) /var/tmp/mtest-689045/.s.monetdb.32789
QUERY = create or replace trigger mytrigger2
after delete on fun referencing old row as "fun3"
- for each statement update fun2 fun3 set b = (select a from
fun3); --error, identifier "a" is ambiguous, it could be either for old row or
table to update
+ for each statement update fun2 fun3 set c = (select a from
fun3); --error, identifier "a" is ambiguous, it could be either for old row or
table to update
ERROR = !SELECT: identifier 'a' ambiguous
CODE = 42000
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list