Commit 891e8d07 authored by jimw@mysql.com's avatar jimw@mysql.com

Fix value of YEAR field when set from a non-numeric string. (Bug #6067)

parent a8039e1a
...@@ -96,3 +96,11 @@ f2 ...@@ -96,3 +96,11 @@ f2
19781126 19781126
19781126 19781126
DROP TABLE t1, t2, t3; DROP TABLE t1, t2, t3;
CREATE TABLE t1 (y YEAR);
INSERT INTO t1 VALUES ('abc');
Warnings:
Warning 1265 Data truncated for column 'y' at row 1
SELECT * FROM t1;
y
0000
DROP TABLE t1;
...@@ -107,3 +107,10 @@ SELECT * FROM t2; ...@@ -107,3 +107,10 @@ SELECT * FROM t2;
SELECT * FROM t3; SELECT * FROM t3;
DROP TABLE t1, t2, t3; DROP TABLE t1, t2, t3;
# Test that setting YEAR to invalid string results in default value, not
# 2000. (Bug #6067)
CREATE TABLE t1 (y YEAR);
INSERT INTO t1 VALUES ('abc');
SELECT * FROM t1;
DROP TABLE t1;
...@@ -3511,9 +3511,17 @@ void Field_time::sql_type(String &res) const ...@@ -3511,9 +3511,17 @@ void Field_time::sql_type(String &res) const
int Field_year::store(const char *from, uint len,CHARSET_INFO *cs) int Field_year::store(const char *from, uint len,CHARSET_INFO *cs)
{ {
int not_used; // We can ignore result from str2int int err;
char *end; char *end;
long nr= my_strntol(cs, from, len, 10, &end, &not_used); long nr= my_strntol(cs, from, len, 10, &end, &err);
if (err)
{
if (table->in_use->count_cuted_fields)
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
*ptr= 0;
return 0;
}
if (nr < 0 || nr >= 100 && nr <= 1900 || nr > 2155) if (nr < 0 || nr >= 100 && nr <= 1900 || nr > 2155)
{ {
......
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