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]