29 #include "utils/fmgroids.h"
49 bool collisdeterministic,
51 const char *collcollate,
const char *collctype,
52 const char *colliculocale,
53 const char *collicurules,
54 const char *collversion,
62 bool nulls[Natts_pg_collation];
71 Assert((collcollate && collctype) || colliculocale);
81 Anum_pg_collation_oid,
89 else if (if_not_exists)
102 ?
errmsg(
"collation \"%s\" already exists, skipping",
104 :
errmsg(
"collation \"%s\" for encoding \"%s\" already exists, skipping",
112 ?
errmsg(
"collation \"%s\" already exists",
114 :
errmsg(
"collation \"%s\" for encoding \"%s\" already exists",
128 if (collencoding == -1)
130 Anum_pg_collation_oid,
136 Anum_pg_collation_oid,
147 else if (if_not_exists)
160 errmsg(
"collation \"%s\" already exists, skipping",
167 errmsg(
"collation \"%s\" already exists",
174 memset(nulls, 0,
sizeof(nulls));
178 Anum_pg_collation_oid);
184 values[Anum_pg_collation_collisdeterministic - 1] =
BoolGetDatum(collisdeterministic);
189 nulls[Anum_pg_collation_collcollate - 1] =
true;
193 nulls[Anum_pg_collation_collctype - 1] =
true;
197 nulls[Anum_pg_collation_colliculocale - 1] =
true;
201 nulls[Anum_pg_collation_collicurules - 1] =
true;
205 nulls[Anum_pg_collation_collversion - 1] =
true;
214 myself.
classId = CollationRelationId;
219 referenced.
classId = NamespaceRelationId;
220 referenced.
objectId = collnamespace;
static Datum values[MAXATTR]
#define CStringGetTextDatum(s)
#define OidIsValid(objectId)
Oid GetNewOidWithIndex(Relation relation, Oid indexId, AttrNumber oidcolumn)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, const Datum *values, const bool *isnull)
void heap_freetuple(HeapTuple htup)
void CatalogTupleInsert(Relation heapRel, HeapTuple tup)
Assert(fmt[strlen(fmt) - 1] !='\n')
#define ShareRowExclusiveLock
int GetDatabaseEncoding(void)
void namestrcpy(Name name, const char *str)
#define InvokeObjectPostCreateHook(classId, objectId, subId)
#define ObjectAddressSet(addr, class_id, object_id)
Oid CollationCreate(const char *collname, Oid collnamespace, Oid collowner, char collprovider, bool collisdeterministic, int32 collencoding, const char *collcollate, const char *collctype, const char *colliculocale, const char *collicurules, const char *collversion, bool if_not_exists, bool quiet)
void checkMembershipInCurrentExtension(const ObjectAddress *object)
void recordDependencyOn(const ObjectAddress *depender, const ObjectAddress *referenced, DependencyType behavior)
void recordDependencyOnCurrentExtension(const ObjectAddress *object, bool isReplace)
void recordDependencyOnOwner(Oid classId, Oid objectId, Oid owner)
#define pg_encoding_to_char
static Datum PointerGetDatum(const void *X)
static Datum BoolGetDatum(bool X)
static Datum ObjectIdGetDatum(Oid X)
static Datum NameGetDatum(const NameData *X)
static Datum Int32GetDatum(int32 X)
static Datum CharGetDatum(char X)
#define RelationGetDescr(relation)
#define ERRCODE_DUPLICATE_OBJECT
#define GetSysCacheOid3(cacheId, oidcol, key1, key2, key3)
void table_close(Relation relation, LOCKMODE lockmode)
Relation table_open(Oid relationId, LOCKMODE lockmode)