Commit d7fbff3e authored by jimw@mysql.com's avatar jimw@mysql.com

Merge mysql.com:/home/jimw/my/mysql-5.0-5906

into  mysql.com:/home/jimw/my/mysql-5.0-clean
parents 39efcdcf dd2f631e
...@@ -53,7 +53,7 @@ enum enum_mysql_timestamp_type ...@@ -53,7 +53,7 @@ enum enum_mysql_timestamp_type
str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time, str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
uint flags, int *was_cut); uint flags, int *was_cut);
longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res, longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
my_bool fuzzy_date, int *was_cut); uint flags, int *was_cut);
ulonglong TIME_to_ulonglong_datetime(const MYSQL_TIME *time); ulonglong TIME_to_ulonglong_datetime(const MYSQL_TIME *time);
ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *time); ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *time);
ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *time); ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *time);
......
...@@ -3585,7 +3585,7 @@ static void fetch_string_with_conversion(MYSQL_BIND *param, char *value, ...@@ -3585,7 +3585,7 @@ static void fetch_string_with_conversion(MYSQL_BIND *param, char *value,
case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_TIMESTAMP:
{ {
MYSQL_TIME *tm= (MYSQL_TIME *)buffer; MYSQL_TIME *tm= (MYSQL_TIME *)buffer;
(void) str_to_datetime(value, length, tm, 0, &err); (void) str_to_datetime(value, length, tm, TIME_FUZZY_DATE, &err);
*param->error= test(err) && (param->buffer_type == MYSQL_TYPE_DATE && *param->error= test(err) && (param->buffer_type == MYSQL_TYPE_DATE &&
tm->time_type != MYSQL_TIMESTAMP_DATE); tm->time_type != MYSQL_TIMESTAMP_DATE);
break; break;
...@@ -3703,7 +3703,8 @@ static void fetch_long_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field, ...@@ -3703,7 +3703,8 @@ static void fetch_long_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_DATETIME:
{ {
int error; int error;
value= number_to_datetime(value, (MYSQL_TIME *) buffer, 1, &error); value= number_to_datetime(value, (MYSQL_TIME *) buffer, TIME_FUZZY_DATE,
&error);
*param->error= test(error); *param->error= test(error);
break; break;
} }
......
...@@ -2976,25 +2976,25 @@ Warnings: ...@@ -2976,25 +2976,25 @@ Warnings:
Warning 1265 Data truncated for column 'c17' at row 1 Warning 1265 Data truncated for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
......
...@@ -2959,25 +2959,25 @@ Warnings: ...@@ -2959,25 +2959,25 @@ Warnings:
Warning 1265 Data truncated for column 'c17' at row 1 Warning 1265 Data truncated for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
......
...@@ -2960,25 +2960,25 @@ Warnings: ...@@ -2960,25 +2960,25 @@ Warnings:
Warning 1265 Data truncated for column 'c17' at row 1 Warning 1265 Data truncated for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
......
...@@ -2896,25 +2896,25 @@ Warnings: ...@@ -2896,25 +2896,25 @@ Warnings:
Warning 1265 Data truncated for column 'c17' at row 1 Warning 1265 Data truncated for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
...@@ -5908,25 +5908,25 @@ Warnings: ...@@ -5908,25 +5908,25 @@ Warnings:
Warning 1265 Data truncated for column 'c17' at row 1 Warning 1265 Data truncated for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
......
...@@ -2959,25 +2959,25 @@ Warnings: ...@@ -2959,25 +2959,25 @@ Warnings:
Warning 1265 Data truncated for column 'c17' at row 1 Warning 1265 Data truncated for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
......
...@@ -2959,25 +2959,25 @@ Warnings: ...@@ -2959,25 +2959,25 @@ Warnings:
Warning 1265 Data truncated for column 'c17' at row 1 Warning 1265 Data truncated for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
Warnings: Warnings:
Warning 1264 Out of range value adjusted for column 'c13' at row 1 Warning 1264 Out of range value adjusted for column 'c13' at row 1
Warning 1265 Data truncated for column 'c14' at row 1 Warning 1264 Out of range value adjusted for column 'c14' at row 1
Warning 1265 Data truncated for column 'c15' at row 1 Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value adjusted for column 'c16' at row 1 Warning 1264 Out of range value adjusted for column 'c16' at row 1
Warning 1264 Out of range value adjusted for column 'c17' at row 1 Warning 1264 Out of range value adjusted for column 'c17' at row 1
......
...@@ -1244,4 +1244,15 @@ t1 CREATE TABLE `t1` ( ...@@ -1244,4 +1244,15 @@ t1 CREATE TABLE `t1` (
`a` bigint(20) unsigned NOT NULL, `a` bigint(20) unsigned NOT NULL,
`b` date NOT NULL `b` date NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
create table t1 (d date);
insert into t1 values ('2000-10-00');
ERROR 22007: Incorrect date value: '2000-10-00' for column 'd' at row 1
insert into t1 values (1000);
ERROR 22007: Incorrect date value: '1000' for column 'd' at row 1
insert into t1 values ('2000-10-01');
update t1 set d = 1100;
ERROR 22007: Incorrect date value: '1100' for column 'd' at row 1
select * from t1;
d
2000-10-01
drop table t1; drop table t1;
...@@ -40,6 +40,12 @@ insert into t1 (i, ts) values ...@@ -40,6 +40,12 @@ insert into t1 (i, ts) values
Warnings: Warnings:
Warning 1299 Invalid TIMESTAMP value in column 'ts' at row 2 Warning 1299 Invalid TIMESTAMP value in column 'ts' at row 2
insert into t1 (i, ts) values insert into t1 (i, ts) values
(unix_timestamp(20030330015959),20030330015959),
(unix_timestamp(20030330023000),20030330023000),
(unix_timestamp(20030330030000),20030330030000);
Warnings:
Warning 1299 Invalid TIMESTAMP value in column 'ts' at row 2
insert into t1 (i, ts) values
(unix_timestamp('2003-05-01 00:00:00'),'2003-05-01 00:00:00'); (unix_timestamp('2003-05-01 00:00:00'),'2003-05-01 00:00:00');
insert into t1 (i, ts) values insert into t1 (i, ts) values
(unix_timestamp('2003-10-26 01:00:00'),'2003-10-26 01:00:00'), (unix_timestamp('2003-10-26 01:00:00'),'2003-10-26 01:00:00'),
...@@ -54,6 +60,9 @@ i ts ...@@ -54,6 +60,9 @@ i ts
1048985999 2003-03-30 00:59:59 1048985999 2003-03-30 00:59:59
1048986000 2003-03-30 01:00:00 1048986000 2003-03-30 01:00:00
1048986000 2003-03-30 01:00:00 1048986000 2003-03-30 01:00:00
1048985999 2003-03-30 00:59:59
1048986000 2003-03-30 01:00:00
1048986000 2003-03-30 01:00:00
1051740000 2003-04-30 22:00:00 1051740000 2003-04-30 22:00:00
1067122800 2003-10-25 23:00:00 1067122800 2003-10-25 23:00:00
1067126400 2003-10-26 00:00:00 1067126400 2003-10-26 00:00:00
......
...@@ -100,12 +100,12 @@ create table t1 (t datetime); ...@@ -100,12 +100,12 @@ create table t1 (t datetime);
insert into t1 values (20030102030460),(20030102036301),(20030102240401), insert into t1 values (20030102030460),(20030102036301),(20030102240401),
(20030132030401),(20031302030401),(100001202030401); (20030132030401),(20031302030401),(100001202030401);
Warnings: Warnings:
Warning 1265 Data truncated for column 't' at row 1 Warning 1264 Out of range value adjusted for column 't' at row 1
Warning 1265 Data truncated for column 't' at row 2 Warning 1264 Out of range value adjusted for column 't' at row 2
Warning 1265 Data truncated for column 't' at row 3 Warning 1264 Out of range value adjusted for column 't' at row 3
Warning 1265 Data truncated for column 't' at row 4 Warning 1264 Out of range value adjusted for column 't' at row 4
Warning 1265 Data truncated for column 't' at row 5 Warning 1264 Out of range value adjusted for column 't' at row 5
Warning 1265 Data truncated for column 't' at row 6 Warning 1264 Out of range value adjusted for column 't' at row 6
select * from t1; select * from t1;
t t
0000-00-00 00:00:00 0000-00-00 00:00:00
......
...@@ -1103,3 +1103,18 @@ create table t1(a int, b date not null); ...@@ -1103,3 +1103,18 @@ create table t1(a int, b date not null);
alter table t1 modify a bigint unsigned not null; alter table t1 modify a bigint unsigned not null;
show create table t1; show create table t1;
drop table t1; drop table t1;
#
# Bug #5906: handle invalid date due to conversion
#
set @@sql_mode='traditional';
create table t1 (d date);
--error 1292
insert into t1 values ('2000-10-00');
--error 1292
insert into t1 values (1000);
insert into t1 values ('2000-10-01');
--error 1292
update t1 set d = 1100;
select * from t1;
drop table t1;
...@@ -48,6 +48,11 @@ insert into t1 (i, ts) values ...@@ -48,6 +48,11 @@ insert into t1 (i, ts) values
(unix_timestamp('2003-03-30 01:59:59'),'2003-03-30 01:59:59'), (unix_timestamp('2003-03-30 01:59:59'),'2003-03-30 01:59:59'),
(unix_timestamp('2003-03-30 02:30:00'),'2003-03-30 02:30:00'), (unix_timestamp('2003-03-30 02:30:00'),'2003-03-30 02:30:00'),
(unix_timestamp('2003-03-30 03:00:00'),'2003-03-30 03:00:00'); (unix_timestamp('2003-03-30 03:00:00'),'2003-03-30 03:00:00');
# Values around and in spring time-gap
insert into t1 (i, ts) values
(unix_timestamp(20030330015959),20030330015959),
(unix_timestamp(20030330023000),20030330023000),
(unix_timestamp(20030330030000),20030330030000);
# Normal value with DST # Normal value with DST
insert into t1 (i, ts) values insert into t1 (i, ts) values
(unix_timestamp('2003-05-01 00:00:00'),'2003-05-01 00:00:00'); (unix_timestamp('2003-05-01 00:00:00'),'2003-05-01 00:00:00');
......
...@@ -56,11 +56,14 @@ uint calc_days_in_year(uint year) ...@@ -56,11 +56,14 @@ uint calc_days_in_year(uint year)
} }
/* /*
check date. Check datetime value for validity according to flags.
SYNOPOSIS SYNOPSIS
bool check_date() check_date()
time Date to check. ltime - Date to check.
not_zero_date - ltime is not the zero date
flags - flags to check
was_cut - set to whether the value was truncated
NOTES NOTES
Here we assume that year and month is ok ! Here we assume that year and month is ok !
...@@ -69,18 +72,35 @@ uint calc_days_in_year(uint year) ...@@ -69,18 +72,35 @@ uint calc_days_in_year(uint year)
RETURN RETURN
0 ok 0 ok
1 errro 1 error
*/ */
bool check_date(MYSQL_TIME *ltime) bool check_date(const MYSQL_TIME *ltime, bool not_zero_date, ulong flags,
int *was_cut)
{ {
if (ltime->month && ltime->day > days_in_month[ltime->month-1])
if (not_zero_date)
{ {
if (ltime->month != 2 || calc_days_in_year(ltime->year) != 366 || if ((((flags & TIME_NO_ZERO_IN_DATE) || !(flags & TIME_FUZZY_DATE)) &&
ltime->day != 29) (ltime->month == 0 || ltime->day == 0)) ||
return 1; (!(flags & TIME_INVALID_DATES) &&
ltime->month && ltime->day > days_in_month[ltime->month-1] &&
(ltime->month != 2 || calc_days_in_year(ltime->year) != 366 ||
ltime->day != 29)))
{
*was_cut= 2;
return TRUE;
}
} }
return 0; else if (flags & TIME_NO_ZERO_DATE)
{
/*
We don't set *was_cut here to signal that the problem was a zero date
and not an invalid date
*/
return TRUE;
}
return FALSE;
} }
...@@ -100,7 +120,7 @@ bool check_date(MYSQL_TIME *ltime) ...@@ -100,7 +120,7 @@ bool check_date(MYSQL_TIME *ltime)
TIME_INVALID_DATES Allow 2000-02-31 TIME_INVALID_DATES Allow 2000-02-31
was_cut 0 Value ok was_cut 0 Value ok
1 If value was cut during conversion 1 If value was cut during conversion
2 Date part was withing ranges but date was wrong 2 Date part was within ranges but date was wrong
DESCRIPTION DESCRIPTION
At least the following formats are recogniced (based on number of digits) At least the following formats are recogniced (based on number of digits)
...@@ -168,8 +188,6 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time, ...@@ -168,8 +188,6 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
*was_cut= 1; *was_cut= 1;
DBUG_RETURN(MYSQL_TIMESTAMP_NONE); DBUG_RETURN(MYSQL_TIMESTAMP_NONE);
} }
if (flags & TIME_NO_ZERO_IN_DATE)
flags&= ~TIME_FUZZY_DATE;
is_internal_format= 0; is_internal_format= 0;
/* This has to be changed if want to activate different timestamp formats */ /* This has to be changed if want to activate different timestamp formats */
...@@ -385,22 +403,10 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time, ...@@ -385,22 +403,10 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
if (year_length == 2 && not_zero_date) if (year_length == 2 && not_zero_date)
l_time->year+= (l_time->year < YY_PART_YEAR ? 2000 : 1900); l_time->year+= (l_time->year < YY_PART_YEAR ? 2000 : 1900);
if (!not_zero_date && (flags & TIME_NO_ZERO_DATE))
{
/*
We don't set *was_cut here to signal that the problem was a zero date
and not an invalid date
*/
goto err;
}
if (number_of_fields < 3 || if (number_of_fields < 3 ||
l_time->year > 9999 || l_time->month > 12 || l_time->year > 9999 || l_time->month > 12 ||
l_time->day > 31 || l_time->hour > 23 || l_time->day > 31 || l_time->hour > 23 ||
l_time->minute > 59 || l_time->second > 59 || l_time->minute > 59 || l_time->second > 59)
(!(flags & TIME_FUZZY_DATE) && (l_time->month == 0 ||
l_time->day == 0) &&
not_zero_date))
{ {
/* Only give warning for a zero date if there is some garbage after */ /* Only give warning for a zero date if there is some garbage after */
if (!not_zero_date) /* If zero date */ if (!not_zero_date) /* If zero date */
...@@ -418,15 +424,12 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time, ...@@ -418,15 +424,12 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
goto err; goto err;
} }
if (check_date(l_time, not_zero_date, flags, was_cut))
goto err;
l_time->time_type= (number_of_fields <= 3 ? l_time->time_type= (number_of_fields <= 3 ?
MYSQL_TIMESTAMP_DATE : MYSQL_TIMESTAMP_DATETIME); MYSQL_TIMESTAMP_DATE : MYSQL_TIMESTAMP_DATETIME);
if (not_zero_date && !(flags & TIME_INVALID_DATES) && check_date(l_time))
{
*was_cut= 2; /* Not correct date */
goto err;
}
for (; str != end ; str++) for (; str != end ; str++)
{ {
if (!my_isspace(&my_charset_latin1,*str)) if (!my_isspace(&my_charset_latin1,*str))
...@@ -881,9 +884,10 @@ int my_TIME_to_str(const MYSQL_TIME *l_time, char *to) ...@@ -881,9 +884,10 @@ int my_TIME_to_str(const MYSQL_TIME *l_time, char *to)
number_to_datetime() number_to_datetime()
nr - datetime value as number nr - datetime value as number
time_res - pointer for structure for broken-down representation time_res - pointer for structure for broken-down representation
fuzzy_date - indicates whenever we allow fuzzy dates flags - flags to use in validating date, as in str_to_datetime()
was_cut - set ot 1 if there was some kind of error during was_cut 0 Value ok
conversion or to 0 if everything was OK. 1 If value was cut during conversion
2 Date part was within ranges but date was wrong
DESCRIPTION DESCRIPTION
Convert a datetime value of formats YYMMDD, YYYYMMDD, YYMMDDHHMSS, Convert a datetime value of formats YYMMDD, YYYYMMDD, YYMMDDHHMSS,
...@@ -893,12 +897,13 @@ int my_TIME_to_str(const MYSQL_TIME *l_time, char *to) ...@@ -893,12 +897,13 @@ int my_TIME_to_str(const MYSQL_TIME *l_time, char *to)
This function also checks if datetime value fits in DATETIME range. This function also checks if datetime value fits in DATETIME range.
RETURN VALUE RETURN VALUE
-1 Timestamp with wrong values
anything else DATETIME as integer in YYYYMMDDHHMMSS format
Datetime value in YYYYMMDDHHMMSS format. Datetime value in YYYYMMDDHHMMSS format.
If input value is not valid datetime value then 0 is returned.
*/ */
longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res, longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
my_bool fuzzy_date, int *was_cut) uint flags, int *was_cut)
{ {
long part1,part2; long part1,part2;
...@@ -952,13 +957,17 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res, ...@@ -952,13 +957,17 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
if (time_res->year <= 9999 && time_res->month <= 12 && if (time_res->year <= 9999 && time_res->month <= 12 &&
time_res->day <= 31 && time_res->hour <= 23 && time_res->day <= 31 && time_res->hour <= 23 &&
time_res->minute <= 59 && time_res->second <= 59 && time_res->minute <= 59 && time_res->second <= 59 &&
(fuzzy_date || (time_res->month != 0 && time_res->day != 0) || nr==0)) !check_date(time_res, (nr != 0), flags, was_cut))
return nr; return nr;
/* Don't want to have was_cut get set if NO_ZERO_DATE was violated. */
if (!nr && flags & TIME_NO_ZERO_DATE)
return LL(-1);
err: err:
*was_cut= 1; *was_cut= 1;
return LL(0); return LL(-1);
} }
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment