From 3451a57f77848d69ced234b7989cc0e351383cd2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 31 Jul 2022 16:58:20 -0400 Subject: [PATCH] Remove test_oat_hooks.c's nodetag_to_string(). In the short time this function has existed, it's already proven to be a nontrivial maintenance burden, since it has to be updated whenever a node tag is added or removed. Although in principle we could now automate that, I see little justification for having such functionality here at all. The function is only being applied to utility statements, for which we already have infrastructure for obtaining string names. Moreover, that infrastructure produces already-familiar-to-users names, unlike nodetag_to_string(). So, remove this function and use the existing infrastructure instead. That saves over a thousand lines of largely-unreachable code. Back-patch to v15 where this code came in. Although it seems unlikely that v15's nodetag list will change anymore, we might as well keep the two branches looking and acting alike; otherwise back-patching any test-results changes in this area will be painful. Discussion: https://postgr.es/m/843818.1659218928@sss.pgh.pa.us --- .../expected/test_oat_hooks.out | 168 +-- .../modules/test_oat_hooks/test_oat_hooks.c | 1319 +---------------- 2 files changed, 85 insertions(+), 1402 deletions(-) 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) {