Commit a65d12a8 authored by msvensson@pilot.blaudden's avatar msvensson@pilot.blaudden
Browse files

Backport of TIME->MYSQL_TIME / Y2K fixset

   
Made year 2000 handling more uniform
Removed year 2000 handling out from calc_days()
The above removes some bugs in date/datetimes with year between 0 and 200
Now we get a note when we insert a datetime value into a date column
For default values to CREATE, don't give errors for warning level NOTE
Fixed some compiler failures
Added library ws2_32 for windows compilation (needed if we want to compile with IOCP support)
Removed duplicate typedef TIME and replaced it with MYSQL_TIME

Better (more complete) fix for: Bug#21103 "DATE column not compared as DATE"
Fixed properly Bug#18997 "DATE_ADD and DATE_SUB perform year2K autoconversion magic on 4-digit year value"
Fixed Bug#23093 "Implicit conversion of 9912101 to date does not match cast(9912101 as date)"
 
parent 19618b53
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ int check_time_range(struct st_mysql_time *, int *warning);

long calc_daynr(uint year,uint month,uint day);
uint calc_days_in_year(uint year);
uint year_2000_handling(uint year);

void init_time(void);

+16 −2
Original line number Diff line number Diff line
@@ -88,6 +88,8 @@ create table t1 (date char(30), format char(30) not null);
insert into t1 values
('2003-01-02 10:11:12', '%Y-%m-%d %H:%i:%S'),
('03-01-02 8:11:2.123456', '%y-%m-%d %H:%i:%S.%#'),
('0003-01-02 8:11:2.123456', '%Y-%m-%d %H:%i:%S.%#'),
('03-01-02 8:11:2.123456',   '%Y-%m-%d %H:%i:%S.%#'),
('2003-01-02 10:11:12 PM', '%Y-%m-%d %h:%i:%S %p'),
('2003-01-02 01:11:12.12345AM', '%Y-%m-%d %h:%i:%S.%f%p'),
('2003-01-02 02:11:12.12345AM', '%Y-%m-%d %h:%i:%S.%f %p'),
@@ -119,6 +121,8 @@ select date,format,str_to_date(date, format) as str_to_date from t1;
date	format	str_to_date
2003-01-02 10:11:12	%Y-%m-%d %H:%i:%S	2003-01-02 10:11:12
03-01-02 8:11:2.123456	%y-%m-%d %H:%i:%S.%#	2003-01-02 08:11:02
0003-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	0003-01-02 08:11:02
03-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	2003-01-02 08:11:02
2003-01-02 10:11:12 PM	%Y-%m-%d %h:%i:%S %p	2003-01-02 22:11:12
2003-01-02 01:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f%p	2003-01-02 01:11:12.123450
2003-01-02 02:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f %p	2003-01-02 02:11:12.123450
@@ -150,6 +154,8 @@ select date,format,concat('',str_to_date(date, format)) as con from t1;
date	format	con
2003-01-02 10:11:12	%Y-%m-%d %H:%i:%S	2003-01-02 10:11:12
03-01-02 8:11:2.123456	%y-%m-%d %H:%i:%S.%#	2003-01-02 08:11:02
0003-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	0003-01-02 08:11:02
03-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	2003-01-02 08:11:02
2003-01-02 10:11:12 PM	%Y-%m-%d %h:%i:%S %p	2003-01-02 22:11:12
2003-01-02 01:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f%p	2003-01-02 01:11:12.123450
2003-01-02 02:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f %p	2003-01-02 02:11:12.123450
@@ -181,6 +187,8 @@ select date,format,cast(str_to_date(date, format) as datetime) as datetime from
date	format	datetime
2003-01-02 10:11:12	%Y-%m-%d %H:%i:%S	2003-01-02 10:11:12
03-01-02 8:11:2.123456	%y-%m-%d %H:%i:%S.%#	2003-01-02 08:11:02
0003-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	0003-01-02 08:11:02
03-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	2003-01-02 08:11:02
2003-01-02 10:11:12 PM	%Y-%m-%d %h:%i:%S %p	2003-01-02 22:11:12
2003-01-02 01:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f%p	2003-01-02 01:11:12.123450
2003-01-02 02:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f %p	2003-01-02 02:11:12.123450
@@ -212,6 +220,8 @@ select date,format,DATE(str_to_date(date, format)) as date2 from t1;
date	format	date2
2003-01-02 10:11:12	%Y-%m-%d %H:%i:%S	2003-01-02
03-01-02 8:11:2.123456	%y-%m-%d %H:%i:%S.%#	2003-01-02
0003-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	0003-01-02
03-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	2003-01-02
2003-01-02 10:11:12 PM	%Y-%m-%d %h:%i:%S %p	2003-01-02
2003-01-02 01:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f%p	2003-01-02
2003-01-02 02:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f %p	2003-01-02
@@ -243,6 +253,8 @@ select date,format,TIME(str_to_date(date, format)) as time from t1;
date	format	time
2003-01-02 10:11:12	%Y-%m-%d %H:%i:%S	10:11:12
03-01-02 8:11:2.123456	%y-%m-%d %H:%i:%S.%#	08:11:02
0003-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	08:11:02
03-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	08:11:02
2003-01-02 10:11:12 PM	%Y-%m-%d %h:%i:%S %p	22:11:12
2003-01-02 01:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f%p	01:11:12.123450
2003-01-02 02:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f %p	02:11:12.123450
@@ -274,6 +286,8 @@ select date,format,concat(TIME(str_to_date(date, format))) as time2 from t1;
date	format	time2
2003-01-02 10:11:12	%Y-%m-%d %H:%i:%S	10:11:12
03-01-02 8:11:2.123456	%y-%m-%d %H:%i:%S.%#	08:11:02
0003-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	08:11:02
03-01-02 8:11:2.123456	%Y-%m-%d %H:%i:%S.%#	08:11:02
2003-01-02 10:11:12 PM	%Y-%m-%d %h:%i:%S %p	22:11:12
2003-01-02 01:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f%p	01:11:12.123450
2003-01-02 02:11:12.12345AM	%Y-%m-%d %h:%i:%S.%f %p	02:11:12.123450
@@ -399,14 +413,14 @@ select date,format,str_to_date(date, format) as str_to_date from t1;
date	format	str_to_date
10:20:10AM	%h:%i:%s	0000-00-00 10:20:10
2003-01-02 10:11:12	%Y-%m-%d %h:%i:%S	2003-01-02 10:11:12
03-01-02 10:11:12 PM	%Y-%m-%d %h:%i:%S %p	0003-01-02 22:11:12
03-01-02 10:11:12 PM	%Y-%m-%d %h:%i:%S %p	2003-01-02 22:11:12
Warnings:
Warning	1292	Truncated incorrect datetime value: '10:20:10AM'
select date,format,concat(str_to_date(date, format),'') as con from t1;
date	format	con
10:20:10AM	%h:%i:%s	0000-00-00 10:20:10
2003-01-02 10:11:12	%Y-%m-%d %h:%i:%S	2003-01-02 10:11:12
03-01-02 10:11:12 PM	%Y-%m-%d %h:%i:%S %p	0003-01-02 22:11:12
03-01-02 10:11:12 PM	%Y-%m-%d %h:%i:%S %p	2003-01-02 22:11:12
Warnings:
Warning	1292	Truncated incorrect datetime value: '10:20:10AM'
drop table t1;
+6 −0
Original line number Diff line number Diff line
@@ -75,6 +75,12 @@ NULL
select weekofyear("1997-11-30 23:59:59.000001");
weekofyear("1997-11-30 23:59:59.000001")
48
select makedate(03,1);
makedate(03,1)
2003-01-01
select makedate('0003',1);
makedate('0003',1)
2003-01-01
select makedate(1997,1);
makedate(1997,1)
1997-01-01
+7 −0
Original line number Diff line number Diff line
@@ -2961,20 +2961,26 @@ delete from t9 ;
test_sequence
-- insert into date/time columns --
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Warning	1264	Out of range value adjusted for column 'c13' at row 1
@@ -3005,6 +3011,7 @@ 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 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' 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 'c17' at row 1
+7 −0
Original line number Diff line number Diff line
@@ -2944,20 +2944,26 @@ delete from t9 ;
test_sequence
-- insert into date/time columns --
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' at row 1
Warning	1265	Data truncated for column 'c17' at row 1
Warnings:
Warning	1264	Out of range value adjusted for column 'c13' at row 1
@@ -2988,6 +2994,7 @@ 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 'c17' at row 1
Warnings:
Note	1265	Data truncated for column 'c13' 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 'c17' at row 1
Loading