From 0164a6b011019964a7a9fff32b5114658bb83cbd Mon Sep 17 00:00:00 2001
From: Jeevan Chalke <jeevan.chalke@enterprisedb.com>
Date: Mon, 26 Oct 2026 14:52:10 +0530
Subject: [PATCH v1] Initialize FOUND to false in PL/pgSQL event trigger
 functions.

The documentation says that FOUND starts out false within each
PL/pgSQL function call, and plpgsql_exec_function() and
plpgsql_exec_trigger() do set it so, but plpgsql_exec_event_trigger()
did not, leaving it NULL until the first statement that sets it.

Fix this by initializing FOUND to false, as the other two entry points
do, and add a regression test.
---
 src/pl/plpgsql/src/pl_exec.c                |  5 +++++
 src/test/regress/expected/event_trigger.out | 25 +++++++++++++++++++++
 src/test/regress/sql/event_trigger.sql      | 22 ++++++++++++++++++
 3 files changed, 52 insertions(+)

diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c
index bc1667f7a13..6d5e18418f6 100644
--- a/src/pl/plpgsql/src/pl_exec.c
+++ b/src/pl/plpgsql/src/pl_exec.c
@@ -1199,6 +1199,11 @@ plpgsql_exec_event_trigger(PLpgSQL_function *func, EventTriggerData *trigdata)
 	estate.err_text = gettext_noop("during initialization of execution state");
 	copy_plpgsql_datums(&estate, func);
 
+	/*
+	 * Set the magic variable FOUND to false
+	 */
+	exec_set_found(&estate, false);
+
 	/*
 	 * Let the instrumentation plugin peek at this function
 	 */
diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out
index f57e8ffa7a5..963008ef1b3 100644
--- a/src/test/regress/expected/event_trigger.out
+++ b/src/test/regress/expected/event_trigger.out
@@ -825,3 +825,28 @@ NOTICE:  DROP POLICY dropped policy
 CREATE POLICY pguc ON event_trigger_test USING (FALSE);
 SET event_triggers = 'off';
 DROP POLICY pguc ON event_trigger_test;
+-- event triggers were disabled above; re-enable them for the test below
+RESET event_triggers;
+-- FOUND should be initially false in a PL/pgSQL event trigger function,
+-- and a value set by one call should not carry over to the next
+CREATE FUNCTION test_event_trigger_found() RETURNS event_trigger
+LANGUAGE plpgsql AS $$
+BEGIN
+	RAISE NOTICE 'FOUND is %', FOUND;
+	PERFORM 1;
+	RAISE NOTICE 'FOUND after PERFORM is %', FOUND;
+END;
+$$;
+CREATE EVENT TRIGGER test_event_trigger_found
+	ON ddl_command_start
+	WHEN TAG IN ('CREATE SCHEMA') EXECUTE FUNCTION test_event_trigger_found();
+CREATE SCHEMA test_event_trigger_found_schema;
+NOTICE:  FOUND is f
+NOTICE:  FOUND after PERFORM is t
+DROP SCHEMA test_event_trigger_found_schema;
+CREATE SCHEMA test_event_trigger_found_schema;
+NOTICE:  FOUND is f
+NOTICE:  FOUND after PERFORM is t
+DROP SCHEMA test_event_trigger_found_schema;
+DROP EVENT TRIGGER test_event_trigger_found;
+DROP FUNCTION test_event_trigger_found();
diff --git a/src/test/regress/sql/event_trigger.sql b/src/test/regress/sql/event_trigger.sql
index 32e9bb58c5e..55b3e8bc4ce 100644
--- a/src/test/regress/sql/event_trigger.sql
+++ b/src/test/regress/sql/event_trigger.sql
@@ -643,3 +643,25 @@ DROP POLICY pguc ON event_trigger_test;
 CREATE POLICY pguc ON event_trigger_test USING (FALSE);
 SET event_triggers = 'off';
 DROP POLICY pguc ON event_trigger_test;
+-- event triggers were disabled above; re-enable them for the test below
+RESET event_triggers;
+
+-- FOUND should be initially false in a PL/pgSQL event trigger function,
+-- and a value set by one call should not carry over to the next
+CREATE FUNCTION test_event_trigger_found() RETURNS event_trigger
+LANGUAGE plpgsql AS $$
+BEGIN
+	RAISE NOTICE 'FOUND is %', FOUND;
+	PERFORM 1;
+	RAISE NOTICE 'FOUND after PERFORM is %', FOUND;
+END;
+$$;
+CREATE EVENT TRIGGER test_event_trigger_found
+	ON ddl_command_start
+	WHEN TAG IN ('CREATE SCHEMA') EXECUTE FUNCTION test_event_trigger_found();
+CREATE SCHEMA test_event_trigger_found_schema;
+DROP SCHEMA test_event_trigger_found_schema;
+CREATE SCHEMA test_event_trigger_found_schema;
+DROP SCHEMA test_event_trigger_found_schema;
+DROP EVENT TRIGGER test_event_trigger_found;
+DROP FUNCTION test_event_trigger_found();
-- 
2.43.0

