Commit 1fcf8916 authored by Tatiana A. Nurnberg's avatar Tatiana A. Nurnberg

Bug#41370: TIMESTAMP field does not accepts NULL from FROM_UNIXTIME()

When storing a NULL to a TIMESTAMP NOT NULL DEFAULT ...,
NULL returned from some functions threw a 'cannot be NULL error.'

NULL-returns now correctly result in the timestamp-field being
assigned its default value.
parent 2048bd71
...@@ -492,6 +492,7 @@ a b c ...@@ -492,6 +492,7 @@ a b c
5 NULL 2001-09-09 04:46:59 5 NULL 2001-09-09 04:46:59
6 NULL 2006-06-06 06:06:06 6 NULL 2006-06-06 06:06:06
drop table t1; drop table t1;
End of 4.1 tests
set time_zone= @@global.time_zone; set time_zone= @@global.time_zone;
CREATE TABLE t1 ( CREATE TABLE t1 (
`id` int(11) NOT NULL auto_increment, `id` int(11) NOT NULL auto_increment,
...@@ -508,3 +509,21 @@ select is_nullable from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='t1' and COL ...@@ -508,3 +509,21 @@ select is_nullable from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='t1' and COL
is_nullable is_nullable
NO NO
drop table t1; drop table t1;
CREATE TABLE t1 ( f1 INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
f2 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
f3 TIMESTAMP);
INSERT INTO t1 (f2,f3) VALUES (NOW(), "0000-00-00 00:00:00");
INSERT INTO t1 (f2,f3) VALUES (NOW(), NULL);
INSERT INTO t1 (f2,f3) VALUES (NOW(), ASCII(NULL));
INSERT INTO t1 (f2,f3) VALUES (NOW(), FROM_UNIXTIME('9999999999'));
INSERT INTO t1 (f2,f3) VALUES (NOW(), TIME(NULL));
UPDATE t1 SET f2=NOW(), f3=FROM_UNIXTIME('9999999999') WHERE f1=1;
SELECT f1,f2-f3 FROM t1;
f1 f2-f3
1 0
2 0
3 0
4 0
5 0
DROP TABLE t1;
End of 5.0 tests
...@@ -324,7 +324,7 @@ insert into t1 (a, c) values (4, '2004-04-04 00:00:00'), ...@@ -324,7 +324,7 @@ insert into t1 (a, c) values (4, '2004-04-04 00:00:00'),
select * from t1; select * from t1;
drop table t1; drop table t1;
# End of 4.1 tests --echo End of 4.1 tests
# Restore timezone to default # Restore timezone to default
set time_zone= @@global.time_zone; set time_zone= @@global.time_zone;
...@@ -339,3 +339,21 @@ PRIMARY KEY (`id`) ...@@ -339,3 +339,21 @@ PRIMARY KEY (`id`)
show fields from t1; show fields from t1;
select is_nullable from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='t1' and COLUMN_NAME='posted_on'; select is_nullable from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='t1' and COLUMN_NAME='posted_on';
drop table t1; drop table t1;
#
# Bug#41370: TIMESTAMP field does not accepts NULL from FROM_UNIXTIME()
#
CREATE TABLE t1 ( f1 INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
f2 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
f3 TIMESTAMP);
INSERT INTO t1 (f2,f3) VALUES (NOW(), "0000-00-00 00:00:00");
INSERT INTO t1 (f2,f3) VALUES (NOW(), NULL);
INSERT INTO t1 (f2,f3) VALUES (NOW(), ASCII(NULL));
INSERT INTO t1 (f2,f3) VALUES (NOW(), FROM_UNIXTIME('9999999999'));
INSERT INTO t1 (f2,f3) VALUES (NOW(), TIME(NULL));
UPDATE t1 SET f2=NOW(), f3=FROM_UNIXTIME('9999999999') WHERE f1=1;
SELECT f1,f2-f3 FROM t1;
DROP TABLE t1;
--echo End of 5.0 tests
...@@ -321,7 +321,7 @@ int Item::save_time_in_field(Field *field) ...@@ -321,7 +321,7 @@ int Item::save_time_in_field(Field *field)
{ {
MYSQL_TIME ltime; MYSQL_TIME ltime;
if (get_time(&ltime)) if (get_time(&ltime))
return set_field_to_null(field); return set_field_to_null_with_conversions(field, 0);
field->set_notnull(); field->set_notnull();
return field->store_time(&ltime, MYSQL_TIMESTAMP_TIME); return field->store_time(&ltime, MYSQL_TIMESTAMP_TIME);
} }
...@@ -331,7 +331,7 @@ int Item::save_date_in_field(Field *field) ...@@ -331,7 +331,7 @@ int Item::save_date_in_field(Field *field)
{ {
MYSQL_TIME ltime; MYSQL_TIME ltime;
if (get_date(&ltime, TIME_FUZZY_DATE)) if (get_date(&ltime, TIME_FUZZY_DATE))
return set_field_to_null(field); return set_field_to_null_with_conversions(field, 0);
field->set_notnull(); field->set_notnull();
return field->store_time(&ltime, MYSQL_TIMESTAMP_DATETIME); return field->store_time(&ltime, MYSQL_TIMESTAMP_DATETIME);
} }
......
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