15#include <unicode/ucasemap.h>
16#include <unicode/ucnv.h>
17#include <unicode/ucol.h>
18#include <unicode/ustring.h>
25#if U_ICU_VERSION_MAJOR_NUM >= 53
26#define HAVE_UCOL_STRCOLLUTF8 1
28#undef HAVE_UCOL_STRCOLLUTF8
50#define TEXTBUFLEN 1024
105#ifdef HAVE_UCOL_STRCOLLUTF8
159 .strxfrm_is_safe =
true,
163#ifdef HAVE_UCOL_STRCOLLUTF8
170 .strxfrm_is_safe =
true,
266 .downcase_ident =
NULL,
328 deterministic =
true;
362 deterministic =
collform->collisdeterministic;
379 result->icu.
lt = loc;
400 errmsg(
"ICU is not supported in this build")));
428 elog(
ERROR,
"opening default collator is not supported");
440 errmsg(
"could not get language from locale \"%s\": %s",
444 if (
strcmp(lang,
"und") == 0)
481 errmsg(
"could not open collator for locale \"%s\": %s",
498 errmsg(
"could not open collator for locale \"%s\": %s",
528 errmsg(
"could not open casemap for locale \"%s\": %s",
580 errmsg(
"out of memory")));
596 errmsg(
"could not open collator for locale \"%s\" with rules \"%s\": %s",
706 unsigned char ch = (
unsigned char) src[
i];
708 if (
ch >=
'A' &&
ch <=
'Z')
728#ifdef HAVE_UCOL_STRCOLLUTF8
820 (
errmsg(
"sort key generation failed: %s",
894 (
errmsg(
"%s failed: %s",
"ucnv_fromUChars",
906 (
errmsg(
"%s failed: %s",
"ucnv_fromUChars",
1000 if (
strcmp(lang,
"tr") == 0 ||
strcmp(lang,
"az") == 0)
1032#ifdef HAVE_UCOL_STRCOLLUTF8
1106 (
errmsg(
"sort key generation failed: %s",
1126 errmsg(
"encoding \"%s\" not supported by ICU",
1133 (
errmsg(
"could not open ICU converter for encoding \"%s\": %s",
1255 else if (
strcmp(
name,
"colnormalization") == 0)
#define TextDatumGetCString(d)
#define pg_attribute_unused()
#define IS_HIGHBIT_SET(ch)
#define Assert(condition)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
const char * get_encoding_name_for_icu(int encoding)
#define MCXT_ALLOC_NO_OOM
#define HeapTupleIsValid(tuple)
static void * GETSTRUCT(const HeapTupleData *tuple)
int GetDatabaseEncoding(void)
int pg_database_encoding_max_length(void)
char * MemoryContextStrdup(MemoryContext context, const char *string)
void * MemoryContextAllocZero(MemoryContext context, Size size)
char * pstrdup(const char *in)
void pfree(void *pointer)
void * palloc_extended(Size size, int flags)
FormData_pg_collation * Form_pg_collation
pg_locale_t create_pg_locale_icu(Oid collid, MemoryContext context)
void report_newlocale_failure(const char *localename)
static char buf[DEFAULT_XLOG_SEG_SIZE]
#define pg_encoding_to_char
char * strsep(char **stringp, const char *delim)
static unsigned char pg_ascii_tolower(unsigned char ch)
static Datum ObjectIdGetDatum(Oid X)
int(* strncoll)(const char *arg1, ssize_t len1, const char *arg2, ssize_t len2, pg_locale_t locale)
size_t(* strlower)(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale)
const struct ctype_methods * ctype
const struct collate_methods * collate
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)
static enum CaseMapResult casemap(char32_t u1, CaseKind casekind, bool full, const char *src, size_t srclen, size_t srcoff, char32_t *simple, const char32_t **special)