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) {