summaryrefslogtreecommitdiff
path: root/sql/field.cc
diff options
context:
space:
mode:
authorbar@mysql.com <>2006-03-31 17:38:00 +0500
committerbar@mysql.com <>2006-03-31 17:38:00 +0500
commit67f26cc43278e51c625a01b87c6cde770b040ad5 (patch)
treef1d3a5ddf744e1e7a411bda9ac386b4d4fa9b0bc /sql/field.cc
parent486a48d46cfea25b23858b958d02702ea24a8983 (diff)
parent07e21be0fe707e4b147a5fdd796db5ce2f5d49c0 (diff)
downloadmariadb-git-67f26cc43278e51c625a01b87c6cde770b040ad5.tar.gz
Merge mysql.com:/usr/home/bar/mysql-5.0.1.2107.1.1
into mysql.com:/usr/home/bar/mysql-5.1-new
Diffstat (limited to 'sql/field.cc')
-rw-r--r--sql/field.cc23
1 files changed, 21 insertions, 2 deletions
diff --git a/sql/field.cc b/sql/field.cc
index 708b239b494..1f67f83aabd 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -4237,6 +4237,7 @@ double Field_double::val_real(void)
longlong Field_double::val_int(void)
{
double j;
+ longlong res;
#ifdef WORDS_BIGENDIAN
if (table->s->db_low_byte_first)
{
@@ -4247,10 +4248,28 @@ longlong Field_double::val_int(void)
doubleget(j,ptr);
/* Check whether we fit into longlong range */
if (j <= (double) LONGLONG_MIN)
- return (longlong) LONGLONG_MIN;
+ {
+ res= (longlong) LONGLONG_MIN;
+ goto warn;
+ }
if (j >= (double) (ulonglong) LONGLONG_MAX)
- return (longlong) LONGLONG_MAX;
+ {
+ res= (longlong) LONGLONG_MAX;
+ goto warn;
+ }
return (longlong) rint(j);
+
+warn:
+ {
+ char buf[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
+ String tmp(buf, sizeof(buf), &my_charset_latin1), *str;
+ str= val_str(&tmp, 0);
+ push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_TRUNCATED_WRONG_VALUE,
+ ER(ER_TRUNCATED_WRONG_VALUE), "INTEGER",
+ str->c_ptr());
+ }
+ return res;
}