Changeset: 3a0485c56cbd for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3a0485c56cbd
Modified Files:
        sql/server/rel_psm.c
        sql/test/Triggers/Tests/trigger_schema.sql
        sql/test/Triggers/Tests/trigger_schema.stable.err
Branch: Oct2020
Log Message:

Disallow schema-qualified trigger name during creation. Use it on the table the 
trigger will refer to when necessaey, because the trigger and the table will 
always be on the same schema. This makes our implementation compliant with 
others


diffs (56 lines):

diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -1292,6 +1292,8 @@ create_trigger(sql_query *query, dlist *
                }
        }
 
+       if (triggerschema)
+               return sql_error(sql, 02, SQLSTATE(42000) "%s TRIGGER: a 
trigger will be placed on the respective table's schema, specify the schema on 
the table reference, ie ON clause instead", base);
        if (create && !mvc_schema_privs(sql, ss))
                return sql_error(sql, 02, SQLSTATE(42000) "%s TRIGGER: access 
denied for %s to schema '%s'", base, sqlvar_get_string(find_global_var(sql, 
mvc_bind_schema(sql, "sys"), "current_user")), ss->base.name);
        if (create) {
@@ -1300,8 +1302,6 @@ create_trigger(sql_query *query, dlist *
        }
        if (create && isView(t))
                return sql_error(sql, 02, SQLSTATE(42000) "%s TRIGGER: cannot 
create trigger on view '%s'", base, tname);
-       if (triggerschema && strcmp(triggerschema, ss->base.name) != 0)
-               return sql_error(sql, 02, SQLSTATE(42000) "%s TRIGGER: trigger 
and respective table must belong to the same schema", base);
        if (create && (st = mvc_bind_trigger(sql, ss, triggername)) != NULL) {
                if (replace) {
                        if (mvc_drop_trigger(sql, ss, st))
diff --git a/sql/test/Triggers/Tests/trigger_schema.sql 
b/sql/test/Triggers/Tests/trigger_schema.sql
--- a/sql/test/Triggers/Tests/trigger_schema.sql
+++ b/sql/test/Triggers/Tests/trigger_schema.sql
@@ -26,3 +26,15 @@ select * from bar.t2;
 select * from foo.t1;
 select * from foo.t2;
 ROLLBACK;
+
+START TRANSACTION;
+create schema foo;
+set schema foo;
+create table t1 (id serial, ref bigint);
+create table t2 (id serial, ref bigint);
+create schema bar;
+set schema bar;
+create trigger foo.extra_insert
+    AFTER INSERT ON t1 referencing new row as new_row
+    FOR EACH statement insert into t2(ref) values (new_row.ref); --error, a 
trigger will be placed on its table's schema, specify the schema on the table 
reference, ie ON clause instead
+ROLLBACK;
diff --git a/sql/test/Triggers/Tests/trigger_schema.stable.err 
b/sql/test/Triggers/Tests/trigger_schema.stable.err
--- a/sql/test/Triggers/Tests/trigger_schema.stable.err
+++ b/sql/test/Triggers/Tests/trigger_schema.stable.err
@@ -5,6 +5,12 @@ stderr of test 'trigger_schema` in direc
 # 14:26:57 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-75225" "--port=38787"
 # 14:26:57 >  
 
+MAPI  = (monetdb) /var/tmp/mtest-78050/.s.monetdb.34605
+QUERY = create trigger foo.extra_insert
+            AFTER INSERT ON t1 referencing new row as new_row
+            FOR EACH statement insert into t2(ref) values (new_row.ref); 
--error, a trigger will be placed on its table's schema, specify the schema on 
the table reference, ie ON clause instead
+ERROR = !CREATE TRIGGER: a trigger will be placed on the respective table's 
schema, specify the schema on the table reference, ie ON clause instead
+CODE  = 42000
 
 # 14:26:57 >  
 # 14:26:57 >  "Done."
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to