Thom Brown <t...@linux.com> writes:
> And having tried building it, it appears to fail.

Sorry about that, my compiler here was happy building the source (and I
had been doing make clean install along the way) and make installcheck
passed, here.

Now fixed on my github's branch, including docs.

I'll send an updated patch revision later, hopefully including pg_dump
support fixtures (well, adaptation to the new way of doing things IIUC)
and maybe with some trigger arguments rework done.

I understand that you're not blocked until that new version is out,
right? You could use either the incremental patch attached for
convenience.

Regards,
--
Dimitri Fontaine
http://2ndQuadrant.fr     PostgreSQL : Expertise, Formation et Support

commit 301d8e58b6bfe89f35d82ad7a5216891f56c5d48
Author: Dimitri Fontaine <d...@tapoueh.org>
Date:   Sat Mar 3 15:18:59 2012 +0100

    Fix RenameCmdTrigger(), per review.

diff --git a/doc/src/sgml/ref/alter_command_trigger.sgml b/doc/src/sgml/ref/alter_command_trigger.sgml
index dd903e7..48b536c 100644
--- a/doc/src/sgml/ref/alter_command_trigger.sgml
+++ b/doc/src/sgml/ref/alter_command_trigger.sgml
@@ -22,6 +22,7 @@ PostgreSQL documentation
  <refsynopsisdiv>
 <synopsis>
 ALTER COMMAND TRIGGER <replaceable class="PARAMETER">name</replaceable> SET <replaceable class="parameter">enabled</replaceable>
+ALTER COMMAND TRIGGER <replaceable class="PARAMETER">name</replaceable> RENAME TO <replaceable class="PARAMETER">newname</replaceable>
 
 <phrase>where <replaceable class="parameter">enabled</replaceable> can be one of:</phrase>
 
@@ -62,10 +63,10 @@ ALTER COMMAND TRIGGER <replaceable class="PARAMETER">name</replaceable> SET <rep
    </varlistentry>
 
    <varlistentry>
-    <term><replaceable class="PARAMETER">command</replaceable></term>
+    <term><replaceable class="PARAMETER">newname</replaceable></term>
     <listitem>
      <para>
-      The command tag on which this trigger acts.
+      The new name of the command trigger.
      </para>
     </listitem>
    </varlistentry>
diff --git a/src/backend/commands/alter.c b/src/backend/commands/alter.c
index 4d07642..b447306 100644
--- a/src/backend/commands/alter.c
+++ b/src/backend/commands/alter.c
@@ -66,7 +66,7 @@ ExecRenameStmt(RenameStmt *stmt)
 			break;
 
 		case OBJECT_CMDTRIGGER:
-			RenameCmdTrigger(stmt->object, stmt->subname, stmt->newname);
+			RenameCmdTrigger(stmt->object, stmt->newname);
 			break;
 
 		case OBJECT_DATABASE:
diff --git a/src/backend/commands/cmdtrigger.c b/src/backend/commands/cmdtrigger.c
index e8d294d..ef9794f 100644
--- a/src/backend/commands/cmdtrigger.c
+++ b/src/backend/commands/cmdtrigger.c
@@ -294,13 +294,17 @@ AlterCmdTrigger(AlterCmdTrigStmt *stmt)
  * Rename command trigger
  */
 void
-RenameCmdTrigger(const char *trigname, const char *newname)
+RenameCmdTrigger(List *name, const char *newname)
 {
 	SysScanDesc tgscan;
 	ScanKeyData skey[1];
 	HeapTuple	tup;
 	Relation	rel;
 	Form_pg_cmdtrigger cmdForm;
+	char *trigname;
+
+	Assert(list_length(name) == 1);
+	trigname = strVal((Value *)linitial(name));
 
 	CheckCmdTriggerPrivileges();
 
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index defcdd1..6a20a6c 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -3463,7 +3463,6 @@ _copyCreateCmdTrigStmt(const CreateCmdTrigStmt *from)
 {
 	CreateCmdTrigStmt *newnode = makeNode(CreateCmdTrigStmt);
 
-	COPY_NODE_FIELD(command);
 	COPY_STRING_FIELD(trigname);
 	COPY_SCALAR_FIELD(timing);
 	COPY_NODE_FIELD(funcname);
@@ -3476,7 +3475,6 @@ _copyAlterCmdTrigStmt(const AlterCmdTrigStmt *from)
 {
 	AlterCmdTrigStmt *newnode = makeNode(AlterCmdTrigStmt);
 
-	COPY_STRING_FIELD(command);
 	COPY_STRING_FIELD(trigname);
 	COPY_STRING_FIELD(tgenabled);
 
diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c
index 1ad31f0..137075a 100644
--- a/src/backend/nodes/equalfuncs.c
+++ b/src/backend/nodes/equalfuncs.c
@@ -1780,7 +1780,6 @@ _equalCreateTrigStmt(const CreateTrigStmt *a, const CreateTrigStmt *b)
 static bool
 _equalCreateCmdTrigStmt(const CreateCmdTrigStmt *a, const CreateCmdTrigStmt *b)
 {
-	COMPARE_NODE_FIELD(command);
 	COMPARE_STRING_FIELD(trigname);
 	COMPARE_SCALAR_FIELD(timing);
 	COMPARE_NODE_FIELD(funcname);
@@ -1791,7 +1790,6 @@ _equalCreateCmdTrigStmt(const CreateCmdTrigStmt *a, const CreateCmdTrigStmt *b)
 static bool
 _equalAlterCmdTrigStmt(const AlterCmdTrigStmt *a, const AlterCmdTrigStmt *b)
 {
-	COMPARE_STRING_FIELD(command);
 	COMPARE_STRING_FIELD(trigname);
 	COMPARE_STRING_FIELD(tgenabled);
 
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index e5a0d34..e9872d3 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -6931,13 +6931,12 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
 					n->missing_ok = false;
 					$$ = (Node *)n;
 				}
-			| ALTER TRIGGER name ON COMMAND trigger_command RENAME TO name
+			| ALTER COMMAND TRIGGER name RENAME TO name
 				{
 					RenameStmt *n = makeNode(RenameStmt);
 					n->renameType = OBJECT_CMDTRIGGER;
-					n->object  = list_make1(makeString($6));
-					n->subname = $3;
-					n->newname = $9;
+					n->object  = list_make1(makeString($4));
+					n->newname = $7;
 					$$ = (Node *)n;
 				}
 			| ALTER ROLE RoleId RENAME TO RoleId
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 3c75cf3..69d6479 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -168,7 +168,6 @@ call_before_cmdtriggers(Node *parsetree, CommandContext cmd)
 		case T_AlterOwnerStmt:
 		case T_AlterSeqStmt:
 		case T_AlterTableStmt:
-		case T_RenameStmt:
 		case T_CommentStmt:
 		case T_DefineStmt:
 		case T_CreateCastStmt:
@@ -224,8 +223,14 @@ call_before_cmdtriggers(Node *parsetree, CommandContext cmd)
 				ExecBeforeCommandTriggers(cmd);
 			return;
 
+		case T_RenameStmt:
+			if (((RenameStmt *) parsetree)->renameType != OBJECT_CMDTRIGGER)
+				if (CommandFiresTriggers(cmd))
+					ExecBeforeCommandTriggers(cmd);
+			return;
+
 		case T_DropStmt:
-			if (((DropStmt *) cmd->parsetree)->removeType != OBJECT_CMDTRIGGER)
+			if (((DropStmt *) parsetree)->removeType != OBJECT_CMDTRIGGER)
 				if (CommandFiresTriggers(cmd))
 					ExecBeforeCommandTriggers(cmd);
 			return;
@@ -251,7 +256,6 @@ call_after_cmdtriggers(Node *parsetree, CommandContext cmd)
 		case T_AlterOwnerStmt:
 		case T_AlterSeqStmt:
 		case T_AlterTableStmt:
-		case T_RenameStmt:
 		case T_CommentStmt:
 		case T_DefineStmt:
 		case T_CreateCastStmt:
@@ -310,8 +314,14 @@ call_after_cmdtriggers(Node *parsetree, CommandContext cmd)
 					ExecAfterCommandTriggers(cmd);
 			return;
 
+		case T_RenameStmt:
+			if (((RenameStmt *) parsetree)->renameType != OBJECT_CMDTRIGGER)
+				if (CommandFiresTriggers(cmd))
+					ExecAfterCommandTriggers(cmd);
+			return;
+
 		case T_DropStmt:
-			if (((DropStmt *) cmd->parsetree)->removeType != OBJECT_CMDTRIGGER)
+			if (((DropStmt *) parsetree)->removeType != OBJECT_CMDTRIGGER)
 				if (CommandFiresAfterTriggers(cmd))
 					ExecAfterCommandTriggers(cmd);
 			return;
diff --git a/src/include/commands/cmdtrigger.h b/src/include/commands/cmdtrigger.h
index 01a6ca3..fae2bfc 100644
--- a/src/include/commands/cmdtrigger.h
+++ b/src/include/commands/cmdtrigger.h
@@ -42,7 +42,7 @@ extern void CreateCmdTrigger(CreateCmdTrigStmt *stmt, const char *queryString);
 extern void RemoveCmdTriggerById(Oid ctrigOid);
 extern Oid	get_cmdtrigger_oid(const char *trigname, bool missing_ok);
 extern void AlterCmdTrigger(AlterCmdTrigStmt *stmt);
-extern void RenameCmdTrigger(const char *trigname, const char *newname);
+extern void RenameCmdTrigger(List *name, const char *newname);
 
 extern void InitCommandContext(CommandContext cmd, const Node *stmt, bool list_triggers);
 extern bool ListCommandTriggers(CommandContext cmd);
diff --git a/src/test/regress/expected/cmdtriggers.out b/src/test/regress/expected/cmdtriggers.out
index 8cb1f78..85a8d38 100644
--- a/src/test/regress/expected/cmdtriggers.out
+++ b/src/test/regress/expected/cmdtriggers.out
@@ -21,9 +21,10 @@ begin
 end;
 $$;
 create command trigger snitch_before before any command execute procedure any_snitch();
-create command trigger snitch_after  after  any command execute procedure any_snitch();
+create command trigger snitch_after_ after  any command execute procedure any_snitch();
 alter command trigger snitch_before set disable;
 alter command trigger snitch_before set enable;
+alter command trigger snitch_after_ rename to snitch_after;
 create command trigger snitch_create_table after create table execute procedure snitch();
 create command trigger snitch_alter_table after alter table execute procedure snitch();
 create command trigger snitch_drop_table after drop table execute procedure snitch();
diff --git a/src/test/regress/sql/cmdtriggers.sql b/src/test/regress/sql/cmdtriggers.sql
index 215da78..60d3be0 100644
--- a/src/test/regress/sql/cmdtriggers.sql
+++ b/src/test/regress/sql/cmdtriggers.sql
@@ -23,10 +23,11 @@ end;
 $$;
 
 create command trigger snitch_before before any command execute procedure any_snitch();
-create command trigger snitch_after  after  any command execute procedure any_snitch();
+create command trigger snitch_after_ after  any command execute procedure any_snitch();
 
 alter command trigger snitch_before set disable;
 alter command trigger snitch_before set enable;
+alter command trigger snitch_after_ rename to snitch_after;
 
 create command trigger snitch_create_table after create table execute procedure snitch();
 create command trigger snitch_alter_table after alter table execute procedure snitch();
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to