PostgreSQL Source Code
git master
|
#include "postgres.h"
#include <time.h>
#include "access/htup_details.h"
#include "catalog/pg_collation.h"
#include "catalog/pg_control.h"
#include "mb/pg_wchar.h"
#include "miscadmin.h"
#include "utils/builtins.h"
#include "utils/formatting.h"
#include "utils/guc_hooks.h"
#include "utils/hsearch.h"
#include "utils/lsyscache.h"
#include "utils/memutils.h"
#include "utils/pg_locale.h"
#include "utils/syscache.h"
Go to the source code of this file.
Data Structures | |
struct | collation_cache_entry |
Macros | |
#define | PGLOCALE_SUPPORT_ERROR(provider) elog(ERROR, "unsupported collprovider for %s: %c", __func__, provider) |
#define | TEXTBUFLEN 1024 |
#define | MAX_L10N_DATA 80 |
Functions | |
static size_t | mbstowcs_l (wchar_t *dest, const char *src, size_t n, locale_t loc) |
static size_t | wcstombs_l (char *dest, const wchar_t *src, size_t n, locale_t loc) |
char * | pg_perm_setlocale (int category, const char *locale) |
bool | check_locale (int category, const char *locale, char **canonname) |
bool | check_locale_monetary (char **newval, void **extra, GucSource source) |
void | assign_locale_monetary (const char *newval, void *extra) |
bool | check_locale_numeric (char **newval, void **extra, GucSource source) |
void | assign_locale_numeric (const char *newval, void *extra) |
bool | check_locale_time (char **newval, void **extra, GucSource source) |
void | assign_locale_time (const char *newval, void *extra) |
bool | check_locale_messages (char **newval, void **extra, GucSource source) |
void | assign_locale_messages (const char *newval, void *extra) |
static void | free_struct_lconv (struct lconv *s) |
static bool | struct_lconv_is_valid (struct lconv *s) |
static void | db_encoding_convert (int encoding, char **str) |
struct lconv * | PGLC_localeconv (void) |
static void | cache_single_string (char **dst, const char *src, int encoding) |
void | cache_locale_time (void) |
static collation_cache_entry * | lookup_collation_cache (Oid collation, bool set_flags) |
bool | lc_collate_is_c (Oid collation) |
bool | lc_ctype_is_c (Oid collation) |
void | make_icu_collator (const char *iculocstr, const char *icurules, struct pg_locale_struct *resultp) |
static void | report_newlocale_failure (const char *localename) |
bool | pg_locale_deterministic (pg_locale_t locale) |
pg_locale_t | pg_newlocale_from_collation (Oid collid) |
char * | get_collation_actual_version (char collprovider, const char *collcollate) |
static int | pg_strcoll_libc (const char *arg1, const char *arg2, pg_locale_t locale) |
static int | pg_strncoll_libc (const char *arg1, size_t len1, const char *arg2, size_t len2, pg_locale_t locale) |
int | pg_strcoll (const char *arg1, const char *arg2, pg_locale_t locale) |
int | pg_strncoll (const char *arg1, size_t len1, const char *arg2, size_t len2, pg_locale_t locale) |
static size_t | pg_strxfrm_libc (char *dest, const char *src, size_t destsize, pg_locale_t locale) |
static size_t | pg_strnxfrm_libc (char *dest, const char *src, size_t srclen, size_t destsize, pg_locale_t locale) |
bool | pg_strxfrm_enabled (pg_locale_t locale) |
size_t | pg_strxfrm (char *dest, const char *src, size_t destsize, pg_locale_t locale) |
size_t | pg_strnxfrm (char *dest, size_t destsize, const char *src, size_t srclen, pg_locale_t locale) |
bool | pg_strxfrm_prefix_enabled (pg_locale_t locale) |
size_t | pg_strxfrm_prefix (char *dest, const char *src, size_t destsize, pg_locale_t locale) |
size_t | pg_strnxfrm_prefix (char *dest, size_t destsize, const char *src, size_t srclen, pg_locale_t locale) |
char * | icu_language_tag (const char *loc_str, int elevel) |
void | icu_validate_locale (const char *loc_str) |
size_t | wchar2char (char *to, const wchar_t *from, size_t tolen, pg_locale_t locale) |
size_t | char2wchar (wchar_t *to, size_t tolen, const char *from, size_t fromlen, pg_locale_t locale) |
Variables | |
char * | locale_messages |
char * | locale_monetary |
char * | locale_numeric |
char * | locale_time |
int | icu_validation_level = WARNING |
char * | localized_abbrev_days [7+1] |
char * | localized_full_days [7+1] |
char * | localized_abbrev_months [12+1] |
char * | localized_full_months [12+1] |
bool | database_ctype_is_c = false |
static bool | CurrentLocaleConvValid = false |
static bool | CurrentLCTimeValid = false |
static HTAB * | collation_cache = NULL |
struct pg_locale_struct | default_locale |
#define MAX_L10N_DATA 80 |
Definition at line 94 of file pg_locale.c.
#define PGLOCALE_SUPPORT_ERROR | ( | provider | ) | elog(ERROR, "unsupported collprovider for %s: %c", __func__, provider) |
Definition at line 85 of file pg_locale.c.
#define TEXTBUFLEN 1024 |
Definition at line 92 of file pg_locale.c.
void assign_locale_messages | ( | const char * | newval, |
void * | extra | ||
) |
Definition at line 428 of file pg_locale.c.
References newval, and pg_perm_setlocale().
void assign_locale_monetary | ( | const char * | newval, |
void * | extra | ||
) |
void assign_locale_numeric | ( | const char * | newval, |
void * | extra | ||
) |
Definition at line 377 of file pg_locale.c.
References CurrentLocaleConvValid.
void assign_locale_time | ( | const char * | newval, |
void * | extra | ||
) |
void cache_locale_time | ( | void | ) |
Definition at line 807 of file pg_locale.c.
References buf, cache_single_string(), CurrentLCTimeValid, DEBUG3, elog(), encoding, ERROR, FATAL, i, locale_time, localized_abbrev_days, localized_abbrev_months, localized_full_days, localized_full_months, MAX_L10N_DATA, pfree(), pg_get_encoding_from_locale(), PG_SQL_ASCII, PG_UTF8, pstrdup(), setlocale, and tm.
Referenced by DCH_from_char(), and DCH_to_char().
|
static |
Definition at line 784 of file pg_locale.c.
References encoding, MemoryContextStrdup(), pfree(), pg_any_to_server(), and TopMemoryContext.
Referenced by cache_locale_time().
size_t char2wchar | ( | wchar_t * | to, |
size_t | tolen, | ||
const char * | from, | ||
size_t | fromlen, | ||
pg_locale_t | locale | ||
) |
Definition at line 2990 of file pg_locale.c.
References Assert(), ereport, errcode(), errhint(), errmsg(), ERROR, GetDatabaseEncoding(), locale, mbstowcs_l(), pfree(), PG_UTF8, pg_verifymbstr(), pnstrdup(), and generate_unaccent_rules::str.
Referenced by lowerstr_with_len(), str_initcap(), str_tolower(), str_toupper(), t_isalnum(), t_isalpha(), t_isdigit(), t_isprint(), t_isspace(), and TParserInit().
bool check_locale | ( | int | category, |
const char * | locale, | ||
char ** | canonname | ||
) |
Definition at line 316 of file pg_locale.c.
References elog(), locale, pfree(), pstrdup(), res, setlocale, and WARNING.
Referenced by check_locale_messages(), check_locale_monetary(), check_locale_numeric(), check_locale_time(), and createdb().
Definition at line 405 of file pg_locale.c.
References check_locale(), newval, PGC_S_DEFAULT, and source.
Definition at line 359 of file pg_locale.c.
References check_locale(), and newval.
Definition at line 371 of file pg_locale.c.
References check_locale(), and newval.
Definition at line 383 of file pg_locale.c.
References check_locale(), and newval.
|
static |
Definition at line 495 of file pg_locale.c.
References encoding, ereport, errcode(), errmsg(), ERROR, free, pfree(), pg_any_to_server(), and generate_unaccent_rules::str.
Referenced by PGLC_localeconv().
|
static |
char* get_collation_actual_version | ( | char | collprovider, |
const char * | collcollate | ||
) |
Definition at line 1677 of file pg_locale.c.
References buf, ereport, errmsg(), ERROR, locale_t, pg_strcasecmp(), pg_strncasecmp(), psprintf(), and pstrdup().
Referenced by AlterCollation(), AlterDatabaseRefreshColl(), CheckMyDatabase(), createdb(), DefineCollation(), pg_collation_actual_version(), pg_database_collation_actual_version(), pg_import_system_collations(), and pg_newlocale_from_collation().
char* icu_language_tag | ( | const char * | loc_str, |
int | elevel | ||
) |
Definition at line 2796 of file pg_locale.c.
References ereport, errcode(), errmsg(), ERROR, MaxAllocSize, Min, palloc(), pfree(), and repalloc().
Referenced by createdb(), DefineCollation(), and pg_import_system_collations().
void icu_validate_locale | ( | const char * | loc_str | ) |
Definition at line 2853 of file pg_locale.c.
References ereport, errcode(), errhint(), errmsg(), ERROR, i, icu_validation_level, IsBinaryUpgrade, and WARNING.
Referenced by createdb(), and DefineCollation().
Definition at line 1307 of file pg_locale.c.
References default_locale, elog(), ERROR, lookup_collation_cache(), OidIsValid, pg_locale_struct::provider, and setlocale.
Referenced by bpchareq(), bpcharne(), btvarstrequalimage(), convert_string_datum(), DefineCollation(), hashbpchar(), hashbpcharextended(), hashtext(), hashtextextended(), make_greater_string(), match_pattern_prefix(), spg_text_inner_consistent(), text_position_setup(), text_starts_with(), texteq(), textne(), varstr_cmp(), and varstr_sortsupport().
Definition at line 1360 of file pg_locale.c.
Referenced by DefineCollation(), Generic_Text_IC_like(), GenericMatchText(), like_fixed_prefix(), pg_set_regex_collation(), str_initcap(), str_tolower(), and str_toupper().
|
static |
Definition at line 1231 of file pg_locale.c.
References Assert(), collation_cache_entry::collate_is_c, collation_cache, COLLOID, collation_cache_entry::ctype_is_c, elog(), HASHCTL::entrysize, ERROR, collation_cache_entry::flags_valid, GETSTRUCT, HASH_BLOBS, hash_create(), HASH_ELEM, HASH_ENTER, hash_search(), HeapTupleIsValid, HASHCTL::keysize, collation_cache_entry::locale, ObjectIdGetDatum(), OidIsValid, ReleaseSysCache(), SearchSysCache1(), SysCacheGetAttrNotNull(), and TextDatumGetCString.
Referenced by lc_collate_is_c(), and pg_newlocale_from_collation().
void make_icu_collator | ( | const char * | iculocstr, |
const char * | icurules, | ||
struct pg_locale_struct * | resultp | ||
) |
Definition at line 1412 of file pg_locale.c.
References ereport, errcode(), errmsg(), ERROR, pg_locale_struct::info, MemoryContextStrdup(), palloc_array, and TopMemoryContext.
Referenced by CheckMyDatabase(), and pg_newlocale_from_collation().
|
static |
Definition at line 167 of file pg_locale.c.
References generate_unaccent_rules::dest, and locale_t.
Referenced by char2wchar().
bool pg_locale_deterministic | ( | pg_locale_t | locale | ) |
Definition at line 1494 of file pg_locale.c.
References locale.
Referenced by bpchareq(), bpcharne(), Generic_Text_IC_like(), GenericMatchText(), hashbpchar(), hashbpcharextended(), hashtext(), hashtextextended(), pg_set_regex_collation(), text_position_setup(), text_starts_with(), texteq(), textne(), varstr_cmp(), and varstrfastcmp_locale().
pg_locale_t pg_newlocale_from_collation | ( | Oid | collid | ) |
Definition at line 1514 of file pg_locale.c.
References Assert(), collid, COLLOID, default_locale, pg_locale_struct::deterministic, elog(), ereport, errcode(), errdetail(), errhint(), errmsg(), ERROR, get_collation_actual_version(), get_namespace_name(), GETSTRUCT, HeapTupleIsValid, pg_locale_struct::info, collation_cache_entry::locale, locale_t, lookup_collation_cache(), pg_locale_struct::lt, make_icu_collator(), MemoryContextAlloc(), NameStr, ObjectIdGetDatum(), OidIsValid, pg_attribute_unused, pg_locale_struct::provider, quote_qualified_identifier(), ReleaseSysCache(), report_newlocale_failure(), SearchSysCache1(), SysCacheGetAttr(), SysCacheGetAttrNotNull(), TextDatumGetCString, TopMemoryContext, and WARNING.
Referenced by bpchareq(), bpcharne(), DefineCollation(), Generic_Text_IC_like(), GenericMatchText(), hashbpchar(), hashbpcharextended(), hashtext(), hashtextextended(), like_fixed_prefix(), pg_set_regex_collation(), str_initcap(), str_tolower(), str_toupper(), text_position_setup(), text_starts_with(), texteq(), textne(), varstr_cmp(), and varstr_sortsupport().
char* pg_perm_setlocale | ( | int | category, |
const char * | locale | ||
) |
Definition at line 213 of file pg_locale.c.
References DEBUG3, elog(), FATAL, GetDatabaseEncoding(), locale, LOCALE_NAME_BUFLEN, setenv, setlocale, SetMessageEncoding(), and strlcpy().
Referenced by assign_locale_messages(), CheckMyDatabase(), and init_locale().
int pg_strcoll | ( | const char * | arg1, |
const char * | arg2, | ||
pg_locale_t | locale | ||
) |
Definition at line 2026 of file pg_locale.c.
References locale, pg_strcoll_libc(), and PGLOCALE_SUPPORT_ERROR.
Referenced by varstrfastcmp_locale().
|
static |
Definition at line 1844 of file pg_locale.c.
References Assert(), GetDatabaseEncoding(), locale, PG_UTF8, and strcoll_l.
Referenced by pg_strcoll(), and pg_strncoll_libc().
int pg_strncoll | ( | const char * | arg1, |
size_t | len1, | ||
const char * | arg2, | ||
size_t | len2, | ||
pg_locale_t | locale | ||
) |
Definition at line 2061 of file pg_locale.c.
References locale, pg_strncoll_libc(), and PGLOCALE_SUPPORT_ERROR.
Referenced by varstr_cmp().
|
static |
Definition at line 1873 of file pg_locale.c.
References Assert(), buf, GetDatabaseEncoding(), locale, palloc(), pfree(), pg_strcoll_libc(), PG_UTF8, and TEXTBUFLEN.
Referenced by pg_strncoll().
size_t pg_strnxfrm | ( | char * | dest, |
size_t | destsize, | ||
const char * | src, | ||
size_t | srclen, | ||
pg_locale_t | locale | ||
) |
Definition at line 2345 of file pg_locale.c.
References generate_unaccent_rules::dest, locale, pg_strnxfrm_libc(), and PGLOCALE_SUPPORT_ERROR.
Referenced by hashbpchar(), hashbpcharextended(), hashtext(), and hashtextextended().
|
static |
Definition at line 2099 of file pg_locale.c.
References Assert(), buf, bufsize, generate_unaccent_rules::dest, locale, palloc(), pfree(), pg_strxfrm_libc(), and TEXTBUFLEN.
Referenced by pg_strnxfrm().
size_t pg_strnxfrm_prefix | ( | char * | dest, |
size_t | destsize, | ||
const char * | src, | ||
size_t | srclen, | ||
pg_locale_t | locale | ||
) |
Definition at line 2430 of file pg_locale.c.
References generate_unaccent_rules::dest, locale, and PGLOCALE_SUPPORT_ERROR.
size_t pg_strxfrm | ( | char * | dest, |
const char * | src, | ||
size_t | destsize, | ||
pg_locale_t | locale | ||
) |
Definition at line 2309 of file pg_locale.c.
References generate_unaccent_rules::dest, locale, pg_strxfrm_libc(), and PGLOCALE_SUPPORT_ERROR.
Referenced by varstr_abbrev_convert().
bool pg_strxfrm_enabled | ( | pg_locale_t | locale | ) |
Definition at line 2277 of file pg_locale.c.
References locale, and PGLOCALE_SUPPORT_ERROR.
Referenced by varstr_sortsupport().
|
static |
Definition at line 2081 of file pg_locale.c.
References Assert(), generate_unaccent_rules::dest, locale, PGLOCALE_SUPPORT_ERROR, and strxfrm_l.
Referenced by pg_strnxfrm_libc(), and pg_strxfrm().
size_t pg_strxfrm_prefix | ( | char * | dest, |
const char * | src, | ||
size_t | destsize, | ||
pg_locale_t | locale | ||
) |
Definition at line 2395 of file pg_locale.c.
References generate_unaccent_rules::dest, locale, and PGLOCALE_SUPPORT_ERROR.
Referenced by varstr_abbrev_convert().
bool pg_strxfrm_prefix_enabled | ( | pg_locale_t | locale | ) |
Definition at line 2368 of file pg_locale.c.
References locale, and PGLOCALE_SUPPORT_ERROR.
Referenced by varstr_abbrev_convert().
struct lconv* PGLC_localeconv | ( | void | ) |
Definition at line 525 of file pg_locale.c.
References CurrentLocaleConvValid, db_encoding_convert(), elog(), encoding, ereport, errcode(), errmsg(), ERROR, FATAL, free_struct_lconv(), locale_monetary, locale_numeric, pfree(), PG_CATCH, PG_END_TRY, pg_get_encoding_from_locale(), PG_RE_THROW, PG_SQL_ASCII, PG_TRY, pstrdup(), setlocale, and struct_lconv_is_valid().
Referenced by cash_in(), cash_numeric(), cash_out(), int4_cash(), int8_cash(), NUM_prepare_locale(), and numeric_cash().
|
static |
Definition at line 1465 of file pg_locale.c.
References ereport, errcode(), errdetail(), errmsg(), and ERROR.
Referenced by pg_newlocale_from_collation().
|
static |
size_t wchar2char | ( | char * | to, |
const wchar_t * | from, | ||
size_t | tolen, | ||
pg_locale_t | locale | ||
) |
Definition at line 2934 of file pg_locale.c.
References Assert(), GetDatabaseEncoding(), locale, PG_UTF8, and wcstombs_l().
Referenced by lowerstr_with_len(), str_initcap(), str_tolower(), and str_toupper().
|
static |
Definition at line 183 of file pg_locale.c.
References generate_unaccent_rules::dest, and locale_t.
Referenced by wchar2char().
|
static |
Definition at line 135 of file pg_locale.c.
Referenced by lookup_collation_cache().
Definition at line 122 of file pg_locale.c.
Referenced by assign_locale_time(), and cache_locale_time().
Definition at line 121 of file pg_locale.c.
Referenced by assign_locale_monetary(), assign_locale_numeric(), and PGLC_localeconv().
Definition at line 118 of file pg_locale.c.
Referenced by CheckMyDatabase(), lowerstr_with_len(), t_isalnum(), t_isalpha(), t_isdigit(), t_isprint(), t_isspace(), and TParserInit().
struct pg_locale_struct default_locale |
Definition at line 1360 of file pg_locale.c.
Referenced by CheckMyDatabase(), lc_collate_is_c(), and pg_newlocale_from_collation().
int icu_validation_level = WARNING |
Definition at line 103 of file pg_locale.c.
Referenced by createdb(), DefineCollation(), and icu_validate_locale().
char* locale_messages |
Definition at line 98 of file pg_locale.c.
char* locale_monetary |
Definition at line 99 of file pg_locale.c.
Referenced by PGLC_localeconv().
char* locale_numeric |
Definition at line 100 of file pg_locale.c.
Referenced by PGLC_localeconv().
char* locale_time |
Definition at line 101 of file pg_locale.c.
Referenced by cache_locale_time().
char* localized_abbrev_days[7+1] |
Definition at line 112 of file pg_locale.c.
Referenced by cache_locale_time(), DCH_from_char(), and DCH_to_char().
char* localized_abbrev_months[12+1] |
Definition at line 114 of file pg_locale.c.
Referenced by cache_locale_time(), DCH_from_char(), and DCH_to_char().
char* localized_full_days[7+1] |
Definition at line 113 of file pg_locale.c.
Referenced by cache_locale_time(), DCH_from_char(), and DCH_to_char().
char* localized_full_months[12+1] |
Definition at line 115 of file pg_locale.c.
Referenced by cache_locale_time(), DCH_from_char(), and DCH_to_char().