summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <bar@mysql.com>2005-04-06 11:53:15 +0500
committerunknown <bar@mysql.com>2005-04-06 11:53:15 +0500
commit5687fe36bf21add03b96871215c58bd2e12a4666 (patch)
treee7ff1b9199a6be79542bbe6fbdf4588d1e054d48 /sql
parent81125bc8ceb2de09fb0db1851ca80edb45b290e2 (diff)
downloadmariadb-git-5687fe36bf21add03b96871215c58bd2e12a4666.tar.gz
Adding a new parameter for well_formed_length to
return error. We'll use it for better warnign reporting.
Diffstat (limited to 'sql')
-rw-r--r--sql/field.cc15
-rw-r--r--sql/sql_yacc.yy3
2 files changed, 10 insertions, 8 deletions
diff --git a/sql/field.cc b/sql/field.cc
index bf581e62f34..740c027350d 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -4939,9 +4939,10 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
as well as don't copy a malformed data.
*/
copy_length= field_charset->cset->well_formed_len(field_charset,
- from,from+length,
- field_length/
- field_charset->mbmaxlen);
+ from,from+length,
+ field_length/
+ field_charset->mbmaxlen,
+ &error);
memcpy(ptr,from,copy_length);
if (copy_length < field_length) // Append spaces if shorter
field_charset->cset->fill(field_charset,ptr+copy_length,
@@ -4958,7 +4959,6 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
}
if (error)
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
-
return error;
}
@@ -5577,9 +5577,10 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
the 'min()' call below.
*/
copy_length= field_charset->cset->well_formed_len(field_charset,
- from,from +
- min(length, copy_length),
- copy_length);
+ from,from +
+ min(length, copy_length),
+ copy_length,
+ &error);
if (copy_length < length)
error= 1;
Field_blob::store_length(copy_length);
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 9f25e17b6fd..dcda19a7080 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -5032,9 +5032,10 @@ IDENT_sys:
if (thd->charset_is_system_charset)
{
CHARSET_INFO *cs= system_charset_info;
+ int dummy_error;
uint wlen= cs->cset->well_formed_len(cs, $1.str,
$1.str+$1.length,
- $1.length);
+ $1.length, &dummy_error);
if (wlen < $1.length)
{
net_printf(YYTHD, ER_INVALID_CHARACTER_STRING, cs->csname,