1 /*-------------------------------------------------------------------------
2  *
3  * deparse_utility.h
4  *
5  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
6  * Portions Copyright (c) 1994, Regents of the University of California
7  *
8  * src/include/tcop/deparse_utility.h
9  *
10  *-------------------------------------------------------------------------
11  */
12 #ifndef DEPARSE_UTILITY_H
13 #define DEPARSE_UTILITY_H
14 
15 #include "access/attnum.h"
16 #include "catalog/objectaddress.h"
17 #include "nodes/nodes.h"
18 #include "utils/aclchk_internal.h"
19 
20 
21 /*
22  * Support for keeping track of collected commands.
23  */
24 typedef enum CollectedCommandType
25 {
26 	SCT_Simple,
27 	SCT_AlterTable,
28 	SCT_Grant,
29 	SCT_AlterOpFamily,
30 	SCT_AlterDefaultPrivileges,
31 	SCT_CreateOpClass,
32 	SCT_AlterTSConfig
33 } CollectedCommandType;
34 
35 /*
36  * For ALTER TABLE commands, we keep a list of the subcommands therein.
37  */
38 typedef struct CollectedATSubcmd
39 {
40 	ObjectAddress address;		/* affected column, constraint, index, ... */
41 	Node	   *parsetree;
42 } CollectedATSubcmd;
43 
44 typedef struct CollectedCommand
45 {
46 	CollectedCommandType type;
47 
48 	bool		in_extension;
49 	Node	   *parsetree;
50 
51 	union
52 	{
53 		/* most commands */
54 		struct
55 		{
56 			ObjectAddress address;
57 			ObjectAddress secondaryObject;
58 		}			simple;
59 
60 		/* ALTER TABLE, and internal uses thereof */
61 		struct
62 		{
63 			Oid			objectId;
64 			Oid			classId;
65 			List	   *subcmds;
66 		}			alterTable;
67 
68 		/* GRANT / REVOKE */
69 		struct
70 		{
71 			InternalGrant *istmt;
72 		}			grant;
73 
74 		/* ALTER OPERATOR FAMILY */
75 		struct
76 		{
77 			ObjectAddress address;
78 			List	   *operators;
79 			List	   *procedures;
80 		}			opfam;
81 
82 		/* CREATE OPERATOR CLASS */
83 		struct
84 		{
85 			ObjectAddress address;
86 			List	   *operators;
87 			List	   *procedures;
88 		}			createopc;
89 
90 		/* ALTER TEXT SEARCH CONFIGURATION ADD/ALTER/DROP MAPPING */
91 		struct
92 		{
93 			ObjectAddress address;
94 			Oid		   *dictIds;
95 			int			ndicts;
96 		}			atscfg;
97 
98 		/* ALTER DEFAULT PRIVILEGES */
99 		struct
100 		{
101 			GrantObjectType objtype;
102 		}			defprivs;
103 	}			d;
104 
105 	struct CollectedCommand	*parent;		/* when nested */
106 } CollectedCommand;
107 
108 #endif							/* DEPARSE_UTILITY_H */
109