1 /*-------------------------------------------------------------------------
2  *
3  * defrem.h
4  *	  POSTGRES define and remove utility definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/commands/defrem.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef DEFREM_H
15 #define DEFREM_H
16 
17 #include "catalog/objectaddress.h"
18 #include "nodes/parsenodes.h"
19 #include "utils/array.h"
20 
21 /* commands/dropcmds.c */
22 extern void RemoveObjects(DropStmt *stmt);
23 
24 /* commands/indexcmds.c */
25 extern ObjectAddress DefineIndex(Oid relationId,
26 			IndexStmt *stmt,
27 			Oid indexRelationId,
28 			bool is_alter_table,
29 			bool check_rights,
30 			bool check_not_in_use,
31 			bool skip_build,
32 			bool quiet);
33 extern Oid	ReindexIndex(RangeVar *indexRelation, int options);
34 extern Oid	ReindexTable(RangeVar *relation, int options);
35 extern void ReindexMultipleTables(const char *objectName, ReindexObjectType objectKind,
36 					  int options);
37 extern char *makeObjectName(const char *name1, const char *name2,
38 			   const char *label);
39 extern char *ChooseRelationName(const char *name1, const char *name2,
40 				   const char *label, Oid namespaceid);
41 extern bool CheckIndexCompatible(Oid oldId,
42 					 char *accessMethodName,
43 					 List *attributeList,
44 					 List *exclusionOpNames);
45 extern Oid	GetDefaultOpClass(Oid type_id, Oid am_id);
46 extern Oid ResolveOpClass(List *opclass, Oid attrType,
47 			   char *accessMethodName, Oid accessMethodId);
48 
49 /* commands/functioncmds.c */
50 extern ObjectAddress CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt);
51 extern void RemoveFunctionById(Oid funcOid);
52 extern void SetFunctionReturnType(Oid funcOid, Oid newRetType);
53 extern void SetFunctionArgType(Oid funcOid, int argIndex, Oid newArgType);
54 extern ObjectAddress AlterFunction(ParseState *pstate, AlterFunctionStmt *stmt);
55 extern ObjectAddress CreateCast(CreateCastStmt *stmt);
56 extern void DropCastById(Oid castOid);
57 extern ObjectAddress CreateTransform(CreateTransformStmt *stmt);
58 extern void DropTransformById(Oid transformOid);
59 extern void IsThereFunctionInNamespace(const char *proname, int pronargs,
60 						   oidvector *proargtypes, Oid nspOid);
61 extern void ExecuteDoStmt(DoStmt *stmt);
62 extern Oid	get_cast_oid(Oid sourcetypeid, Oid targettypeid, bool missing_ok);
63 extern Oid	get_transform_oid(Oid type_id, Oid lang_id, bool missing_ok);
64 extern void interpret_function_parameter_list(ParseState *pstate,
65 								  List *parameters,
66 								  Oid languageOid,
67 								  bool is_aggregate,
68 								  oidvector **parameterTypes,
69 								  ArrayType **allParameterTypes,
70 								  ArrayType **parameterModes,
71 								  ArrayType **parameterNames,
72 								  List **parameterDefaults,
73 								  Oid *variadicArgType,
74 								  Oid *requiredResultType);
75 
76 /* commands/operatorcmds.c */
77 extern ObjectAddress DefineOperator(List *names, List *parameters);
78 extern void RemoveOperatorById(Oid operOid);
79 extern ObjectAddress AlterOperator(AlterOperatorStmt *stmt);
80 
81 /* commands/statscmds.c */
82 extern ObjectAddress CreateStatistics(CreateStatsStmt *stmt);
83 extern void RemoveStatisticsById(Oid statsOid);
84 extern void UpdateStatisticsForTypeChange(Oid statsOid,
85 							  Oid relationOid, int attnum,
86 							  Oid oldColumnType, Oid newColumnType);
87 
88 /* commands/aggregatecmds.c */
89 extern ObjectAddress DefineAggregate(ParseState *pstate, List *name, List *args, bool oldstyle,
90 				List *parameters);
91 
92 /* commands/opclasscmds.c */
93 extern ObjectAddress DefineOpClass(CreateOpClassStmt *stmt);
94 extern ObjectAddress DefineOpFamily(CreateOpFamilyStmt *stmt);
95 extern Oid	AlterOpFamily(AlterOpFamilyStmt *stmt);
96 extern void RemoveOpClassById(Oid opclassOid);
97 extern void RemoveOpFamilyById(Oid opfamilyOid);
98 extern void RemoveAmOpEntryById(Oid entryOid);
99 extern void RemoveAmProcEntryById(Oid entryOid);
100 extern void IsThereOpClassInNamespace(const char *opcname, Oid opcmethod,
101 						  Oid opcnamespace);
102 extern void IsThereOpFamilyInNamespace(const char *opfname, Oid opfmethod,
103 						   Oid opfnamespace);
104 extern Oid	get_opclass_oid(Oid amID, List *opclassname, bool missing_ok);
105 extern Oid	get_opfamily_oid(Oid amID, List *opfamilyname, bool missing_ok);
106 
107 /* commands/tsearchcmds.c */
108 extern ObjectAddress DefineTSParser(List *names, List *parameters);
109 extern void RemoveTSParserById(Oid prsId);
110 
111 extern ObjectAddress DefineTSDictionary(List *names, List *parameters);
112 extern void RemoveTSDictionaryById(Oid dictId);
113 extern ObjectAddress AlterTSDictionary(AlterTSDictionaryStmt *stmt);
114 
115 extern ObjectAddress DefineTSTemplate(List *names, List *parameters);
116 extern void RemoveTSTemplateById(Oid tmplId);
117 
118 extern ObjectAddress DefineTSConfiguration(List *names, List *parameters,
119 					  ObjectAddress *copied);
120 extern void RemoveTSConfigurationById(Oid cfgId);
121 extern ObjectAddress AlterTSConfiguration(AlterTSConfigurationStmt *stmt);
122 
123 extern text *serialize_deflist(List *deflist);
124 extern List *deserialize_deflist(Datum txt);
125 
126 /* commands/foreigncmds.c */
127 extern ObjectAddress AlterForeignServerOwner(const char *name, Oid newOwnerId);
128 extern void AlterForeignServerOwner_oid(Oid, Oid newOwnerId);
129 extern ObjectAddress AlterForeignDataWrapperOwner(const char *name, Oid newOwnerId);
130 extern void AlterForeignDataWrapperOwner_oid(Oid fwdId, Oid newOwnerId);
131 extern ObjectAddress CreateForeignDataWrapper(CreateFdwStmt *stmt);
132 extern ObjectAddress AlterForeignDataWrapper(AlterFdwStmt *stmt);
133 extern void RemoveForeignDataWrapperById(Oid fdwId);
134 extern ObjectAddress CreateForeignServer(CreateForeignServerStmt *stmt);
135 extern ObjectAddress AlterForeignServer(AlterForeignServerStmt *stmt);
136 extern void RemoveForeignServerById(Oid srvId);
137 extern ObjectAddress CreateUserMapping(CreateUserMappingStmt *stmt);
138 extern ObjectAddress AlterUserMapping(AlterUserMappingStmt *stmt);
139 extern Oid	RemoveUserMapping(DropUserMappingStmt *stmt);
140 extern void RemoveUserMappingById(Oid umId);
141 extern void CreateForeignTable(CreateForeignTableStmt *stmt, Oid relid);
142 extern void ImportForeignSchema(ImportForeignSchemaStmt *stmt);
143 extern Datum transformGenericOptions(Oid catalogId,
144 						Datum oldOptions,
145 						List *options,
146 						Oid fdwvalidator);
147 
148 /* commands/amcmds.c */
149 extern ObjectAddress CreateAccessMethod(CreateAmStmt *stmt);
150 extern void RemoveAccessMethodById(Oid amOid);
151 extern Oid	get_index_am_oid(const char *amname, bool missing_ok);
152 extern Oid	get_am_oid(const char *amname, bool missing_ok);
153 extern char *get_am_name(Oid amOid);
154 
155 /* support routines in commands/define.c */
156 
157 extern char *defGetString(DefElem *def);
158 extern double defGetNumeric(DefElem *def);
159 extern bool defGetBoolean(DefElem *def);
160 extern int32 defGetInt32(DefElem *def);
161 extern int64 defGetInt64(DefElem *def);
162 extern List *defGetQualifiedName(DefElem *def);
163 extern TypeName *defGetTypeName(DefElem *def);
164 extern int	defGetTypeLength(DefElem *def);
165 extern List *defGetStringList(DefElem *def);
166 
167 #endif							/* DEFREM_H */
168