deparse/core: event triggers support COMMENT
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 25 Sep 2014 18:44:44 +0000 (15:44 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 13 Oct 2014 03:19:45 +0000 (00:19 -0300)
doc/src/sgml/event-trigger.sgml
src/backend/commands/comment.c
src/backend/commands/event_trigger.c
src/backend/tcop/utility.c
src/include/commands/comment.h

index 49b83844be8726f86d332ddd0d2a4f27f6b47ccd..39ecd949ecd1b9882a0df8be25e6a6544a95fa12 100644 (file)
@@ -37,7 +37,7 @@
    <para>
      The <literal>ddl_command_start</> event occurs just before the
      execution of a <literal>CREATE</>, <literal>ALTER</>, <literal>DROP</>,
-     <literal>GRANT</> or <literal>REVOKE</>
+     <literal>COMMENT</>, <literal>GRANT</> or <literal>REVOKE</>
      command.  No check whether the affected object exists or doesn't exist is
      performed before the event trigger fires.
      As an exception, however, this event does not occur for
         <entry align="center"><literal>X</literal></entry>
         <entry align="center"><literal>-</literal></entry>
        </row>
+       <row>
+        <entry align="left"><literal>COMMENT</literal></entry>
+        <entry align="center"><literal>X</literal></entry>
+        <entry align="center"><literal>X</literal></entry>
+        <entry align="center"><literal>-</literal></entry>
+       </row>
        <row>
         <entry align="left"><literal>CREATE CAST</literal></entry>
         <entry align="center"><literal>X</literal></entry>
index 34f6cae2af0b63ef2a5a248e0af6e7b39982cc64..59781e5638db2c9fc0b3e7c1ad3b3c92bb401160 100644 (file)
@@ -37,7 +37,7 @@
  * pg_description for the object specified by the given SQL command.
  */
 Oid
-CommentObject(CommentStmt *stmt)
+CommentObject(CommentStmt *stmt, uint32 *objectSubId)
 {
    ObjectAddress address;
    Relation    relation;
@@ -126,6 +126,9 @@ CommentObject(CommentStmt *stmt)
    if (relation != NULL)
        relation_close(relation, NoLock);
 
+   if (objectSubId)
+       *objectSubId = address.objectSubId;
+
    return address.objectId;
 }
 
index 6abd9fa46adab594c12a4c82e49c4b232b8f93e5..964a010343ce617d509efaa3b04aaf0f9e4bc377 100644 (file)
@@ -251,6 +251,7 @@ check_ddl_tag(const char *tag)
        pg_strcasecmp(tag, "REFRESH MATERIALIZED VIEW") == 0 ||
        pg_strcasecmp(tag, "ALTER DEFAULT PRIVILEGES") == 0 ||
        pg_strcasecmp(tag, "ALTER LARGE OBJECT") == 0 ||
+       pg_strcasecmp(tag, "COMMENT") == 0 ||
        pg_strcasecmp(tag, "GRANT") == 0 ||
        pg_strcasecmp(tag, "REVOKE") == 0 ||
        pg_strcasecmp(tag, "DROP OWNED") == 0 ||
index 559a3d369fe7717da4165b45b43fbe5fb226d3a7..35647325ef22e51c4e6b047cd8a3924d55066c0d 100644 (file)
@@ -512,10 +512,6 @@ standard_ProcessUtility(Node *parsetree,
            ExecuteTruncate((TruncateStmt *) parsetree);
            break;
 
-       case T_CommentStmt:
-           CommentObject((CommentStmt *) parsetree);
-           break;
-
        case T_SecLabelStmt:
            ExecSecLabelStmt((SecLabelStmt *) parsetree);
            break;
@@ -840,6 +836,19 @@ standard_ProcessUtility(Node *parsetree,
            }
            break;
 
+       case T_CommentStmt:
+           {
+               CommentStmt *stmt = (CommentStmt *) parsetree;
+
+               if (EventTriggerSupportsObjectType(stmt->objtype))
+                   ProcessUtilitySlow(parsetree, queryString,
+                                      context, params,
+                                      dest, completionTag);
+               else
+                   CommentObject((CommentStmt *) parsetree, NULL);
+               break;
+           }
+
        default:
            /* All other statement types have event trigger support */
            ProcessUtilitySlow(parsetree, queryString,
@@ -1320,6 +1329,10 @@ ProcessUtilitySlow(Node *parsetree,
                ExecAlterOwnerStmt((AlterOwnerStmt *) parsetree);
                break;
 
+           case T_CommentStmt:
+               CommentObject((CommentStmt *) parsetree, NULL);
+               break;
+
            case T_GrantStmt:
                ExecuteGrantStmt((GrantStmt *) parsetree);
                break;
index 05fe0c6744424338e41192445980f4812a02249e..46a6fa9fff3a2b621ce71242b4f98da0b94ea29f 100644 (file)
@@ -29,7 +29,7 @@
  *------------------------------------------------------------------
  */
 
-extern Oid CommentObject(CommentStmt *stmt);
+extern Oid CommentObject(CommentStmt *stmt, uint32 *objectSubId);
 
 extern void DeleteComments(Oid oid, Oid classoid, int32 subid);