1/*-------------------------------------------------------------------------
2 *
3 * deparse_utility.h
4 *
5 * Portions Copyright (c) 1996-2019, 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 */
24typedef 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 */
38typedef struct CollectedATSubcmd
39{
40 ObjectAddress address; /* affected column, constraint, index, ... */
41 Node *parsetree;
42} CollectedATSubcmd;
43
44typedef 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 ObjectType objtype;
102 } defprivs;
103 } d;
104
105 struct CollectedCommand *parent; /* when nested */
106} CollectedCommand;
107
108#endif /* DEPARSE_UTILITY_H */
109