static VarChar * nvarchar2_input(const char *s, size_t len, int32 atttypmod) { VarChar *result; /* input data */ size_t maxlen; maxlen = atttypmod - VARHDRSZ; /* * Perform the typmod check; error out if value too long for NVARCHAR2 */ if (atttypmod >= (int32) VARHDRSZ && len > maxlen) { /* Verify that input length is within typmod limit. * * NOTE: blankspace is not truncated */ size_t mbmaxlen = pg_mbstrlen(s); if (mbmaxlen > maxlen) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("input value length is %zd; too long for type nvarchar2(%zd)", mbmaxlen , maxlen))); } result = (VarChar *) cstring_to_text_with_len(s, len); return result; }
static const char * eudc_fallback_character_assign_hook( const char *newval, bool doit, GucSource source) { int len = pg_mbstrlen(newval); if (len >= 2 || len < 0) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid value for parameter \"eudc.fallback_character\": \"%s\"", newval), errhint("must be one character or empty string"))); return newval; }
static bool eudc_fallback_character_check_hook( const char **newval, void** extra, GucSource source) { int len; GUC_check_errhint("must be one character or empty string"); /* handle explicit setting of eudc.fallback_character */ if (*newval) { /* eudc.fallback_character * should be 0 or 1 character */ len = pg_mbstrlen(*newval); if (len >= 2 || len < 0) return false; } return true; }