143{
144#ifdef USE_ICU
145 bool deterministic;
146 const char *iculocstr;
147 const char *icurules = NULL;
148 UCollator *collator;
150
151 if (
collid == DEFAULT_COLLATION_OID)
152 {
155 bool isnull;
156
160
161
162 deterministic = true;
164 Anum_pg_database_datlocale);
167 Anum_pg_database_daticurules, &isnull);
168 if (!isnull)
170
172 }
173 else
174 {
178 bool isnull;
179
184 deterministic = collform->collisdeterministic;
186 Anum_pg_collation_colllocale);
189 Anum_pg_collation_collicurules, &isnull);
190 if (!isnull)
192
194 }
195
196 collator = make_icu_collator(iculocstr, icurules);
197
200 result->
info.icu.ucol = collator;
201 result->
provider = COLLPROVIDER_ICU;
206 result->
collate = &collate_methods_icu_utf8;
207 else
208 result->
collate = &collate_methods_icu;
209
210 return result;
211#else
212
214 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
215 errmsg(
"ICU is not supported in this build")));
216
217 return NULL;
218#endif
219}
#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::@161 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)