Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}