PostgreSQL Source Code git master
Macros | Functions
pg_locale_icu.c File Reference
#include "postgres.h"
#include "access/htup_details.h"
#include "catalog/pg_database.h"
#include "catalog/pg_collation.h"
#include "mb/pg_wchar.h"
#include "miscadmin.h"
#include "utils/builtins.h"
#include "utils/formatting.h"
#include "utils/memutils.h"
#include "utils/pg_locale.h"
#include "utils/syscache.h"
Include dependency graph for pg_locale_icu.c:

Go to the source code of this file.

Macros

#define  TEXTBUFLEN   1024
 

Functions

 

Macro Definition Documentation

TEXTBUFLEN

#define TEXTBUFLEN   1024

Definition at line 48 of file pg_locale_icu.c.

Function Documentation

create_pg_locale_icu()

pg_locale_t create_pg_locale_icu ( Oid  collid,
MemoryContext  context 
)

Definition at line 236 of file pg_locale_icu.c.

237{
238#ifdef USE_ICU
239 bool deterministic;
240 const char *iculocstr;
241 const char *icurules = NULL;
242 UCollator *collator;
243 pg_locale_t result;
244
245 if (collid == DEFAULT_COLLATION_OID)
246 {
247 HeapTuple tp;
248 Datum datum;
249 bool isnull;
250
252 if (!HeapTupleIsValid(tp))
253 elog(ERROR, "cache lookup failed for database %u", MyDatabaseId);
254
255 /* default database collation is always deterministic */
256 deterministic = true;
257 datum = SysCacheGetAttrNotNull(DATABASEOID, tp,
258 Anum_pg_database_datlocale);
259 iculocstr = TextDatumGetCString(datum);
260 datum = SysCacheGetAttr(DATABASEOID, tp,
261 Anum_pg_database_daticurules, &isnull);
262 if (!isnull)
263 icurules = TextDatumGetCString(datum);
264
265 ReleaseSysCache(tp);
266 }
267 else
268 {
269 Form_pg_collation collform;
270 HeapTuple tp;
271 Datum datum;
272 bool isnull;
273
275 if (!HeapTupleIsValid(tp))
276 elog(ERROR, "cache lookup failed for collation %u", collid);
277 collform = (Form_pg_collation) GETSTRUCT(tp);
278 deterministic = collform->collisdeterministic;
279 datum = SysCacheGetAttrNotNull(COLLOID, tp,
280 Anum_pg_collation_colllocale);
281 iculocstr = TextDatumGetCString(datum);
282 datum = SysCacheGetAttr(COLLOID, tp,
283 Anum_pg_collation_collicurules, &isnull);
284 if (!isnull)
285 icurules = TextDatumGetCString(datum);
286
287 ReleaseSysCache(tp);
288 }
289
290 collator = make_icu_collator(iculocstr, icurules);
291
292 result = MemoryContextAllocZero(context, sizeof(struct pg_locale_struct));
293 result->icu.locale = MemoryContextStrdup(context, iculocstr);
294 result->icu.ucol = collator;
295 result->deterministic = deterministic;
296 result->collate_is_c = false;
297 result->ctype_is_c = false;
299 result->collate = &collate_methods_icu_utf8;
300 else
301 result->collate = &collate_methods_icu;
302 result->ctype = &ctype_methods_icu;
303
304 return result;
305#else
306 /* could get here if a collation was created by a build with ICU */
308 (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
309 errmsg("ICU is not supported in this build")));
310
311 return NULL;
312#endif
313}
#define TextDatumGetCString(d)
Definition: builtins.h:98
Oid collid
Definition: collationcmds.c:700
int errcode(int sqlerrcode)
Definition: elog.c:854
int errmsg(const char *fmt,...)
Definition: elog.c:1071
#define ERROR
Definition: elog.h:39
#define elog(elevel,...)
Definition: elog.h:226
#define ereport(elevel,...)
Definition: elog.h:150
Oid MyDatabaseId
Definition: globals.c:94
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
static void * GETSTRUCT(const HeapTupleData *tuple)
Definition: htup_details.h:728
int GetDatabaseEncoding(void)
Definition: mbutils.c:1262
char * MemoryContextStrdup(MemoryContext context, const char *string)
Definition: mcxt.c:1746
void * MemoryContextAllocZero(MemoryContext context, Size size)
Definition: mcxt.c:1263
FormData_pg_collation * Form_pg_collation
Definition: pg_collation.h:58
@ PG_UTF8
Definition: pg_wchar.h:232
static Datum ObjectIdGetDatum(Oid X)
Definition: postgres.h:262
uint64_t Datum
Definition: postgres.h:70
const struct ctype_methods * ctype
Definition: pg_locale.h:157
bool collate_is_c
Definition: pg_locale.h:152
bool ctype_is_c
Definition: pg_locale.h:153
const struct collate_methods * collate
Definition: pg_locale.h:156
const char * locale
Definition: pg_locale.h:163
bool deterministic
Definition: pg_locale.h:151
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:264
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:220
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
Definition: syscache.c:595
Datum SysCacheGetAttrNotNull(int cacheId, HeapTuple tup, AttrNumber attributeNumber)
Definition: syscache.c:625

References pg_locale_struct::collate, pg_locale_struct::collate_is_c, collid, pg_locale_struct::ctype, pg_locale_struct::ctype_is_c, pg_locale_struct::deterministic, elog, ereport, errcode(), errmsg(), ERROR, GetDatabaseEncoding(), GETSTRUCT(), HeapTupleIsValid, pg_locale_struct::locale, MemoryContextAllocZero(), MemoryContextStrdup(), MyDatabaseId, ObjectIdGetDatum(), PG_UTF8, ReleaseSysCache(), SearchSysCache1(), SysCacheGetAttr(), SysCacheGetAttrNotNull(), and TextDatumGetCString.

Referenced by create_pg_locale(), and init_database_collation().

AltStyle によって変換されたページ (->オリジナル) /