From 53802ae6ca0ea2d95c9d24b8c07a27213406131e Mon Sep 17 00:00:00 2001 From: Davi Arnaut Date: Thu, 5 Mar 2009 08:20:01 -0300 Subject: Bug#41465: confusing error message when comment is too long The problem was that the server was trying to use the unknown error format string (ER_UNKNOWN_ERROR) to print messages about comments being too long, but the said format string does not accept arguments and will always default to "Unknown error". The solution is to introduce new error messages which are specific to the error conditions so that server wants to signal -- this also means that it's possible to translate those messages. mysql-test/r/strict.result: Update test case result. mysql-test/t/strict.test: Update test case with new errors. sql/share/errmsg.txt: Introduce new errors for long comments. sql/unireg.cc: Use new errors. --- sql/unireg.cc | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'sql/unireg.cc') diff --git a/sql/unireg.cc b/sql/unireg.cc index da018ebec3d..51293184ad8 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -229,16 +229,16 @@ bool mysql_create_frm(THD *thd, const char *file_name, create_info->comment.length, 60); if (tmp_len < create_info->comment.length) { - (void) my_snprintf(buff, sizeof(buff), "Too long comment for table '%s'", - table); if ((thd->variables.sql_mode & (MODE_STRICT_TRANS_TABLES | MODE_STRICT_ALL_TABLES))) { - my_message(ER_UNKNOWN_ERROR, buff, MYF(0)); + my_error(ER_TOO_LONG_TABLE_COMMENT, MYF(0), table, tmp_len); goto err; } push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, - ER_UNKNOWN_ERROR, ER(ER_UNKNOWN_ERROR), buff); + ER_TOO_LONG_TABLE_COMMENT, + ER(ER_TOO_LONG_TABLE_COMMENT), + table, tmp_len); create_info->comment.length= tmp_len; } @@ -613,17 +613,16 @@ static bool pack_header(uchar *forminfo, enum legacy_db_type table_type, 255); if (tmp_len < field->comment.length) { - char buff[128]; - (void) my_snprintf(buff,sizeof(buff), "Too long comment for field '%s'", - field->field_name); if ((current_thd->variables.sql_mode & (MODE_STRICT_TRANS_TABLES | MODE_STRICT_ALL_TABLES))) { - my_message(ER_UNKNOWN_ERROR, buff, MYF(0)); + my_error(ER_TOO_LONG_FIELD_COMMENT, MYF(0), field->field_name, tmp_len); DBUG_RETURN(1); } push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, - ER_UNKNOWN_ERROR, ER(ER_UNKNOWN_ERROR), buff); + ER_TOO_LONG_FIELD_COMMENT, + ER(ER_TOO_LONG_FIELD_COMMENT), + field->field_name, tmp_len); field->comment.length= tmp_len; } -- cgit v1.2.1