diff options
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 61 |
1 files changed, 35 insertions, 26 deletions
diff --git a/sql/field.cc b/sql/field.cc index ff631edd8d4..278ba83cc81 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -1,5 +1,6 @@ /* - Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2011, Oracle and/or its affiliates. + Copyright (c) 2008-2011 Monty Program Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1166,7 +1167,8 @@ bool Field_num::get_int(CHARSET_INFO *cs, const char *from, uint len, if (unsigned_flag) { - if ((((ulonglong) *rnd > unsigned_max) && (*rnd= (longlong) unsigned_max)) || + if ((((ulonglong) *rnd > unsigned_max) && + (*rnd= (longlong) unsigned_max)) || error == MY_ERRNO_ERANGE) { goto out_of_range; @@ -2278,7 +2280,7 @@ int Field_decimal::store(double nr) snprintf(buff,sizeof(buff)-1, "%.*f",(int) dec,nr); length= strlen(buff); #else - length= sprintf(buff, "%.*f", dec, nr); + length= my_sprintf(buff,(buff,"%.*f",dec,nr)); #endif if (length > field_length) @@ -2995,18 +2997,18 @@ int Field_tiny::store(double nr) } else if (nr > 255.0) { - *ptr=(char) 255; + *ptr= (uchar) 255; set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1); error= 1; } else - *ptr=(char) nr; + *ptr= (uchar) nr; } else { if (nr < -128.0) { - *ptr= (char) -128; + *ptr= (uchar) -128; set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1); error= 1; } @@ -3017,7 +3019,7 @@ int Field_tiny::store(double nr) error= 1; } else - *ptr=(char) (int) nr; + *ptr=(uchar) (int) nr; } return error; } @@ -4124,7 +4126,7 @@ int Field_float::store(const char *from,uint len,CHARSET_INFO *cs) char *end; double nr= my_strntod(cs,(char*) from,len,&end,&error); if (error || (!len || ((uint) (end-from) != len && - table->in_use->count_cuted_fields))) + table->in_use->count_cuted_fields))) { set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, (error ? ER_WARN_DATA_OUT_OF_RANGE : WARN_DATA_TRUNCATED), 1); @@ -4260,7 +4262,7 @@ String *Field_float::val_str(String *val_buffer, snprintf(to,to_length-1,"%.*f",dec,nr); to=strend(to); #else - to+= sprintf(to, "%.*f", dec, nr); + to+= my_sprintf(to,(to,"%.*f",dec,nr)); #endif #endif } @@ -4386,7 +4388,7 @@ int Field_double::store(const char *from,uint len,CHARSET_INFO *cs) char *end; double nr= my_strntod(cs,(char*) from, len, &end, &error); if (error || (!len || ((uint) (end-from) != len && - table->in_use->count_cuted_fields))) + table->in_use->count_cuted_fields))) { set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, (error ? ER_WARN_DATA_OUT_OF_RANGE : WARN_DATA_TRUNCATED), 1); @@ -4618,7 +4620,7 @@ String *Field_double::val_str(String *val_buffer, snprintf(to,to_length-1,"%.*f",dec,nr); to=strend(to); #else - to+= sprintf(to, "%.*f", dec, nr); + to+= my_sprintf(to,(to,"%.*f",dec,nr)); #endif #endif } @@ -5389,7 +5391,7 @@ int Field_year::store(const char *from, uint len,CHARSET_INFO *cs) int error; longlong nr= cs->cset->strntoull10rnd(cs, from, len, 0, &end, &error); - if (nr < 0 || (nr >= 100 && nr <= 1900) || nr > 2155 || + if (nr < 0 || (nr >= 100 && nr <= 1900) || nr > 2155 || error == MY_ERRNO_ERANGE) { *ptr=0; @@ -5421,7 +5423,7 @@ int Field_year::store(const char *from, uint len,CHARSET_INFO *cs) int Field_year::store(double nr) { - if (nr < 0.0 || nr >= 2155.0) + if (nr < 0.0 || nr > 2155.0) { (void) Field_year::store((longlong) -1, FALSE); return 1; @@ -6424,16 +6426,22 @@ int Field_str::store(double nr) /* Calculate the exponent from the 'e'-format conversion */ if (anr < 1.0 && anr > 0) { - for (exp= 0; anr < 1e-100; exp-= 100, anr*= 1e100) ; - for (; anr < 1e-10; exp-= 10, anr*= 1e10) ; - for (i= 1; anr < 1 / log_10[i]; exp--, i++) ; + for (exp= 0; anr < 1e-100; exp-= 100, anr*= 1e100) + ; + for (; anr < 1e-10; exp-= 10, anr*= 1e10) + ; + for (i= 1; anr < 1 / log_10[i]; exp--, i++) + ; exp--; } else { - for (exp= 0; anr > 1e100; exp+= 100, anr/= 1e100) ; - for (; anr > 1e10; exp+= 10, anr/= 1e10) ; - for (i= 1; anr > log_10[i]; exp++, i++) ; + for (exp= 0; anr > 1e100; exp+= 100, anr/= 1e100) + ; + for (; anr > 1e10; exp+= 10, anr/= 1e10) + ; + for (i= 1; anr > log_10[i]; exp++, i++) + ; } max_length= local_char_length - neg; @@ -6462,7 +6470,7 @@ int Field_str::store(double nr) /* Limit precision to DBL_DIG to avoid garbage past significant digits */ set_if_smaller(digits, DBL_DIG); - length= (uint) sprintf(buff, "%-.*g", digits, nr); + length= (uint) my_sprintf(buff, (buff, "%-.*g", digits, nr)); #ifdef __WIN__ /* @@ -9012,7 +9020,8 @@ int Field_bit::store(const char *from, uint length, CHARSET_INFO *cs) ASSERT_COLUMN_MARKED_FOR_WRITE; int delta; - for (; length && !*from; from++, length--) ; // skip left 0's + for (; length && !*from; from++, length--) // skip left 0's + ; delta= bytes_in_rec - length; if (delta < -1 || @@ -9434,7 +9443,8 @@ int Field_bit_as_char::store(const char *from, uint length, CHARSET_INFO *cs) int delta; uchar bits= (uchar) (field_length & 7); - for (; length && !*from; from++, length--) ; // skip left 0's + for (; length && !*from; from++, length--) // skip left 0's + ; delta= bytes_in_rec - length; if (delta < 0 || @@ -9831,9 +9841,8 @@ bool Create_field::init(THD *thd, char *fld_name, enum_field_types fld_type, } break; case MYSQL_TYPE_DATE: - /* Old date type. */ - if (protocol_version != PROTOCOL_VERSION-1) - sql_type= MYSQL_TYPE_NEWDATE; + /* We don't support creation of MYSQL_TYPE_DATE anymore */ + sql_type= MYSQL_TYPE_NEWDATE; /* fall trough */ case MYSQL_TYPE_NEWDATE: length= MAX_DATE_WIDTH; @@ -10432,7 +10441,7 @@ Field::set_datetime_warning(MYSQL_ERROR::enum_warning_level level, uint code, { /* DBL_DIG is enough to print '-[digits].E+###' */ char str_nr[DBL_DIG + 8]; - uint str_len= sprintf(str_nr, "%g", nr); + uint str_len= my_sprintf(str_nr, (str_nr, "%g", nr)); make_truncated_value_warning(thd, level, str_nr, str_len, ts_type, field_name); } |