15#include <unicode/ucasemap.h>
16#include <unicode/ucnv.h>
17#include <unicode/ucol.h>
18#include <unicode/ustring.h>
26#if U_ICU_VERSION_MAJOR_NUM < 55
27#error ICU version 55 or later is required
48#define TEXTBUFLEN 1024
76 const char *
arg2,
size_t len2,
81 const char *src,
size_t srclen,
102 const char *src,
size_t srclen,
107 const char *
arg2,
size_t len2,
113 const char *src,
size_t srclen,
166 .strxfrm_is_safe =
true,
176 .strxfrm_is_safe =
true,
272 .downcase_ident =
NULL,
334 deterministic =
true;
368 deterministic =
collform->collisdeterministic;
386 result->deterministic = deterministic;
387 result->collate_is_c =
false;
388 result->ctype_is_c =
false;
406 errmsg(
"ICU is not supported in this build")));
430 elog(
ERROR,
"opening default collator is not supported");
461 errmsg(
"could not open collator for locale \"%s\": %s",
489 errmsg(
"could not open casemap for locale \"%s\": %s",
541 errmsg(
"out of memory")));
557 errmsg(
"could not open collator for locale \"%s\" with rules \"%s\": %s",
669 unsigned char ch = (
unsigned char) src[
i];
671 if (
ch >=
'A' &&
ch <=
'Z')
806 (
errmsg(
"sort key generation failed: %s",
814 const char *src,
size_t srclen,
895 (
errmsg(
"%s failed: %s",
"ucnv_fromUChars",
907 (
errmsg(
"%s failed: %s",
"ucnv_fromUChars",
1001 if (
strcmp(lang,
"tr") == 0 ||
strcmp(lang,
"az") == 0)
1109 (
errmsg(
"sort key generation failed: %s",
1146 errmsg(
"encoding \"%s\" not supported by ICU",
1153 (
errmsg(
"could not open ICU converter for encoding \"%s\": %s",
1278 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)