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