aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2013-05-16 16:47:26 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2013-05-16 16:47:26 -0400
commit403bd6a18b8ec5aeee51c08360441c3c3c239d8f (patch)
treee2a509b0d33674e918ace00aa44ed40be0821b3d /src
parent6563fb2b45146852601e63828308fe04fb03b9e9 (diff)
downloadpostgresql-403bd6a18b8ec5aeee51c08360441c3c3c239d8f.tar.gz
postgresql-403bd6a18b8ec5aeee51c08360441c3c3c239d8f.zip
Fix crash when trying to display a NOTIFY rule action.
Fixes oversight in commit 2ffa740be9d96a3743ecb7e42391c53d0760c65a. Per report from Josh Kupershmidt. I think we've broken this case before, so let's add a regression test this time.
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/adt/ruleutils.c19
-rw-r--r--src/test/regress/expected/rules.out4
-rw-r--r--src/test/regress/sql/rules.sql1
3 files changed, 17 insertions, 7 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index af04b051601..043baf3c790 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -2564,14 +2564,19 @@ set_deparse_for_query(deparse_namespace *dpns, Query *query,
dpns->rtable_columns = lappend(dpns->rtable_columns,
palloc0(sizeof(deparse_columns)));
- /* Detect whether global uniqueness of USING names is needed */
- dpns->unique_using = has_unnamed_full_join_using((Node *) query->jointree);
+ /* If it's a utility query, it won't have a jointree */
+ if (query->jointree)
+ {
+ /* Detect whether global uniqueness of USING names is needed */
+ dpns->unique_using =
+ has_unnamed_full_join_using((Node *) query->jointree);
- /*
- * Select names for columns merged by USING, via a recursive pass over the
- * query jointree.
- */
- set_using_names(dpns, (Node *) query->jointree);
+ /*
+ * Select names for columns merged by USING, via a recursive pass over
+ * the query jointree.
+ */
+ set_using_names(dpns, (Node *) query->jointree);
+ }
/*
* Now assign remaining column aliases for each RTE. We do this in a
diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out
index dc3c8a83812..57ae8427ecd 100644
--- a/src/test/regress/expected/rules.out
+++ b/src/test/regress/expected/rules.out
@@ -2573,6 +2573,7 @@ select * from rules_log;
11 | 13 | new
(12 rows)
+create rule r3 as on delete to rules_src do notify rules_src_deletion;
\d+ rules_src
Table "public.rules_src"
Column | Type | Modifiers | Storage | Stats target | Description
@@ -2584,6 +2585,9 @@ Rules:
ON UPDATE TO rules_src DO INSERT INTO rules_log (f1, f2, tag) VALUES (old.f1,old.f2,'old'::text), (new.f1,new.f2,'new'::text)
r2 AS
ON UPDATE TO rules_src DO VALUES (old.f1,old.f2,'old'::text), (new.f1,new.f2,'new'::text)
+ r3 AS
+ ON DELETE TO rules_src DO
+ NOTIFY rules_src_deletion
Has OIDs: no
--
diff --git a/src/test/regress/sql/rules.sql b/src/test/regress/sql/rules.sql
index 4f49a0deca4..d5a35710875 100644
--- a/src/test/regress/sql/rules.sql
+++ b/src/test/regress/sql/rules.sql
@@ -970,6 +970,7 @@ create rule r2 as on update to rules_src do also
update rules_src set f2 = f2 / 10;
select * from rules_src;
select * from rules_log;
+create rule r3 as on delete to rules_src do notify rules_src_deletion;
\d+ rules_src
--