diff options
Diffstat (limited to 'sql/handler.cc')
-rw-r--r-- | sql/handler.cc | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/sql/handler.cc b/sql/handler.cc index 3516b55feb5..040d1b0c279 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1774,12 +1774,22 @@ void handler::print_error(int error, myf errflag) /* Write the dupplicated key in the error message */ char key[MAX_KEY_LENGTH]; String str(key,sizeof(key),system_charset_info); - key_unpack(&str,table,(uint) key_nr); - uint max_length=MYSQL_ERRMSG_SIZE-(uint) strlen(ER(ER_DUP_ENTRY)); - if (str.length() >= max_length) + + if (key_nr == MAX_KEY) + { + /* Key is unknown */ + str.copy("", 0, system_charset_info); + key_nr= -1; + } + else { - str.length(max_length-4); - str.append(STRING_WITH_LEN("...")); + key_unpack(&str,table,(uint) key_nr); + uint max_length=MYSQL_ERRMSG_SIZE-(uint) strlen(ER(ER_DUP_ENTRY)); + if (str.length() >= max_length) + { + str.length(max_length-4); + str.append(STRING_WITH_LEN("...")); + } } my_error(ER_DUP_ENTRY, MYF(0), str.c_ptr(), key_nr+1); DBUG_VOID_RETURN; |