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