1 /*-------------------------------------------------------------------------
2  *
3  * defrem.h
4  *	  POSTGRES define and remove utility definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2016, 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 skip_build,
31 			bool quiet);
32 extern Oid	ReindexIndex(RangeVar *indexRelation, int options);
33 extern Oid	ReindexTable(RangeVar *relation, int options);
34 extern void ReindexMultipleTables(const char *objectName, ReindexObjectType objectKind,
35 					  int options);
36 extern char *makeObjectName(const char *name1, const char *name2,
37 			   const char *label);
38 extern char *ChooseRelationName(const char *name1, const char *name2,
39 				   const char *label, Oid namespaceid);
40 extern bool CheckIndexCompatible(Oid oldId,
41 					 char *accessMethodName,
42 					 List *attributeList,
43 					 List *exclusionOpNames);
44 extern Oid	GetDefaultOpClass(Oid type_id, Oid am_id);
45 
46 /* commands/functioncmds.c */
47 extern ObjectAddress CreateFunction(CreateFunctionStmt *stmt, const char *queryString);
48 extern void RemoveFunctionById(Oid funcOid);
49 extern void SetFunctionReturnType(Oid funcOid, Oid newRetType);
50 extern void SetFunctionArgType(Oid funcOid, int argIndex, Oid newArgType);
51 extern ObjectAddress AlterFunction(AlterFunctionStmt *stmt);
52 extern ObjectAddress CreateCast(CreateCastStmt *stmt);
53 extern void DropCastById(Oid castOid);
54 extern ObjectAddress CreateTransform(CreateTransformStmt *stmt);
55 extern void DropTransformById(Oid transformOid);
56 extern void IsThereFunctionInNamespace(const char *proname, int pronargs,
57 						   oidvector *proargtypes, Oid nspOid);
58 extern void ExecuteDoStmt(DoStmt *stmt);
59 extern Oid	get_cast_oid(Oid sourcetypeid, Oid targettypeid, bool missing_ok);
60 extern Oid	get_transform_oid(Oid type_id, Oid lang_id, bool missing_ok);
61 extern void interpret_function_parameter_list(List *parameters,
62 								  Oid languageOid,
63 								  bool is_aggregate,
64 								  const char *queryString,
65 								  oidvector **parameterTypes,
66 								  ArrayType **allParameterTypes,
67 								  ArrayType **parameterModes,
68 								  ArrayType **parameterNames,
69 								  List **parameterDefaults,
70 								  Oid *variadicArgType,
71 								  Oid *requiredResultType);
72 
73 /* commands/operatorcmds.c */
74 extern ObjectAddress DefineOperator(List *names, List *parameters);
75 extern void RemoveOperatorById(Oid operOid);
76 extern ObjectAddress AlterOperator(AlterOperatorStmt *stmt);
77 
78 /* commands/aggregatecmds.c */
79 extern ObjectAddress DefineAggregate(List *name, List *args, bool oldstyle,
80 				List *parameters, const char *queryString);
81 
82 /* commands/opclasscmds.c */
83 extern ObjectAddress DefineOpClass(CreateOpClassStmt *stmt);
84 extern ObjectAddress DefineOpFamily(CreateOpFamilyStmt *stmt);
85 extern Oid	AlterOpFamily(AlterOpFamilyStmt *stmt);
86 extern void RemoveOpClassById(Oid opclassOid);
87 extern void RemoveOpFamilyById(Oid opfamilyOid);
88 extern void RemoveAmOpEntryById(Oid entryOid);
89 extern void RemoveAmProcEntryById(Oid entryOid);
90 extern void IsThereOpClassInNamespace(const char *opcname, Oid opcmethod,
91 						  Oid opcnamespace);
92 extern void IsThereOpFamilyInNamespace(const char *opfname, Oid opfmethod,
93 						   Oid opfnamespace);
94 extern Oid	get_opclass_oid(Oid amID, List *opclassname, bool missing_ok);
95 extern Oid	get_opfamily_oid(Oid amID, List *opfamilyname, bool missing_ok);
96 
97 /* commands/tsearchcmds.c */
98 extern ObjectAddress DefineTSParser(List *names, List *parameters);
99 extern void RemoveTSParserById(Oid prsId);
100 
101 extern ObjectAddress DefineTSDictionary(List *names, List *parameters);
102 extern void RemoveTSDictionaryById(Oid dictId);
103 extern ObjectAddress AlterTSDictionary(AlterTSDictionaryStmt *stmt);
104 
105 extern ObjectAddress DefineTSTemplate(List *names, List *parameters);
106 extern void RemoveTSTemplateById(Oid tmplId);
107 
108 extern ObjectAddress DefineTSConfiguration(List *names, List *parameters,
109 					  ObjectAddress *copied);
110 extern void RemoveTSConfigurationById(Oid cfgId);
111 extern ObjectAddress AlterTSConfiguration(AlterTSConfigurationStmt *stmt);
112 
113 extern text *serialize_deflist(List *deflist);
114 extern List *deserialize_deflist(Datum txt);
115 
116 /* commands/foreigncmds.c */
117 extern ObjectAddress AlterForeignServerOwner(const char *name, Oid newOwnerId);
118 extern void AlterForeignServerOwner_oid(Oid, Oid newOwnerId);
119 extern ObjectAddress AlterForeignDataWrapperOwner(const char *name, Oid newOwnerId);
120 extern void AlterForeignDataWrapperOwner_oid(Oid fwdId, Oid newOwnerId);
121 extern ObjectAddress CreateForeignDataWrapper(CreateFdwStmt *stmt);
122 extern ObjectAddress AlterForeignDataWrapper(AlterFdwStmt *stmt);
123 extern void RemoveForeignDataWrapperById(Oid fdwId);
124 extern ObjectAddress CreateForeignServer(CreateForeignServerStmt *stmt);
125 extern ObjectAddress AlterForeignServer(AlterForeignServerStmt *stmt);
126 extern void RemoveForeignServerById(Oid srvId);
127 extern ObjectAddress CreateUserMapping(CreateUserMappingStmt *stmt);
128 extern ObjectAddress AlterUserMapping(AlterUserMappingStmt *stmt);
129 extern Oid	RemoveUserMapping(DropUserMappingStmt *stmt);
130 extern void RemoveUserMappingById(Oid umId);
131 extern void CreateForeignTable(CreateForeignTableStmt *stmt, Oid relid);
132 extern void ImportForeignSchema(ImportForeignSchemaStmt *stmt);
133 extern Datum transformGenericOptions(Oid catalogId,
134 						Datum oldOptions,
135 						List *options,
136 						Oid fdwvalidator);
137 
138 /* commands/amcmds.c */
139 extern ObjectAddress CreateAccessMethod(CreateAmStmt *stmt);
140 extern void RemoveAccessMethodById(Oid amOid);
141 extern Oid	get_index_am_oid(const char *amname, bool missing_ok);
142 extern Oid	get_am_oid(const char *amname, bool missing_ok);
143 extern char *get_am_name(Oid amOid);
144 
145 /* support routines in commands/define.c */
146 
147 extern char *defGetString(DefElem *def);
148 extern double defGetNumeric(DefElem *def);
149 extern bool defGetBoolean(DefElem *def);
150 extern int32 defGetInt32(DefElem *def);
151 extern int64 defGetInt64(DefElem *def);
152 extern List *defGetQualifiedName(DefElem *def);
153 extern TypeName *defGetTypeName(DefElem *def);
154 extern int	defGetTypeLength(DefElem *def);
155 extern DefElem *defWithOids(bool value);
156 
157 #endif   /* DEFREM_H */
158