Fix for Bug#34274: Invalid handling of 'DEFAULT 0'

for YEAR data type.

The problem was that for some unknown reason 0 was not allowed
as a default value for YEAR data type. That was coded before BK.
However the Manual does not say a word about such a limitation.
Also, it looks inconsistent with other data types.

The fix is to allow 0 as a default value.
parent 03242842
...@@ -1847,4 +1847,45 @@ DROP TABLE t3; ...@@ -1847,4 +1847,45 @@ DROP TABLE t3;
# -- End of Bug#18834. # -- End of Bug#18834.
# --
# -- Bug#34274: Invalid handling of 'DEFAULT 0' for YEAR data type.
# --
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(c1 YEAR DEFAULT 2008, c2 YEAR DEFAULT 0);
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` year(4) DEFAULT '2008',
`c2` year(4) DEFAULT '0000'
) ENGINE=MyISAM DEFAULT CHARSET=latin1
INSERT INTO t1 VALUES();
SELECT * FROM t1;
c1 c2
2008 0000
ALTER TABLE t1 MODIFY c1 YEAR DEFAULT 0;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` year(4) DEFAULT '0000',
`c2` year(4) DEFAULT '0000'
) ENGINE=MyISAM DEFAULT CHARSET=latin1
INSERT INTO t1 VALUES();
SELECT * FROM t1;
c1 c2
2008 0000
0000 0000
DROP TABLE t1;
# -- End of Bug#34274
End of 5.1 tests End of 5.1 tests
...@@ -1365,6 +1365,8 @@ create table t1 like information_schema.character_sets; ...@@ -1365,6 +1365,8 @@ create table t1 like information_schema.character_sets;
show create table t1; show create table t1;
drop table t1; drop table t1;
###########################################################################
--echo --echo
--echo # -- --echo # --
--echo # -- Bug#21380: DEFAULT definition not always transfered by CREATE --echo # -- Bug#21380: DEFAULT definition not always transfered by CREATE
...@@ -1407,8 +1409,10 @@ DROP TABLE t2; ...@@ -1407,8 +1409,10 @@ DROP TABLE t2;
--echo --echo
--echo # -- End of test case for Bug#21380. --echo # -- End of test case for Bug#21380.
--echo
###########################################################################
--echo
--echo # -- --echo # --
--echo # -- Bug#18834: ALTER TABLE ADD INDEX on table with two timestamp fields --echo # -- Bug#18834: ALTER TABLE ADD INDEX on table with two timestamp fields
--echo # -- --echo # --
...@@ -1471,6 +1475,50 @@ DROP TABLE t3; ...@@ -1471,6 +1475,50 @@ DROP TABLE t3;
--echo --echo
--echo # -- End of Bug#18834. --echo # -- End of Bug#18834.
###########################################################################
--echo
--echo # --
--echo # -- Bug#34274: Invalid handling of 'DEFAULT 0' for YEAR data type.
--echo # --
--echo
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
--echo
CREATE TABLE t1(c1 YEAR DEFAULT 2008, c2 YEAR DEFAULT 0);
--echo
SHOW CREATE TABLE t1;
--echo
INSERT INTO t1 VALUES();
--echo
SELECT * FROM t1;
--echo
ALTER TABLE t1 MODIFY c1 YEAR DEFAULT 0;
--echo
SHOW CREATE TABLE t1;
--echo --echo
INSERT INTO t1 VALUES();
--echo
SELECT * FROM t1;
--echo
DROP TABLE t1;
--echo
--echo # -- End of Bug#34274
###########################################################################
--echo
--echo End of 5.1 tests --echo End of 5.1 tests
...@@ -979,9 +979,7 @@ static bool make_empty_rec(THD *thd, File file,enum legacy_db_type table_type, ...@@ -979,9 +979,7 @@ static bool make_empty_rec(THD *thd, File file,enum legacy_db_type table_type,
type= (Field::utype) MTYP_TYPENR(field->unireg_check); type= (Field::utype) MTYP_TYPENR(field->unireg_check);
if (field->def && if (field->def)
(regfield->real_type() != MYSQL_TYPE_YEAR ||
field->def->val_int() != 0))
{ {
int res= field->def->save_in_field(regfield, 1); int res= field->def->save_in_field(regfield, 1);
/* If not ok or warning of level 'note' */ /* If not ok or warning of level 'note' */
......
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