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

Reply via email to