Fix crash when trying to display a NOTIFY rule action.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 16 May 2013 20:47:26 +0000 (16:47 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 16 May 2013 20:47:26 +0000 (16:47 -0400)
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.

src/backend/utils/adt/ruleutils.c
src/test/regress/expected/rules.out
src/test/regress/sql/rules.sql

index af04b051601cf86a58b24a09844c1eb4093fdef4..043baf3c7903577661af3d9107cce621dfcea9cc 100644 (file)
@@ -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
index dc3c8a83812f80c96410060d507e2b0f664d84df..57ae8427ecd577b5d2f2da6ffe279decce3fec30 100644 (file)
@@ -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
 
 --
index 4f49a0deca431a2caecaee8c43d237db949c9153..d5a357108752b1e39b8963e543041c6eea7c9c3d 100644 (file)
@@ -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
 
 --