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
78 const char *
arg2,
size_t len2,
83 const char *src,
size_t srclen,
104 const char *src,
size_t srclen,
108#ifdef HAVE_UCOL_STRCOLLUTF8
110 const char *
arg2,
size_t len2,
117 const char *src,
size_t srclen,
170 .strxfrm_is_safe =
true,
174#ifdef HAVE_UCOL_STRCOLLUTF8
185 .strxfrm_is_safe =
true,
281 .downcase_ident =
NULL,
343 deterministic =
true;
377 deterministic =
collform->collisdeterministic;
395 result->deterministic = deterministic;
396 result->collate_is_c =
false;
397 result->ctype_is_c =
false;
415 errmsg(
"ICU is not supported in this build")));
443 elog(
ERROR,
"opening default collator is not supported");
455 errmsg(
"could not get language from locale \"%s\": %s",
459 if (
strcmp(lang,
"und") == 0)
496 errmsg(
"could not open collator for locale \"%s\": %s",
513 errmsg(
"could not open collator for locale \"%s\": %s",
543 errmsg(
"could not open casemap for locale \"%s\": %s",
595 errmsg(
"out of memory")));
611 errmsg(
"could not open collator for locale \"%s\" with rules \"%s\": %s",
723 unsigned char ch = (
unsigned char) src[
i];
725 if (
ch >=
'A' &&
ch <=
'Z')
744#ifdef HAVE_UCOL_STRCOLLUTF8
862 (
errmsg(
"sort key generation failed: %s",
870 const char *src,
size_t srclen,
951 (
errmsg(
"%s failed: %s",
"ucnv_fromUChars",
963 (
errmsg(
"%s failed: %s",
"ucnv_fromUChars",
1057 if (
strcmp(lang,
"tr") == 0 ||
strcmp(lang,
"az") == 0)
1088#ifdef HAVE_UCOL_STRCOLLUTF8
1167 (
errmsg(
"sort key generation failed: %s",
1204 errmsg(
"encoding \"%s\" not supported by ICU",
1211 (
errmsg(
"could not open ICU converter for encoding \"%s\": %s",
1336 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)
#define ereport(elevel,...)
const char * get_encoding_name_for_icu(int encoding)
#define palloc_array(type, count)
#define MCXT_ALLOC_NO_OOM
#define palloc_array_extended(type, count, flags)
#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)
Size add_size(Size s1, Size s2)
char * pstrdup(const char *in)
void pfree(void *pointer)
END_CATALOG_STRUCT typedef 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, size_t len1, const char *arg2, size_t len2, pg_locale_t locale)
size_t(* strlower)(char *dest, size_t destsize, const char *src, size_t srclen, pg_locale_t locale)
void ReleaseSysCache(HeapTuple tuple)
Datum SysCacheGetAttrNotNull(SysCacheIdentifier cacheId, HeapTuple tup, AttrNumber attributeNumber)
HeapTuple SearchSysCache1(SysCacheIdentifier cacheId, Datum key1)
Datum SysCacheGetAttr(SysCacheIdentifier cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
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)