/* * get the length of the string considered as text in the specified * encoding. Raises an error if the data is not valid in that * encoding. * * INT4 length (BYTEA string, NAME src_encoding_name) */ Datum length_in_encoding(PG_FUNCTION_ARGS) { bytea *string = PG_GETARG_BYTEA_P(0); char *src_encoding_name = NameStr(*PG_GETARG_NAME(1)); int src_encoding = pg_char_to_encoding(src_encoding_name); int len = VARSIZE(string) - VARHDRSZ; int retval; if (src_encoding < 0) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid encoding name \"%s\"", src_encoding_name))); retval = pg_verify_mbstr_len(src_encoding, VARDATA(string), len, false); PG_RETURN_INT32(retval); }
/* * Verify mbstr to make sure that it is validly encoded in the specified * encoding. */ bool pg_verify_mbstr(int encoding, const char *mbstr, int len, bool noError) { return pg_verify_mbstr_len(encoding, mbstr, len, noError) >= 0; }
/* * Verify mbstr to make sure that it is validly encoded in the current * database encoding. Otherwise same as pg_verify_mbstr(). */ bool pg_verifymbstr(const char *mbstr, int len, bool noError) { return pg_verify_mbstr_len(GetDatabaseEncoding(), mbstr, len, noError) >= 0; }
/* * Verify mbstr to make sure that it is validly encoded in the current * database encoding. Otherwise same as pg_verify_mbstr(). */ bool pg_verifymbstr(const char *mbstr, int len, bool noError) { return pg_verify_mbstr_len(get_db_encoding(), mbstr, len, noError) >= 0; }
int postgresql_is_valid_utf8 (size_t len, char *value) { return pg_verify_mbstr_len(PG_UTF8, value, len, true, true) >= 0; }