149{
150#ifdef USE_ICU
151 bool deterministic;
152 const char *iculocstr;
153 const char *icurules = NULL;
154 UCollator *collator;
156
157 if (
collid == DEFAULT_COLLATION_OID)
158 {
161 bool isnull;
162
166
167
168 deterministic = true;
170 Anum_pg_database_datlocale);
173 Anum_pg_database_daticurules, &isnull);
174 if (!isnull)
176
178 }
179 else
180 {
184 bool isnull;
185
190 deterministic = collform->collisdeterministic;
192 Anum_pg_collation_colllocale);
195 Anum_pg_collation_collicurules, &isnull);
196 if (!isnull)
198
200 }
201
202 collator = make_icu_collator(iculocstr, icurules);
203
206 result->
info.icu.ucol = collator;
207 result->
provider = COLLPROVIDER_ICU;
212 result->
collate = &collate_methods_icu_utf8;
213 else
214 result->
collate = &collate_methods_icu;
215
216 return result;
217#else
218
220 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
221 errmsg(
"ICU is not supported in this build")));
222
223 return NULL;
224#endif
225}
#define TextDatumGetCString(d)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define HeapTupleIsValid(tuple)
static void * GETSTRUCT(const HeapTupleData *tuple)
int GetDatabaseEncoding(void)
char * MemoryContextStrdup(MemoryContext context, const char *string)
void * MemoryContextAllocZero(MemoryContext context, Size size)
FormData_pg_collation * Form_pg_collation
static Datum ObjectIdGetDatum(Oid X)
const struct collate_methods * collate
union pg_locale_struct::@158 info
void ReleaseSysCache(HeapTuple tuple)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
Datum SysCacheGetAttrNotNull(int cacheId, HeapTuple tup, AttrNumber attributeNumber)