Changeset: b1037b6a5005 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b1037b6a5005
Added Files:
        sql/test/BugTracker-2025/Tests/7659_trigger_crashes.test
Modified Files:
        sql/server/rel_psm.c
        sql/test/BugTracker-2025/Tests/All
Branch: Mar2025
Log Message:

small protective fixes for the crashes of issues #7659 and #7661
added tests


diffs (72 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
@@ -555,7 +555,7 @@ rel_select_into( sql_query *query, symbo
                return NULL;
        if (!is_project(r->op))
                return sql_error(sql, 02, SQLSTATE(42000) "SELECT INTO: The 
subquery is not a projection");
-       if (list_length(r->exps) != dlist_length(into))
+       if (!into || list_length(r->exps) != dlist_length(into))
                return sql_error(sql, 02, SQLSTATE(21S01) "SELECT INTO: number 
of values doesn't match number of variables to set");
        r = rel_return_zero_or_one(sql, r, ek);
        nl = sa_list(sql->sa);
@@ -1456,7 +1456,8 @@ create_trigger(sql_query *query, dlist *
                        rel = stack_find_rel_view(sql, "old");
                if (!rel)
                        rel = stack_find_rel_view(sql, "new");
-               rel = rel_logical_exp(query, rel, condition, sql_where);
+               if (rel)
+                       rel = rel_logical_exp(query, rel, condition, sql_where);
                if (!rel) {
                        if (!instantiate)
                                stack_pop_frame(sql);
@@ -1464,7 +1465,7 @@ create_trigger(sql_query *query, dlist *
                }
                /* transition tables */
                /* insert: rel_select(table [new], searchcondition) */
-               /* delete: rel_select(table [old], searchcondition) */
+               /* delete/truncate: rel_select(table [old], searchcondition) */
                /* update: rel_select(table [old,new]), searchcondition) */
                if (new_name)
                        stack_update_rel_view(sql, new_name, rel);
diff --git a/sql/test/BugTracker-2025/Tests/7659_trigger_crashes.test 
b/sql/test/BugTracker-2025/Tests/7659_trigger_crashes.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2025/Tests/7659_trigger_crashes.test
@@ -0,0 +1,28 @@
+# crashes of both issues 7659 and 7661
+# 7659
+statement ok
+CREATE TABLE table1(column1 INT, column2 INT)
+
+statement ok
+CREATE TABLE table2(column1 INT, column2 INT)
+
+statement error
+CREATE TRIGGER trigger_truncate_conditional AFTER TRUNCATE ON table1 FOR EACH 
STATEMENT WHEN (EXISTS (SELECT 1 FROM table2)) CALL procedure2()
+
+statement ok
+drop table table1
+
+statement ok
+drop table table2
+
+# 7661
+statement ok
+CREATE TABLE table1(column1 INT, column2 INT)
+
+statement error
+CREATE TRIGGER trigger6 AFTER UPDATE ON table1 REFERENCING OLD TABLE AS 
old_table NEW TABLE AS new_table FOR EACH STATEMENT SELECT * FROM sys.triggers;
+
+statement ok
+drop table table1
+
+
diff --git a/sql/test/BugTracker-2025/Tests/All 
b/sql/test/BugTracker-2025/Tests/All
--- a/sql/test/BugTracker-2025/Tests/All
+++ b/sql/test/BugTracker-2025/Tests/All
@@ -17,3 +17,4 @@ 7646_leftjoin_crash
 7648_rightjoin_crash
 7654_non_monetdb_user_remote_table_exec
 7656_incorrect_error
+7659_trigger_crashes
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to