Changeset: ce8b3b55e2c2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ce8b3b55e2c2
Added Files:
sql/test/Triggers/Tests/trigger_schema.sql
sql/test/Triggers/Tests/trigger_schema.stable.err
sql/test/Triggers/Tests/trigger_schema.stable.out
Modified Files:
sql/backends/monet5/rel_bin.c
sql/test/Triggers/Tests/All
Branch: Oct2020
Log Message:
When a trigger is instantied, set the trigger's schema as the session's schema
diffs (161 lines):
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -3570,9 +3570,9 @@ rel2bin_sample(backend *be, sql_rel *rel
}
static stmt *
-sql_parse(backend *be, const char *query, char mode)
+sql_parse(backend *be, sql_schema *s, const char *query, char mode)
{
- sql_rel *rel = rel_parse(be->mvc, be->mvc->session->schema,
(char*)query, mode);
+ sql_rel *rel = rel_parse(be->mvc, s, (char*)query, mode);
stmt *sq = NULL;
if ((rel = sql_processrelation(be->mvc, rel, 1, 1)))
@@ -3844,7 +3844,7 @@ sql_insert_triggers(backend *be, sql_tab
stack_pop_frame(sql);
return 0;
}
- if (!sql_parse(be, trigger->statement, m_instantiate)) {
+ if (!sql_parse(be, trigger->t->s, trigger->statement,
m_instantiate)) {
stack_pop_frame(sql);
return 0;
}
@@ -4777,7 +4777,7 @@ sql_update_triggers(backend *be, sql_tab
return 0;
}
- if (!sql_parse(be, trigger->statement, m_instantiate)) {
+ if (!sql_parse(be, trigger->t->s, trigger->statement,
m_instantiate)) {
stack_pop_frame(sql);
return 0;
}
@@ -5058,7 +5058,7 @@ sql_delete_triggers(backend *be, sql_tab
return 0;
}
- if (!sql_parse(be, trigger->statement, m_instantiate)) {
+ if (!sql_parse(be, trigger->t->s, trigger->statement,
m_instantiate)) {
stack_pop_frame(sql);
return 0;
}
diff --git a/sql/test/Triggers/Tests/All b/sql/test/Triggers/Tests/All
--- a/sql/test/Triggers/Tests/All
+++ b/sql/test/Triggers/Tests/All
@@ -8,3 +8,4 @@ trigger_owner
triggers_schema_operations
trigger_insert
KNOWNFAIL?trigger_projection
+trigger_schema
diff --git a/sql/test/Triggers/Tests/trigger_schema.sql
b/sql/test/Triggers/Tests/trigger_schema.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/Triggers/Tests/trigger_schema.sql
@@ -0,0 +1,28 @@
+-- Verify the trigger's schema is the one set every time the trigger is fired
+START TRANSACTION;
+create schema foo;
+set schema foo;
+create table t1 (id serial, ref bigint);
+create table t2 (id serial, ref bigint);
+
+create function f(ref bigint) returns bigint begin return 10*ref; end;
+
+create schema bar;
+set schema bar;
+create function f(ref bigint) returns bigint begin return 100*ref; end;
+create table t1 (id serial, ref bigint);
+create table t2 (id serial, ref bigint);
+
+create trigger extra_insert
+ AFTER INSERT ON t1 referencing new row as new_row
+ FOR EACH statement insert into t2(ref) values (f(new_row.ref));
+
+insert into t1(ref) values (10);
+set schema foo;
+insert into bar.t1(ref) values (10);
+
+select * from bar.t1;
+select * from bar.t2;
+select * from foo.t1;
+select * from foo.t2;
+ROLLBACK;
diff --git a/sql/test/Triggers/Tests/trigger_schema.stable.err
b/sql/test/Triggers/Tests/trigger_schema.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/Triggers/Tests/trigger_schema.stable.err
@@ -0,0 +1,12 @@
+stderr of test 'trigger_schema` in directory 'sql/test/Triggers` itself:
+
+
+# 14:26:57 >
+# 14:26:57 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-75225" "--port=38787"
+# 14:26:57 >
+
+
+# 14:26:57 >
+# 14:26:57 > "Done."
+# 14:26:57 >
+
diff --git a/sql/test/Triggers/Tests/trigger_schema.stable.out
b/sql/test/Triggers/Tests/trigger_schema.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/Triggers/Tests/trigger_schema.stable.out
@@ -0,0 +1,56 @@
+stdout of test 'trigger_schema` in directory 'sql/test/Triggers` itself:
+
+
+# 14:26:57 >
+# 14:26:57 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-75225" "--port=38787"
+# 14:26:57 >
+
+#START TRANSACTION;
+#create schema foo;
+#set schema foo;
+#create table t1 (id serial, ref bigint);
+#create table t2 (id serial, ref bigint);
+#create function f(ref bigint) returns bigint begin return 10*ref; end;
+#create schema bar;
+#set schema bar;
+#create function f(ref bigint) returns bigint begin return 100*ref; end;
+#create table t1 (id serial, ref bigint);
+#create table t2 (id serial, ref bigint);
+#create trigger extra_insert
+# AFTER INSERT ON t1 referencing new row as new_row
+# FOR EACH statement insert into t2(ref) values (f(new_row.ref));
+#insert into t1(ref) values (10);
+[ 1 ]
+#set schema foo;
+#insert into bar.t1(ref) values (10);
+[ 1 ]
+#select * from bar.t1;
+% bar.t1, bar.t1 # table_name
+% id, ref # name
+% int, bigint # type
+% 1, 2 # length
+[ 1, 10 ]
+[ 2, 10 ]
+#select * from bar.t2;
+% bar.t2, bar.t2 # table_name
+% id, ref # name
+% int, bigint # type
+% 1, 4 # length
+[ 1, 1000 ]
+[ 2, 1000 ]
+#select * from foo.t1;
+% foo.t1, foo.t1 # table_name
+% id, ref # name
+% int, bigint # type
+% 1, 1 # length
+#select * from foo.t2;
+% foo.t2, foo.t2 # table_name
+% id, ref # name
+% int, bigint # type
+% 1, 1 # length
+#ROLLBACK;
+
+# 14:26:57 >
+# 14:26:57 > "Done."
+# 14:26:57 >
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list