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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list