/*********************************************************************//** Determine how many bytes the first n characters of the given string occupy. If the string is shorter than n characters, returns the number of bytes the characters in the string occupy. @return length of the prefix, in bytes */ UNIV_INTERN ulint dtype_get_at_most_n_mbchars( /*========================*/ ulint prtype, /*!< in: precise type */ ulint mbminmaxlen, /*!< in: minimum and maximum length of a multi-byte character */ ulint prefix_len, /*!< in: length of the requested prefix, in characters, multiplied by dtype_get_mbmaxlen(dtype) */ ulint data_len, /*!< in: length of str (in bytes) */ const char* str) /*!< in: the string whose prefix length is being determined */ { ulint mbminlen = DATA_MBMINLEN(mbminmaxlen); ulint mbmaxlen = DATA_MBMAXLEN(mbminmaxlen); ut_a(data_len != UNIV_SQL_NULL); ut_ad(!mbmaxlen || !(prefix_len % mbmaxlen)); if (mbminlen != mbmaxlen) { ut_a(!(prefix_len % mbmaxlen)); return(innobase_get_at_most_n_mbchars( dtype_get_charset_coll(prtype), prefix_len, data_len, str)); } if (prefix_len < data_len) { return(prefix_len); } return(data_len); }
ulint dtype_get_at_most_n_mbchars( /*========================*/ /* out: length of the prefix, in bytes */ ulint prtype, /* in: precise type */ ulint mbminlen, /* in: minimum length of a multi-byte character */ ulint mbmaxlen, /* in: maximum length of a multi-byte character */ ulint prefix_len, /* in: length of the requested prefix, in characters, multiplied by dtype_get_mbmaxlen(dtype) */ ulint data_len, /* in: length of str (in bytes) */ const char* str) /* in: the string whose prefix length is being determined */ { #ifndef UNIV_HOTBACKUP ut_a(data_len != UNIV_SQL_NULL); ut_ad(!mbmaxlen || !(prefix_len % mbmaxlen)); if (mbminlen != mbmaxlen) { ut_a(!(prefix_len % mbmaxlen)); return(innobase_get_at_most_n_mbchars( dtype_get_charset_coll(prtype), prefix_len, data_len, str)); } if (prefix_len < data_len) { return(prefix_len); } return(data_len); #else /* UNIV_HOTBACKUP */ /* This function depends on MySQL code that is not included in InnoDB Hot Backup builds. Besides, this function should never be called in InnoDB Hot Backup. */ ut_error; #endif /* UNIV_HOTBACKUP */ }