Thread: Reducing the maintenance overhead of test_oat_hooks

Reducing the maintenance overhead of test_oat_hooks

From
Tom Lane
Date:
I've been annoyed several times lately by having to update
the list of node types embodied in test_oat_hooks.c's
nodetag_to_string().  I got around to looking at that more
closely, and realized that it is only used for utility
statements, which (a) are a very small subset of the node
types that that function knows about, and (b) we already
have a mechanism to get string identifiers for, and (c)
those identifiers are already standard parts of our user API,
unlike the strings exposed by nodetag_to_string().  I do not
think that test_oat_hooks.c has any business imposing
an extra maintenance burden on us all, so I propose
nuking nodetag_to_string() from orbit, as attached.

(Incidentally, this improves test_oat_hooks's own
reported code coverage from 14.0% to 76.1%, because
so much of that switch is dead code.)

            regards, tom lane

diff --git a/src/test/modules/test_oat_hooks/expected/test_oat_hooks.out
b/src/test/modules/test_oat_hooks/expected/test_oat_hooks.out
index 30828a7da3..b053bc75cc 100644
--- a/src/test/modules/test_oat_hooks/expected/test_oat_hooks.out
+++ b/src/test/modules/test_oat_hooks/expected/test_oat_hooks.out
@@ -11,26 +11,26 @@ LOAD 'test_oat_hooks';
 SET test_oat_hooks.audit = true;
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [test_oat_hooks.audit]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set) [test_oat_hooks.audit]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished SET
 -- Creating privileges on an existent custom GUC should create precisely the
 -- right privileges, not overly conservative ones.
 GRANT SET ON PARAMETER test_oat_hooks.user_var2 TO regress_role_joe;
-NOTICE:  in process utility: superuser attempting GrantStmt
-NOTICE:  in process utility: superuser finished GrantStmt
+NOTICE:  in process utility: superuser attempting GRANT
+NOTICE:  in process utility: superuser finished GRANT
 GRANT SET ON PARAMETER test_oat_hooks.super_var2 TO regress_role_joe;
-NOTICE:  in process utility: superuser attempting GrantStmt
-NOTICE:  in process utility: superuser finished GrantStmt
+NOTICE:  in process utility: superuser attempting GRANT
+NOTICE:  in process utility: superuser finished GRANT
 -- Granting multiple privileges on a parameter should be reported correctly to
 -- the OAT hook, but beware that WITH GRANT OPTION is not represented.
 GRANT SET, ALTER SYSTEM ON PARAMETER none.such TO regress_role_joe;
-NOTICE:  in process utility: superuser attempting GrantStmt
-NOTICE:  in process utility: superuser finished GrantStmt
+NOTICE:  in process utility: superuser attempting GRANT
+NOTICE:  in process utility: superuser finished GRANT
 GRANT SET, ALTER SYSTEM ON PARAMETER another.bogus TO regress_role_joe WITH GRANT OPTION;
-NOTICE:  in process utility: superuser attempting GrantStmt
-NOTICE:  in process utility: superuser finished GrantStmt
+NOTICE:  in process utility: superuser attempting GRANT
+NOTICE:  in process utility: superuser finished GRANT
 -- Check when the hooks fire relative to dependency based abort of a drop
 DROP ROLE regress_role_joe;
-NOTICE:  in process utility: superuser attempting DropRoleStmt
+NOTICE:  in process utility: superuser attempting DROP ROLE
 NOTICE:  in object access: superuser attempting drop (subId=0x0) []
 NOTICE:  in object access: superuser finished drop (subId=0x0) []
 ERROR:  role "regress_role_joe" cannot be dropped because some objects depend on it
@@ -42,30 +42,30 @@ privileges for parameter none.such
 privileges for parameter another.bogus
 -- Check the behavior of the hooks relative to do-nothing grants and revokes
 GRANT SET ON PARAMETER maintenance_work_mem TO PUBLIC;
-NOTICE:  in process utility: superuser attempting GrantStmt
-NOTICE:  in process utility: superuser finished GrantStmt
+NOTICE:  in process utility: superuser attempting GRANT
+NOTICE:  in process utility: superuser finished GRANT
 REVOKE SET ON PARAMETER maintenance_work_mem FROM PUBLIC;
-NOTICE:  in process utility: superuser attempting GrantStmt
-NOTICE:  in process utility: superuser finished GrantStmt
+NOTICE:  in process utility: superuser attempting REVOKE
+NOTICE:  in process utility: superuser finished REVOKE
 REVOKE ALTER SYSTEM ON PARAMETER maintenance_work_mem FROM PUBLIC;
-NOTICE:  in process utility: superuser attempting GrantStmt
-NOTICE:  in process utility: superuser finished GrantStmt
+NOTICE:  in process utility: superuser attempting REVOKE
+NOTICE:  in process utility: superuser finished REVOKE
 -- Check the behavior of the hooks relative to unrecognized parameters
 GRANT ALL ON PARAMETER "none.such" TO PUBLIC;
-NOTICE:  in process utility: superuser attempting GrantStmt
-NOTICE:  in process utility: superuser finished GrantStmt
+NOTICE:  in process utility: superuser attempting GRANT
+NOTICE:  in process utility: superuser finished GRANT
 -- Check relative to an operation that causes the catalog entry to be deleted
 REVOKE ALL ON PARAMETER "none.such" FROM PUBLIC;
-NOTICE:  in process utility: superuser attempting GrantStmt
-NOTICE:  in process utility: superuser finished GrantStmt
+NOTICE:  in process utility: superuser attempting REVOKE
+NOTICE:  in process utility: superuser finished REVOKE
 -- Create objects for use in the test
 CREATE USER regress_test_user;
-NOTICE:  in process utility: superuser attempting CreateRoleStmt
+NOTICE:  in process utility: superuser attempting CREATE ROLE
 NOTICE:  in object access: superuser attempting create (subId=0x0) [explicit]
 NOTICE:  in object access: superuser finished create (subId=0x0) [explicit]
-NOTICE:  in process utility: superuser finished CreateRoleStmt
+NOTICE:  in process utility: superuser finished CREATE ROLE
 CREATE TABLE regress_test_table (t text);
-NOTICE:  in process utility: superuser attempting CreateStmt
+NOTICE:  in process utility: superuser attempting CREATE TABLE
 NOTICE:  in object access: superuser attempting namespace search (subId=0x0) [no report on violation, allowed]
 LINE 1: CREATE TABLE regress_test_table (t text);
                      ^
@@ -82,25 +82,25 @@ NOTICE:  in object access: superuser attempting create (subId=0x0) [internal]
 NOTICE:  in object access: superuser finished create (subId=0x0) [internal]
 NOTICE:  in object access: superuser attempting create (subId=0x0) [internal]
 NOTICE:  in object access: superuser finished create (subId=0x0) [internal]
-NOTICE:  in process utility: superuser finished CreateStmt
+NOTICE:  in process utility: superuser finished CREATE TABLE
 CREATE INDEX regress_test_table_t_idx ON regress_test_table (t);
-NOTICE:  in process utility: superuser attempting IndexStmt
+NOTICE:  in process utility: superuser attempting CREATE INDEX
 NOTICE:  in object access: superuser attempting create (subId=0x0) [explicit]
 NOTICE:  in object access: superuser finished create (subId=0x0) [explicit]
-NOTICE:  in process utility: superuser finished IndexStmt
+NOTICE:  in process utility: superuser finished CREATE INDEX
 GRANT SELECT ON Table regress_test_table TO public;
-NOTICE:  in process utility: superuser attempting GrantStmt
-NOTICE:  in process utility: superuser finished GrantStmt
+NOTICE:  in process utility: superuser attempting GRANT
+NOTICE:  in process utility: superuser finished GRANT
 CREATE FUNCTION regress_test_func (t text) RETURNS text AS $$
     SELECT $1;
 $$ LANGUAGE sql;
-NOTICE:  in process utility: superuser attempting CreateFunctionStmt
+NOTICE:  in process utility: superuser attempting CREATE FUNCTION
 NOTICE:  in object access: superuser attempting create (subId=0x0) [explicit]
 NOTICE:  in object access: superuser finished create (subId=0x0) [explicit]
-NOTICE:  in process utility: superuser finished CreateFunctionStmt
+NOTICE:  in process utility: superuser finished CREATE FUNCTION
 GRANT EXECUTE ON FUNCTION regress_test_func (text) TO public;
-NOTICE:  in process utility: superuser attempting GrantStmt
-NOTICE:  in process utility: superuser finished GrantStmt
+NOTICE:  in process utility: superuser attempting GRANT
+NOTICE:  in process utility: superuser finished GRANT
 -- Do a few things as superuser
 SELECT * FROM regress_test_table;
 NOTICE:  in executor check perms: superuser attempting execute
@@ -118,31 +118,31 @@ NOTICE:  in executor check perms: superuser finished execute
 (1 row)

 SET work_mem = 8192;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting SET
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [work_mem]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set) [work_mem]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished SET
 RESET work_mem;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting RESET
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [work_mem]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set) [work_mem]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished RESET
 ALTER SYSTEM SET work_mem = 8192;
-NOTICE:  in process utility: superuser attempting alter system
+NOTICE:  in process utility: superuser attempting ALTER SYSTEM
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x2000, alter system) [work_mem]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x2000, alter system) [work_mem]
-NOTICE:  in process utility: superuser finished alter system
+NOTICE:  in process utility: superuser finished ALTER SYSTEM
 ALTER SYSTEM RESET work_mem;
-NOTICE:  in process utility: superuser attempting alter system
+NOTICE:  in process utility: superuser attempting ALTER SYSTEM
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x2000, alter system) [work_mem]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x2000, alter system) [work_mem]
-NOTICE:  in process utility: superuser finished alter system
+NOTICE:  in process utility: superuser finished ALTER SYSTEM
 -- Do those same things as non-superuser
 SET SESSION AUTHORIZATION regress_test_user;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting SET
 NOTICE:  in object_access_hook_str: non-superuser attempting alter (subId=0x1000, set) [session_authorization]
 NOTICE:  in object_access_hook_str: non-superuser finished alter (subId=0x1000, set) [session_authorization]
-NOTICE:  in process utility: non-superuser finished set
+NOTICE:  in process utility: non-superuser finished SET
 SELECT * FROM regress_test_table;
 NOTICE:  in object access: non-superuser attempting namespace search (subId=0x0) [no report on violation, allowed]
 LINE 1: SELECT * FROM regress_test_table;
@@ -165,83 +165,83 @@ NOTICE:  in executor check perms: non-superuser finished execute
 (1 row)

 SET work_mem = 8192;
-NOTICE:  in process utility: non-superuser attempting set
+NOTICE:  in process utility: non-superuser attempting SET
 NOTICE:  in object_access_hook_str: non-superuser attempting alter (subId=0x1000, set) [work_mem]
 NOTICE:  in object_access_hook_str: non-superuser finished alter (subId=0x1000, set) [work_mem]
-NOTICE:  in process utility: non-superuser finished set
+NOTICE:  in process utility: non-superuser finished SET
 RESET work_mem;
-NOTICE:  in process utility: non-superuser attempting set
+NOTICE:  in process utility: non-superuser attempting RESET
 NOTICE:  in object_access_hook_str: non-superuser attempting alter (subId=0x1000, set) [work_mem]
 NOTICE:  in object_access_hook_str: non-superuser finished alter (subId=0x1000, set) [work_mem]
-NOTICE:  in process utility: non-superuser finished set
+NOTICE:  in process utility: non-superuser finished RESET
 ALTER SYSTEM SET work_mem = 8192;
-NOTICE:  in process utility: non-superuser attempting alter system
+NOTICE:  in process utility: non-superuser attempting ALTER SYSTEM
 ERROR:  permission denied to set parameter "work_mem"
 ALTER SYSTEM RESET work_mem;
-NOTICE:  in process utility: non-superuser attempting alter system
+NOTICE:  in process utility: non-superuser attempting ALTER SYSTEM
 ERROR:  permission denied to set parameter "work_mem"
 SET test_oat_hooks.user_var1 = true;
-NOTICE:  in process utility: non-superuser attempting set
+NOTICE:  in process utility: non-superuser attempting SET
 NOTICE:  in object_access_hook_str: non-superuser attempting alter (subId=0x1000, set) [test_oat_hooks.user_var1]
 NOTICE:  in object_access_hook_str: non-superuser finished alter (subId=0x1000, set) [test_oat_hooks.user_var1]
-NOTICE:  in process utility: non-superuser finished set
+NOTICE:  in process utility: non-superuser finished SET
 SET test_oat_hooks.super_var1 = true;
-NOTICE:  in process utility: non-superuser attempting set
+NOTICE:  in process utility: non-superuser attempting SET
 ERROR:  permission denied to set parameter "test_oat_hooks.super_var1"
 ALTER SYSTEM SET test_oat_hooks.user_var1 = true;
-NOTICE:  in process utility: non-superuser attempting alter system
+NOTICE:  in process utility: non-superuser attempting ALTER SYSTEM
 ERROR:  permission denied to set parameter "test_oat_hooks.user_var1"
 ALTER SYSTEM SET test_oat_hooks.super_var1 = true;
-NOTICE:  in process utility: non-superuser attempting alter system
+NOTICE:  in process utility: non-superuser attempting ALTER SYSTEM
 ERROR:  permission denied to set parameter "test_oat_hooks.super_var1"
 SET test_oat_hooks.user_var2 = true;
-NOTICE:  in process utility: non-superuser attempting set
+NOTICE:  in process utility: non-superuser attempting SET
 NOTICE:  in object_access_hook_str: non-superuser attempting alter (subId=0x1000, set) [test_oat_hooks.user_var2]
 NOTICE:  in object_access_hook_str: non-superuser finished alter (subId=0x1000, set) [test_oat_hooks.user_var2]
-NOTICE:  in process utility: non-superuser finished set
+NOTICE:  in process utility: non-superuser finished SET
 SET test_oat_hooks.super_var2 = true;
-NOTICE:  in process utility: non-superuser attempting set
+NOTICE:  in process utility: non-superuser attempting SET
 ERROR:  permission denied to set parameter "test_oat_hooks.super_var2"
 ALTER SYSTEM SET test_oat_hooks.user_var2 = true;
-NOTICE:  in process utility: non-superuser attempting alter system
+NOTICE:  in process utility: non-superuser attempting ALTER SYSTEM
 ERROR:  permission denied to set parameter "test_oat_hooks.user_var2"
 ALTER SYSTEM SET test_oat_hooks.super_var2 = true;
-NOTICE:  in process utility: non-superuser attempting alter system
+NOTICE:  in process utility: non-superuser attempting ALTER SYSTEM
 ERROR:  permission denied to set parameter "test_oat_hooks.super_var2"
 RESET SESSION AUTHORIZATION;
-NOTICE:  in process utility: non-superuser attempting set
+NOTICE:  in process utility: non-superuser attempting RESET
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [session_authorization]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set) [session_authorization]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished RESET
 -- Turn off non-superuser permissions
 SET test_oat_hooks.deny_set_variable = true;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting SET
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [test_oat_hooks.deny_set_variable]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set) [test_oat_hooks.deny_set_variable]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished SET
 SET test_oat_hooks.deny_alter_system = true;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting SET
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [test_oat_hooks.deny_alter_system]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set) [test_oat_hooks.deny_alter_system]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished SET
 SET test_oat_hooks.deny_object_access = true;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting SET
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [test_oat_hooks.deny_object_access]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set) [test_oat_hooks.deny_object_access]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished SET
 SET test_oat_hooks.deny_exec_perms = true;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting SET
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [test_oat_hooks.deny_exec_perms]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set) [test_oat_hooks.deny_exec_perms]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished SET
 SET test_oat_hooks.deny_utility_commands = true;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting SET
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set)
[test_oat_hooks.deny_utility_commands]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set)
[test_oat_hooks.deny_utility_commands]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished SET
 -- Try again as non-superuser with permissions denied
 SET SESSION AUTHORIZATION regress_test_user;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting SET
 NOTICE:  in object_access_hook_str: non-superuser attempting alter (subId=0x1000, set) [session_authorization]
 ERROR:  permission denied: set session_authorization
 SELECT * FROM regress_test_table;
@@ -266,39 +266,39 @@ NOTICE:  in executor check perms: superuser finished execute
 (1 row)

 SET work_mem = 8192;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting SET
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [work_mem]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set) [work_mem]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished SET
 RESET work_mem;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting RESET
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [work_mem]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set) [work_mem]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished RESET
 ALTER SYSTEM SET work_mem = 8192;
-NOTICE:  in process utility: superuser attempting alter system
+NOTICE:  in process utility: superuser attempting ALTER SYSTEM
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x2000, alter system) [work_mem]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x2000, alter system) [work_mem]
-NOTICE:  in process utility: superuser finished alter system
+NOTICE:  in process utility: superuser finished ALTER SYSTEM
 ALTER SYSTEM RESET work_mem;
-NOTICE:  in process utility: superuser attempting alter system
+NOTICE:  in process utility: superuser attempting ALTER SYSTEM
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x2000, alter system) [work_mem]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x2000, alter system) [work_mem]
-NOTICE:  in process utility: superuser finished alter system
+NOTICE:  in process utility: superuser finished ALTER SYSTEM
 -- try labelled drops
 RESET SESSION AUTHORIZATION;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting RESET
 NOTICE:  in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [session_authorization]
 NOTICE:  in object_access_hook_str: superuser finished alter (subId=0x1000, set) [session_authorization]
-NOTICE:  in process utility: superuser finished set
+NOTICE:  in process utility: superuser finished RESET
 DROP INDEX CONCURRENTLY regress_test_table_t_idx;
-NOTICE:  in process utility: superuser attempting DropStmt
+NOTICE:  in process utility: superuser attempting DROP INDEX
 NOTICE:  in object access: superuser attempting drop (subId=0x0) [concurrent drop,]
 NOTICE:  in object access: superuser finished drop (subId=0x0) [concurrent drop,]
-NOTICE:  in process utility: superuser finished DropStmt
+NOTICE:  in process utility: superuser finished DROP INDEX
 -- Clean up
 SET test_oat_hooks.audit = false;
-NOTICE:  in process utility: superuser attempting set
+NOTICE:  in process utility: superuser attempting SET
 DROP ROLE regress_role_joe;  -- fails
 ERROR:  role "regress_role_joe" cannot be dropped because some objects depend on it
 DETAIL:  privileges for parameter test_oat_hooks.user_var1
diff --git a/src/test/modules/test_oat_hooks/test_oat_hooks.c b/src/test/modules/test_oat_hooks/test_oat_hooks.c
index 8aa59bf18a..4b4e259cd2 100644
--- a/src/test/modules/test_oat_hooks/test_oat_hooks.c
+++ b/src/test/modules/test_oat_hooks/test_oat_hooks.c
@@ -64,7 +64,6 @@ static void REGRESS_utility_command(PlannedStmt *pstmt,
                                     DestReceiver *dest, QueryCompletion *qc);

 /* Helper functions */
-static const char *nodetag_to_string(NodeTag tag);
 static char *accesstype_to_string(ObjectAccessType access, int subId);
 static char *accesstype_arg_to_string(ObjectAccessType access, void *arg);

@@ -388,25 +387,7 @@ REGRESS_utility_command(PlannedStmt *pstmt,
                         QueryCompletion *qc)
 {
     Node       *parsetree = pstmt->utilityStmt;
-
-    const char *action;
-    NodeTag        tag = nodeTag(parsetree);
-
-    switch (tag)
-    {
-        case T_VariableSetStmt:
-            action = "set";
-            break;
-        case T_AlterSystemStmt:
-            action = "alter system";
-            break;
-        case T_LoadStmt:
-            action = "load";
-            break;
-        default:
-            action = nodetag_to_string(tag);
-            break;
-    }
+    const char *action = GetCommandTagName(CreateCommandTag(parsetree));

     audit_attempt("process utility",
                   pstrdup(action),
@@ -434,1304 +415,6 @@ REGRESS_utility_command(PlannedStmt *pstmt,
                   NULL);
 }

-static const char *
-nodetag_to_string(NodeTag tag)
-{
-    switch (tag)
-    {
-        case T_Invalid:
-            return "Invalid";
-            break;
-        case T_IndexInfo:
-            return "IndexInfo";
-            break;
-        case T_ExprContext:
-            return "ExprContext";
-            break;
-        case T_ProjectionInfo:
-            return "ProjectionInfo";
-            break;
-        case T_JunkFilter:
-            return "JunkFilter";
-            break;
-        case T_OnConflictSetState:
-            return "OnConflictSetState";
-            break;
-        case T_ResultRelInfo:
-            return "ResultRelInfo";
-            break;
-        case T_EState:
-            return "EState";
-            break;
-        case T_TupleTableSlot:
-            return "TupleTableSlot";
-            break;
-        case T_Result:
-            return "Result";
-            break;
-        case T_ProjectSet:
-            return "ProjectSet";
-            break;
-        case T_ModifyTable:
-            return "ModifyTable";
-            break;
-        case T_Append:
-            return "Append";
-            break;
-        case T_MergeAppend:
-            return "MergeAppend";
-            break;
-        case T_RecursiveUnion:
-            return "RecursiveUnion";
-            break;
-        case T_BitmapAnd:
-            return "BitmapAnd";
-            break;
-        case T_BitmapOr:
-            return "BitmapOr";
-            break;
-        case T_SeqScan:
-            return "SeqScan";
-            break;
-        case T_SampleScan:
-            return "SampleScan";
-            break;
-        case T_IndexScan:
-            return "IndexScan";
-            break;
-        case T_IndexOnlyScan:
-            return "IndexOnlyScan";
-            break;
-        case T_BitmapIndexScan:
-            return "BitmapIndexScan";
-            break;
-        case T_BitmapHeapScan:
-            return "BitmapHeapScan";
-            break;
-        case T_TidScan:
-            return "TidScan";
-            break;
-        case T_TidRangeScan:
-            return "TidRangeScan";
-            break;
-        case T_SubqueryScan:
-            return "SubqueryScan";
-            break;
-        case T_FunctionScan:
-            return "FunctionScan";
-            break;
-        case T_ValuesScan:
-            return "ValuesScan";
-            break;
-        case T_TableFuncScan:
-            return "TableFuncScan";
-            break;
-        case T_CteScan:
-            return "CteScan";
-            break;
-        case T_NamedTuplestoreScan:
-            return "NamedTuplestoreScan";
-            break;
-        case T_WorkTableScan:
-            return "WorkTableScan";
-            break;
-        case T_ForeignScan:
-            return "ForeignScan";
-            break;
-        case T_CustomScan:
-            return "CustomScan";
-            break;
-        case T_NestLoop:
-            return "NestLoop";
-            break;
-        case T_MergeJoin:
-            return "MergeJoin";
-            break;
-        case T_HashJoin:
-            return "HashJoin";
-            break;
-        case T_Material:
-            return "Material";
-            break;
-        case T_Memoize:
-            return "Memoize";
-            break;
-        case T_Sort:
-            return "Sort";
-            break;
-        case T_IncrementalSort:
-            return "IncrementalSort";
-            break;
-        case T_Group:
-            return "Group";
-            break;
-        case T_Agg:
-            return "Agg";
-            break;
-        case T_WindowAgg:
-            return "WindowAgg";
-            break;
-        case T_Unique:
-            return "Unique";
-            break;
-        case T_Gather:
-            return "Gather";
-            break;
-        case T_GatherMerge:
-            return "GatherMerge";
-            break;
-        case T_Hash:
-            return "Hash";
-            break;
-        case T_SetOp:
-            return "SetOp";
-            break;
-        case T_LockRows:
-            return "LockRows";
-            break;
-        case T_Limit:
-            return "Limit";
-            break;
-        case T_NestLoopParam:
-            return "NestLoopParam";
-            break;
-        case T_PlanRowMark:
-            return "PlanRowMark";
-            break;
-        case T_PartitionPruneInfo:
-            return "PartitionPruneInfo";
-            break;
-        case T_PartitionedRelPruneInfo:
-            return "PartitionedRelPruneInfo";
-            break;
-        case T_PartitionPruneStepOp:
-            return "PartitionPruneStepOp";
-            break;
-        case T_PartitionPruneStepCombine:
-            return "PartitionPruneStepCombine";
-            break;
-        case T_PlanInvalItem:
-            return "PlanInvalItem";
-            break;
-        case T_ResultState:
-            return "ResultState";
-            break;
-        case T_ProjectSetState:
-            return "ProjectSetState";
-            break;
-        case T_ModifyTableState:
-            return "ModifyTableState";
-            break;
-        case T_AppendState:
-            return "AppendState";
-            break;
-        case T_MergeAppendState:
-            return "MergeAppendState";
-            break;
-        case T_RecursiveUnionState:
-            return "RecursiveUnionState";
-            break;
-        case T_BitmapAndState:
-            return "BitmapAndState";
-            break;
-        case T_BitmapOrState:
-            return "BitmapOrState";
-            break;
-        case T_ScanState:
-            return "ScanState";
-            break;
-        case T_SeqScanState:
-            return "SeqScanState";
-            break;
-        case T_SampleScanState:
-            return "SampleScanState";
-            break;
-        case T_IndexScanState:
-            return "IndexScanState";
-            break;
-        case T_IndexOnlyScanState:
-            return "IndexOnlyScanState";
-            break;
-        case T_BitmapIndexScanState:
-            return "BitmapIndexScanState";
-            break;
-        case T_BitmapHeapScanState:
-            return "BitmapHeapScanState";
-            break;
-        case T_TidScanState:
-            return "TidScanState";
-            break;
-        case T_TidRangeScanState:
-            return "TidRangeScanState";
-            break;
-        case T_SubqueryScanState:
-            return "SubqueryScanState";
-            break;
-        case T_FunctionScanState:
-            return "FunctionScanState";
-            break;
-        case T_TableFuncScanState:
-            return "TableFuncScanState";
-            break;
-        case T_ValuesScanState:
-            return "ValuesScanState";
-            break;
-        case T_CteScanState:
-            return "CteScanState";
-            break;
-        case T_NamedTuplestoreScanState:
-            return "NamedTuplestoreScanState";
-            break;
-        case T_WorkTableScanState:
-            return "WorkTableScanState";
-            break;
-        case T_ForeignScanState:
-            return "ForeignScanState";
-            break;
-        case T_CustomScanState:
-            return "CustomScanState";
-            break;
-        case T_JoinState:
-            return "JoinState";
-            break;
-        case T_NestLoopState:
-            return "NestLoopState";
-            break;
-        case T_MergeJoinState:
-            return "MergeJoinState";
-            break;
-        case T_HashJoinState:
-            return "HashJoinState";
-            break;
-        case T_MaterialState:
-            return "MaterialState";
-            break;
-        case T_MemoizeState:
-            return "MemoizeState";
-            break;
-        case T_SortState:
-            return "SortState";
-            break;
-        case T_IncrementalSortState:
-            return "IncrementalSortState";
-            break;
-        case T_GroupState:
-            return "GroupState";
-            break;
-        case T_AggState:
-            return "AggState";
-            break;
-        case T_WindowAggState:
-            return "WindowAggState";
-            break;
-        case T_UniqueState:
-            return "UniqueState";
-            break;
-        case T_GatherState:
-            return "GatherState";
-            break;
-        case T_GatherMergeState:
-            return "GatherMergeState";
-            break;
-        case T_HashState:
-            return "HashState";
-            break;
-        case T_SetOpState:
-            return "SetOpState";
-            break;
-        case T_LockRowsState:
-            return "LockRowsState";
-            break;
-        case T_LimitState:
-            return "LimitState";
-            break;
-        case T_Alias:
-            return "Alias";
-            break;
-        case T_RangeVar:
-            return "RangeVar";
-            break;
-        case T_TableFunc:
-            return "TableFunc";
-            break;
-        case T_Var:
-            return "Var";
-            break;
-        case T_Const:
-            return "Const";
-            break;
-        case T_Param:
-            return "Param";
-            break;
-        case T_Aggref:
-            return "Aggref";
-            break;
-        case T_GroupingFunc:
-            return "GroupingFunc";
-            break;
-        case T_WindowFunc:
-            return "WindowFunc";
-            break;
-        case T_SubscriptingRef:
-            return "SubscriptingRef";
-            break;
-        case T_FuncExpr:
-            return "FuncExpr";
-            break;
-        case T_NamedArgExpr:
-            return "NamedArgExpr";
-            break;
-        case T_OpExpr:
-            return "OpExpr";
-            break;
-        case T_DistinctExpr:
-            return "DistinctExpr";
-            break;
-        case T_NullIfExpr:
-            return "NullIfExpr";
-            break;
-        case T_ScalarArrayOpExpr:
-            return "ScalarArrayOpExpr";
-            break;
-        case T_BoolExpr:
-            return "BoolExpr";
-            break;
-        case T_SubLink:
-            return "SubLink";
-            break;
-        case T_SubPlan:
-            return "SubPlan";
-            break;
-        case T_AlternativeSubPlan:
-            return "AlternativeSubPlan";
-            break;
-        case T_FieldSelect:
-            return "FieldSelect";
-            break;
-        case T_FieldStore:
-            return "FieldStore";
-            break;
-        case T_RelabelType:
-            return "RelabelType";
-            break;
-        case T_CoerceViaIO:
-            return "CoerceViaIO";
-            break;
-        case T_ArrayCoerceExpr:
-            return "ArrayCoerceExpr";
-            break;
-        case T_ConvertRowtypeExpr:
-            return "ConvertRowtypeExpr";
-            break;
-        case T_CollateExpr:
-            return "CollateExpr";
-            break;
-        case T_CaseExpr:
-            return "CaseExpr";
-            break;
-        case T_CaseWhen:
-            return "CaseWhen";
-            break;
-        case T_CaseTestExpr:
-            return "CaseTestExpr";
-            break;
-        case T_ArrayExpr:
-            return "ArrayExpr";
-            break;
-        case T_RowExpr:
-            return "RowExpr";
-            break;
-        case T_RowCompareExpr:
-            return "RowCompareExpr";
-            break;
-        case T_CoalesceExpr:
-            return "CoalesceExpr";
-            break;
-        case T_MinMaxExpr:
-            return "MinMaxExpr";
-            break;
-        case T_SQLValueFunction:
-            return "SQLValueFunction";
-            break;
-        case T_XmlExpr:
-            return "XmlExpr";
-            break;
-        case T_NullTest:
-            return "NullTest";
-            break;
-        case T_BooleanTest:
-            return "BooleanTest";
-            break;
-        case T_CoerceToDomain:
-            return "CoerceToDomain";
-            break;
-        case T_CoerceToDomainValue:
-            return "CoerceToDomainValue";
-            break;
-        case T_SetToDefault:
-            return "SetToDefault";
-            break;
-        case T_CurrentOfExpr:
-            return "CurrentOfExpr";
-            break;
-        case T_NextValueExpr:
-            return "NextValueExpr";
-            break;
-        case T_InferenceElem:
-            return "InferenceElem";
-            break;
-        case T_TargetEntry:
-            return "TargetEntry";
-            break;
-        case T_RangeTblRef:
-            return "RangeTblRef";
-            break;
-        case T_JoinExpr:
-            return "JoinExpr";
-            break;
-        case T_FromExpr:
-            return "FromExpr";
-            break;
-        case T_OnConflictExpr:
-            return "OnConflictExpr";
-            break;
-        case T_IntoClause:
-            return "IntoClause";
-            break;
-        case T_ExprState:
-            return "ExprState";
-            break;
-        case T_WindowFuncExprState:
-            return "WindowFuncExprState";
-            break;
-        case T_SetExprState:
-            return "SetExprState";
-            break;
-        case T_SubPlanState:
-            return "SubPlanState";
-            break;
-        case T_DomainConstraintState:
-            return "DomainConstraintState";
-            break;
-        case T_PlannerInfo:
-            return "PlannerInfo";
-            break;
-        case T_PlannerGlobal:
-            return "PlannerGlobal";
-            break;
-        case T_RelOptInfo:
-            return "RelOptInfo";
-            break;
-        case T_IndexOptInfo:
-            return "IndexOptInfo";
-            break;
-        case T_ForeignKeyOptInfo:
-            return "ForeignKeyOptInfo";
-            break;
-        case T_ParamPathInfo:
-            return "ParamPathInfo";
-            break;
-        case T_Path:
-            return "Path";
-            break;
-        case T_IndexPath:
-            return "IndexPath";
-            break;
-        case T_BitmapHeapPath:
-            return "BitmapHeapPath";
-            break;
-        case T_BitmapAndPath:
-            return "BitmapAndPath";
-            break;
-        case T_BitmapOrPath:
-            return "BitmapOrPath";
-            break;
-        case T_TidPath:
-            return "TidPath";
-            break;
-        case T_TidRangePath:
-            return "TidRangePath";
-            break;
-        case T_SubqueryScanPath:
-            return "SubqueryScanPath";
-            break;
-        case T_ForeignPath:
-            return "ForeignPath";
-            break;
-        case T_CustomPath:
-            return "CustomPath";
-            break;
-        case T_NestPath:
-            return "NestPath";
-            break;
-        case T_MergePath:
-            return "MergePath";
-            break;
-        case T_HashPath:
-            return "HashPath";
-            break;
-        case T_AppendPath:
-            return "AppendPath";
-            break;
-        case T_MergeAppendPath:
-            return "MergeAppendPath";
-            break;
-        case T_GroupResultPath:
-            return "GroupResultPath";
-            break;
-        case T_MaterialPath:
-            return "MaterialPath";
-            break;
-        case T_MemoizePath:
-            return "MemoizePath";
-            break;
-        case T_UniquePath:
-            return "UniquePath";
-            break;
-        case T_GatherPath:
-            return "GatherPath";
-            break;
-        case T_GatherMergePath:
-            return "GatherMergePath";
-            break;
-        case T_ProjectionPath:
-            return "ProjectionPath";
-            break;
-        case T_ProjectSetPath:
-            return "ProjectSetPath";
-            break;
-        case T_SortPath:
-            return "SortPath";
-            break;
-        case T_IncrementalSortPath:
-            return "IncrementalSortPath";
-            break;
-        case T_GroupPath:
-            return "GroupPath";
-            break;
-        case T_UpperUniquePath:
-            return "UpperUniquePath";
-            break;
-        case T_AggPath:
-            return "AggPath";
-            break;
-        case T_GroupingSetsPath:
-            return "GroupingSetsPath";
-            break;
-        case T_MinMaxAggPath:
-            return "MinMaxAggPath";
-            break;
-        case T_WindowAggPath:
-            return "WindowAggPath";
-            break;
-        case T_SetOpPath:
-            return "SetOpPath";
-            break;
-        case T_RecursiveUnionPath:
-            return "RecursiveUnionPath";
-            break;
-        case T_LockRowsPath:
-            return "LockRowsPath";
-            break;
-        case T_ModifyTablePath:
-            return "ModifyTablePath";
-            break;
-        case T_LimitPath:
-            return "LimitPath";
-            break;
-        case T_EquivalenceClass:
-            return "EquivalenceClass";
-            break;
-        case T_EquivalenceMember:
-            return "EquivalenceMember";
-            break;
-        case T_PathKey:
-            return "PathKey";
-            break;
-        case T_PathTarget:
-            return "PathTarget";
-            break;
-        case T_RestrictInfo:
-            return "RestrictInfo";
-            break;
-        case T_IndexClause:
-            return "IndexClause";
-            break;
-        case T_PlaceHolderVar:
-            return "PlaceHolderVar";
-            break;
-        case T_SpecialJoinInfo:
-            return "SpecialJoinInfo";
-            break;
-        case T_AppendRelInfo:
-            return "AppendRelInfo";
-            break;
-        case T_RowIdentityVarInfo:
-            return "RowIdentityVarInfo";
-            break;
-        case T_PlaceHolderInfo:
-            return "PlaceHolderInfo";
-            break;
-        case T_MinMaxAggInfo:
-            return "MinMaxAggInfo";
-            break;
-        case T_PlannerParamItem:
-            return "PlannerParamItem";
-            break;
-        case T_RollupData:
-            return "RollupData";
-            break;
-        case T_GroupingSetData:
-            return "GroupingSetData";
-            break;
-        case T_StatisticExtInfo:
-            return "StatisticExtInfo";
-            break;
-        case T_AllocSetContext:
-            return "AllocSetContext";
-            break;
-        case T_SlabContext:
-            return "SlabContext";
-            break;
-        case T_GenerationContext:
-            return "GenerationContext";
-            break;
-        case T_Integer:
-            return "Integer";
-            break;
-        case T_Float:
-            return "Float";
-            break;
-        case T_Boolean:
-            return "Boolean";
-            break;
-        case T_String:
-            return "String";
-            break;
-        case T_BitString:
-            return "BitString";
-            break;
-        case T_List:
-            return "List";
-            break;
-        case T_IntList:
-            return "IntList";
-            break;
-        case T_OidList:
-            return "OidList";
-            break;
-        case T_XidList:
-            return "XidList";
-            break;
-        case T_ExtensibleNode:
-            return "ExtensibleNode";
-            break;
-        case T_RawStmt:
-            return "RawStmt";
-            break;
-        case T_Query:
-            return "Query";
-            break;
-        case T_PlannedStmt:
-            return "PlannedStmt";
-            break;
-        case T_InsertStmt:
-            return "InsertStmt";
-            break;
-        case T_DeleteStmt:
-            return "DeleteStmt";
-            break;
-        case T_UpdateStmt:
-            return "UpdateStmt";
-            break;
-        case T_SelectStmt:
-            return "SelectStmt";
-            break;
-        case T_ReturnStmt:
-            return "ReturnStmt";
-            break;
-        case T_PLAssignStmt:
-            return "PLAssignStmt";
-            break;
-        case T_AlterTableStmt:
-            return "AlterTableStmt";
-            break;
-        case T_AlterTableCmd:
-            return "AlterTableCmd";
-            break;
-        case T_AlterDomainStmt:
-            return "AlterDomainStmt";
-            break;
-        case T_SetOperationStmt:
-            return "SetOperationStmt";
-            break;
-        case T_GrantStmt:
-            return "GrantStmt";
-            break;
-        case T_GrantRoleStmt:
-            return "GrantRoleStmt";
-            break;
-        case T_AlterDefaultPrivilegesStmt:
-            return "AlterDefaultPrivilegesStmt";
-            break;
-        case T_ClosePortalStmt:
-            return "ClosePortalStmt";
-            break;
-        case T_ClusterStmt:
-            return "ClusterStmt";
-            break;
-        case T_CopyStmt:
-            return "CopyStmt";
-            break;
-        case T_CreateStmt:
-            return "CreateStmt";
-            break;
-        case T_DefineStmt:
-            return "DefineStmt";
-            break;
-        case T_DropStmt:
-            return "DropStmt";
-            break;
-        case T_TruncateStmt:
-            return "TruncateStmt";
-            break;
-        case T_CommentStmt:
-            return "CommentStmt";
-            break;
-        case T_FetchStmt:
-            return "FetchStmt";
-            break;
-        case T_IndexStmt:
-            return "IndexStmt";
-            break;
-        case T_CreateFunctionStmt:
-            return "CreateFunctionStmt";
-            break;
-        case T_AlterFunctionStmt:
-            return "AlterFunctionStmt";
-            break;
-        case T_DoStmt:
-            return "DoStmt";
-            break;
-        case T_RenameStmt:
-            return "RenameStmt";
-            break;
-        case T_RuleStmt:
-            return "RuleStmt";
-            break;
-        case T_NotifyStmt:
-            return "NotifyStmt";
-            break;
-        case T_ListenStmt:
-            return "ListenStmt";
-            break;
-        case T_UnlistenStmt:
-            return "UnlistenStmt";
-            break;
-        case T_TransactionStmt:
-            return "TransactionStmt";
-            break;
-        case T_ViewStmt:
-            return "ViewStmt";
-            break;
-        case T_LoadStmt:
-            return "LoadStmt";
-            break;
-        case T_CreateDomainStmt:
-            return "CreateDomainStmt";
-            break;
-        case T_CreatedbStmt:
-            return "CreatedbStmt";
-            break;
-        case T_DropdbStmt:
-            return "DropdbStmt";
-            break;
-        case T_VacuumStmt:
-            return "VacuumStmt";
-            break;
-        case T_ExplainStmt:
-            return "ExplainStmt";
-            break;
-        case T_CreateTableAsStmt:
-            return "CreateTableAsStmt";
-            break;
-        case T_CreateSeqStmt:
-            return "CreateSeqStmt";
-            break;
-        case T_AlterSeqStmt:
-            return "AlterSeqStmt";
-            break;
-        case T_VariableSetStmt:
-            return "VariableSetStmt";
-            break;
-        case T_VariableShowStmt:
-            return "VariableShowStmt";
-            break;
-        case T_DiscardStmt:
-            return "DiscardStmt";
-            break;
-        case T_CreateTrigStmt:
-            return "CreateTrigStmt";
-            break;
-        case T_CreatePLangStmt:
-            return "CreatePLangStmt";
-            break;
-        case T_CreateRoleStmt:
-            return "CreateRoleStmt";
-            break;
-        case T_AlterRoleStmt:
-            return "AlterRoleStmt";
-            break;
-        case T_DropRoleStmt:
-            return "DropRoleStmt";
-            break;
-        case T_LockStmt:
-            return "LockStmt";
-            break;
-        case T_ConstraintsSetStmt:
-            return "ConstraintsSetStmt";
-            break;
-        case T_ReindexStmt:
-            return "ReindexStmt";
-            break;
-        case T_CheckPointStmt:
-            return "CheckPointStmt";
-            break;
-        case T_CreateSchemaStmt:
-            return "CreateSchemaStmt";
-            break;
-        case T_AlterDatabaseStmt:
-            return "AlterDatabaseStmt";
-            break;
-        case T_AlterDatabaseRefreshCollStmt:
-            return "AlterDatabaseRefreshCollStmt";
-            break;
-        case T_AlterDatabaseSetStmt:
-            return "AlterDatabaseSetStmt";
-            break;
-        case T_AlterRoleSetStmt:
-            return "AlterRoleSetStmt";
-            break;
-        case T_CreateConversionStmt:
-            return "CreateConversionStmt";
-            break;
-        case T_CreateCastStmt:
-            return "CreateCastStmt";
-            break;
-        case T_CreateOpClassStmt:
-            return "CreateOpClassStmt";
-            break;
-        case T_CreateOpFamilyStmt:
-            return "CreateOpFamilyStmt";
-            break;
-        case T_AlterOpFamilyStmt:
-            return "AlterOpFamilyStmt";
-            break;
-        case T_PrepareStmt:
-            return "PrepareStmt";
-            break;
-        case T_ExecuteStmt:
-            return "ExecuteStmt";
-            break;
-        case T_DeallocateStmt:
-            return "DeallocateStmt";
-            break;
-        case T_DeclareCursorStmt:
-            return "DeclareCursorStmt";
-            break;
-        case T_CreateTableSpaceStmt:
-            return "CreateTableSpaceStmt";
-            break;
-        case T_DropTableSpaceStmt:
-            return "DropTableSpaceStmt";
-            break;
-        case T_AlterObjectDependsStmt:
-            return "AlterObjectDependsStmt";
-            break;
-        case T_AlterObjectSchemaStmt:
-            return "AlterObjectSchemaStmt";
-            break;
-        case T_AlterOwnerStmt:
-            return "AlterOwnerStmt";
-            break;
-        case T_AlterOperatorStmt:
-            return "AlterOperatorStmt";
-            break;
-        case T_AlterTypeStmt:
-            return "AlterTypeStmt";
-            break;
-        case T_DropOwnedStmt:
-            return "DropOwnedStmt";
-            break;
-        case T_ReassignOwnedStmt:
-            return "ReassignOwnedStmt";
-            break;
-        case T_CompositeTypeStmt:
-            return "CompositeTypeStmt";
-            break;
-        case T_CreateEnumStmt:
-            return "CreateEnumStmt";
-            break;
-        case T_CreateRangeStmt:
-            return "CreateRangeStmt";
-            break;
-        case T_AlterEnumStmt:
-            return "AlterEnumStmt";
-            break;
-        case T_AlterTSDictionaryStmt:
-            return "AlterTSDictionaryStmt";
-            break;
-        case T_AlterTSConfigurationStmt:
-            return "AlterTSConfigurationStmt";
-            break;
-        case T_CreateFdwStmt:
-            return "CreateFdwStmt";
-            break;
-        case T_AlterFdwStmt:
-            return "AlterFdwStmt";
-            break;
-        case T_CreateForeignServerStmt:
-            return "CreateForeignServerStmt";
-            break;
-        case T_AlterForeignServerStmt:
-            return "AlterForeignServerStmt";
-            break;
-        case T_CreateUserMappingStmt:
-            return "CreateUserMappingStmt";
-            break;
-        case T_AlterUserMappingStmt:
-            return "AlterUserMappingStmt";
-            break;
-        case T_DropUserMappingStmt:
-            return "DropUserMappingStmt";
-            break;
-        case T_AlterTableSpaceOptionsStmt:
-            return "AlterTableSpaceOptionsStmt";
-            break;
-        case T_AlterTableMoveAllStmt:
-            return "AlterTableMoveAllStmt";
-            break;
-        case T_SecLabelStmt:
-            return "SecLabelStmt";
-            break;
-        case T_CreateForeignTableStmt:
-            return "CreateForeignTableStmt";
-            break;
-        case T_ImportForeignSchemaStmt:
-            return "ImportForeignSchemaStmt";
-            break;
-        case T_CreateExtensionStmt:
-            return "CreateExtensionStmt";
-            break;
-        case T_AlterExtensionStmt:
-            return "AlterExtensionStmt";
-            break;
-        case T_AlterExtensionContentsStmt:
-            return "AlterExtensionContentsStmt";
-            break;
-        case T_CreateEventTrigStmt:
-            return "CreateEventTrigStmt";
-            break;
-        case T_AlterEventTrigStmt:
-            return "AlterEventTrigStmt";
-            break;
-        case T_RefreshMatViewStmt:
-            return "RefreshMatViewStmt";
-            break;
-        case T_ReplicaIdentityStmt:
-            return "ReplicaIdentityStmt";
-            break;
-        case T_AlterSystemStmt:
-            return "AlterSystemStmt";
-            break;
-        case T_CreatePolicyStmt:
-            return "CreatePolicyStmt";
-            break;
-        case T_AlterPolicyStmt:
-            return "AlterPolicyStmt";
-            break;
-        case T_CreateTransformStmt:
-            return "CreateTransformStmt";
-            break;
-        case T_CreateAmStmt:
-            return "CreateAmStmt";
-            break;
-        case T_CreatePublicationStmt:
-            return "CreatePublicationStmt";
-            break;
-        case T_AlterPublicationStmt:
-            return "AlterPublicationStmt";
-            break;
-        case T_CreateSubscriptionStmt:
-            return "CreateSubscriptionStmt";
-            break;
-        case T_AlterSubscriptionStmt:
-            return "AlterSubscriptionStmt";
-            break;
-        case T_DropSubscriptionStmt:
-            return "DropSubscriptionStmt";
-            break;
-        case T_CreateStatsStmt:
-            return "CreateStatsStmt";
-            break;
-        case T_AlterCollationStmt:
-            return "AlterCollationStmt";
-            break;
-        case T_CallStmt:
-            return "CallStmt";
-            break;
-        case T_AlterStatsStmt:
-            return "AlterStatsStmt";
-            break;
-        case T_A_Expr:
-            return "A_Expr";
-            break;
-        case T_ColumnRef:
-            return "ColumnRef";
-            break;
-        case T_ParamRef:
-            return "ParamRef";
-            break;
-        case T_A_Const:
-            return "A_Const";
-            break;
-        case T_FuncCall:
-            return "FuncCall";
-            break;
-        case T_A_Star:
-            return "A_Star";
-            break;
-        case T_A_Indices:
-            return "A_Indices";
-            break;
-        case T_A_Indirection:
-            return "A_Indirection";
-            break;
-        case T_A_ArrayExpr:
-            return "A_ArrayExpr";
-            break;
-        case T_ResTarget:
-            return "ResTarget";
-            break;
-        case T_MultiAssignRef:
-            return "MultiAssignRef";
-            break;
-        case T_TypeCast:
-            return "TypeCast";
-            break;
-        case T_CollateClause:
-            return "CollateClause";
-            break;
-        case T_SortBy:
-            return "SortBy";
-            break;
-        case T_WindowDef:
-            return "WindowDef";
-            break;
-        case T_RangeSubselect:
-            return "RangeSubselect";
-            break;
-        case T_RangeFunction:
-            return "RangeFunction";
-            break;
-        case T_RangeTableSample:
-            return "RangeTableSample";
-            break;
-        case T_RangeTableFunc:
-            return "RangeTableFunc";
-            break;
-        case T_RangeTableFuncCol:
-            return "RangeTableFuncCol";
-            break;
-        case T_TypeName:
-            return "TypeName";
-            break;
-        case T_ColumnDef:
-            return "ColumnDef";
-            break;
-        case T_IndexElem:
-            return "IndexElem";
-            break;
-        case T_StatsElem:
-            return "StatsElem";
-            break;
-        case T_Constraint:
-            return "Constraint";
-            break;
-        case T_DefElem:
-            return "DefElem";
-            break;
-        case T_RangeTblEntry:
-            return "RangeTblEntry";
-            break;
-        case T_RangeTblFunction:
-            return "RangeTblFunction";
-            break;
-        case T_TableSampleClause:
-            return "TableSampleClause";
-            break;
-        case T_WithCheckOption:
-            return "WithCheckOption";
-            break;
-        case T_SortGroupClause:
-            return "SortGroupClause";
-            break;
-        case T_GroupingSet:
-            return "GroupingSet";
-            break;
-        case T_WindowClause:
-            return "WindowClause";
-            break;
-        case T_ObjectWithArgs:
-            return "ObjectWithArgs";
-            break;
-        case T_AccessPriv:
-            return "AccessPriv";
-            break;
-        case T_CreateOpClassItem:
-            return "CreateOpClassItem";
-            break;
-        case T_TableLikeClause:
-            return "TableLikeClause";
-            break;
-        case T_FunctionParameter:
-            return "FunctionParameter";
-            break;
-        case T_LockingClause:
-            return "LockingClause";
-            break;
-        case T_RowMarkClause:
-            return "RowMarkClause";
-            break;
-        case T_XmlSerialize:
-            return "XmlSerialize";
-            break;
-        case T_WithClause:
-            return "WithClause";
-            break;
-        case T_InferClause:
-            return "InferClause";
-            break;
-        case T_OnConflictClause:
-            return "OnConflictClause";
-            break;
-        case T_CTESearchClause:
-            return "CTESearchClause";
-            break;
-        case T_CTECycleClause:
-            return "CTECycleClause";
-            break;
-        case T_CommonTableExpr:
-            return "CommonTableExpr";
-            break;
-        case T_RoleSpec:
-            return "RoleSpec";
-            break;
-        case T_TriggerTransition:
-            return "TriggerTransition";
-            break;
-        case T_PartitionElem:
-            return "PartitionElem";
-            break;
-        case T_PartitionSpec:
-            return "PartitionSpec";
-            break;
-        case T_PartitionBoundSpec:
-            return "PartitionBoundSpec";
-            break;
-        case T_PartitionRangeDatum:
-            return "PartitionRangeDatum";
-            break;
-        case T_PartitionCmd:
-            return "PartitionCmd";
-            break;
-        case T_VacuumRelation:
-            return "VacuumRelation";
-            break;
-        case T_PublicationObjSpec:
-            return "PublicationObjSpec";
-            break;
-        case T_PublicationTable:
-            return "PublicationTable";
-            break;
-        case T_IdentifySystemCmd:
-            return "IdentifySystemCmd";
-            break;
-        case T_BaseBackupCmd:
-            return "BaseBackupCmd";
-            break;
-        case T_CreateReplicationSlotCmd:
-            return "CreateReplicationSlotCmd";
-            break;
-        case T_DropReplicationSlotCmd:
-            return "DropReplicationSlotCmd";
-            break;
-        case T_ReadReplicationSlotCmd:
-            return "ReadReplicationSlotCmd";
-            break;
-        case T_StartReplicationCmd:
-            return "StartReplicationCmd";
-            break;
-        case T_TimeLineHistoryCmd:
-            return "TimeLineHistoryCmd";
-            break;
-        case T_TriggerData:
-            return "TriggerData";
-            break;
-        case T_EventTriggerData:
-            return "EventTriggerData";
-            break;
-        case T_ReturnSetInfo:
-            return "ReturnSetInfo";
-            break;
-        case T_WindowObjectData:
-            return "WindowObjectData";
-            break;
-        case T_TIDBitmap:
-            return "TIDBitmap";
-            break;
-        case T_InlineCodeBlock:
-            return "InlineCodeBlock";
-            break;
-        case T_FdwRoutine:
-            return "FdwRoutine";
-            break;
-        case T_IndexAmRoutine:
-            return "IndexAmRoutine";
-            break;
-        case T_TableAmRoutine:
-            return "TableAmRoutine";
-            break;
-        case T_TsmRoutine:
-            return "TsmRoutine";
-            break;
-        case T_ForeignKeyCacheInfo:
-            return "ForeignKeyCacheInfo";
-            break;
-        case T_CallContext:
-            return "CallContext";
-            break;
-        case T_SupportRequestSimplify:
-            return "SupportRequestSimplify";
-            break;
-        case T_SupportRequestSelectivity:
-            return "SupportRequestSelectivity";
-            break;
-        case T_SupportRequestCost:
-            return "SupportRequestCost";
-            break;
-        case T_SupportRequestRows:
-            return "SupportRequestRows";
-            break;
-        case T_SupportRequestIndexCondition:
-            return "SupportRequestIndexCondition";
-            break;
-        default:
-            break;
-    }
-    return "UNRECOGNIZED NodeTag";
-}
-
 static char *
 accesstype_to_string(ObjectAccessType access, int subId)
 {

Re: Reducing the maintenance overhead of test_oat_hooks

From
Alvaro Herrera
Date:
On 2022-Jul-30, Tom Lane wrote:

> I do not
> think that test_oat_hooks.c has any business imposing
> an extra maintenance burden on us all, so I propose
> nuking nodetag_to_string() from orbit, as attached.

+1

-- 
Álvaro Herrera         PostgreSQL Developer  —  https://www.EnterpriseDB.com/