1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

Merge polly.local:/tmp/maint/bug11655/my41-bug11655

into  polly.local:/tmp/maint/bug11655/my50-bug11655


sql/time.cc:
  Auto merged
include/my_time.h:
  Manually merged
mysql-test/r/func_sapdb.result:
  Manually merged
mysql-test/r/func_time.result:
  Manually merged
mysql-test/t/func_time.test:
  Manually merged
sql-common/my_time.c:
  Manually merged
sql/field.cc:
  Manually merged
sql/item_timefunc.cc:
  Manually merged
This commit is contained in:
unknown
2006-10-11 14:16:30 +04:00
8 changed files with 429 additions and 94 deletions

View File

@ -4759,9 +4759,10 @@ int Field_time::store(const char *from,uint len,CHARSET_INFO *cs)
{
TIME ltime;
long tmp;
int error;
int error= 0;
int warning;
if (str_to_time(from, len, &ltime, &error))
if (str_to_time(from, len, &ltime, &warning))
{
tmp=0L;
error= 2;
@ -4770,29 +4771,27 @@ int Field_time::store(const char *from,uint len,CHARSET_INFO *cs)
}
else
{
if (error)
if (warning & MYSQL_TIME_WARN_TRUNCATED)
set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
WARN_DATA_TRUNCATED,
from, len, MYSQL_TIMESTAMP_TIME, 1);
if (ltime.month)
ltime.day=0;
tmp=(ltime.day*24L+ltime.hour)*10000L+(ltime.minute*100+ltime.second);
if (tmp > 8385959)
if (warning & MYSQL_TIME_WARN_OUT_OF_RANGE)
{
tmp=8385959;
set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_DATA_OUT_OF_RANGE,
from, len, MYSQL_TIMESTAMP_TIME, !error);
error= 1;
}
if (ltime.month)
ltime.day=0;
tmp=(ltime.day*24L+ltime.hour)*10000L+(ltime.minute*100+ltime.second);
if (error > 1)
error= 2;
}
if (ltime.neg)
tmp= -tmp;
error |= Field_time::store((longlong) tmp, FALSE);
int3store(ptr,tmp);
return error;
}
@ -4811,16 +4810,16 @@ int Field_time::store(double nr)
{
long tmp;
int error= 0;
if (nr > 8385959.0)
if (nr > (double)TIME_MAX_VALUE)
{
tmp=8385959L;
tmp= TIME_MAX_VALUE;
set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_DATA_OUT_OF_RANGE, nr, MYSQL_TIMESTAMP_TIME);
error= 1;
}
else if (nr < -8385959.0)
else if (nr < (double)-TIME_MAX_VALUE)
{
tmp= -8385959L;
tmp= -TIME_MAX_VALUE;
set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_DATA_OUT_OF_RANGE, nr, MYSQL_TIMESTAMP_TIME);
error= 1;
@ -4848,17 +4847,17 @@ int Field_time::store(longlong nr, bool unsigned_val)
{
long tmp;
int error= 0;
if (nr < (longlong) -8385959L && !unsigned_val)
if (nr < (longlong) -TIME_MAX_VALUE && !unsigned_val)
{
tmp= -8385959L;
tmp= -TIME_MAX_VALUE;
set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_DATA_OUT_OF_RANGE, nr,
MYSQL_TIMESTAMP_TIME, 1);
error= 1;
}
else if (nr > (longlong) 8385959 || nr < 0 && unsigned_val)
else if (nr > (longlong) TIME_MAX_VALUE || nr < 0 && unsigned_val)
{
tmp=8385959L;
tmp= TIME_MAX_VALUE;
set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_DATA_OUT_OF_RANGE, nr,
MYSQL_TIMESTAMP_TIME, 1);