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:
35
sql/field.cc
35
sql/field.cc
@ -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, <ime, &error))
|
||||
if (str_to_time(from, len, <ime, &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);
|
||||
|
Reference in New Issue
Block a user