mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/dlenev/src/mysql-4.1-ryan
This commit is contained in:
@ -369,7 +369,7 @@ create table t1 (a timestamp null, b timestamp null);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
||||
`a` timestamp NULL default NULL,
|
||||
`b` timestamp NULL default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
insert into t1 values (NULL, NULL);
|
||||
@ -378,7 +378,22 @@ insert into t1 values ();
|
||||
select * from t1;
|
||||
a b
|
||||
NULL NULL
|
||||
2001-09-09 04:46:57 NULL
|
||||
NULL NULL
|
||||
drop table t1;
|
||||
create table t1 (a timestamp null default current_timestamp on update current_timestamp, b timestamp null);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
||||
`b` timestamp NULL default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
insert into t1 values (NULL, NULL);
|
||||
SET TIMESTAMP=1000000018;
|
||||
insert into t1 values ();
|
||||
select * from t1;
|
||||
a b
|
||||
NULL NULL
|
||||
2001-09-09 04:46:58 NULL
|
||||
drop table t1;
|
||||
create table t1 (a timestamp null default null, b timestamp null default '2003-01-01 00:00:00');
|
||||
show create table t1;
|
||||
|
@ -236,9 +236,10 @@ drop table t1;
|
||||
|
||||
#
|
||||
# Test for TIMESTAMP columns which are able to store NULLs
|
||||
# (Auto-set property should work for them and NULL values
|
||||
# should be OK as default values)
|
||||
#
|
||||
|
||||
# Unlike for default TIMESTAMP fields we don't interpret first field
|
||||
# in this table as TIMESTAMP with DEFAULT NOW() ON UPDATE NOW() properties.
|
||||
create table t1 (a timestamp null, b timestamp null);
|
||||
show create table t1;
|
||||
insert into t1 values (NULL, NULL);
|
||||
@ -247,6 +248,16 @@ insert into t1 values ();
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
# But explicit auto-set properties still should be OK.
|
||||
create table t1 (a timestamp null default current_timestamp on update current_timestamp, b timestamp null);
|
||||
show create table t1;
|
||||
insert into t1 values (NULL, NULL);
|
||||
SET TIMESTAMP=1000000018;
|
||||
insert into t1 values ();
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
# It is also OK to specify NULL as default explicitly for such fields.
|
||||
create table t1 (a timestamp null default null, b timestamp null default '2003-01-01 00:00:00');
|
||||
show create table t1;
|
||||
insert into t1 values (NULL, NULL);
|
||||
|
@ -4142,12 +4142,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
||||
}
|
||||
else if (default_value->type() == Item::NULL_ITEM)
|
||||
{
|
||||
/*
|
||||
TIMESTAMP type should be able to distingush non-specified default
|
||||
value and default value NULL later.
|
||||
*/
|
||||
if (type != FIELD_TYPE_TIMESTAMP)
|
||||
default_value= 0;
|
||||
default_value= 0;
|
||||
if ((type_modifier & (NOT_NULL_FLAG | AUTO_INCREMENT_FLAG)) ==
|
||||
NOT_NULL_FLAG)
|
||||
{
|
||||
@ -4357,19 +4352,27 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
||||
else
|
||||
new_field->unireg_check= (on_update_value?Field::TIMESTAMP_UN_FIELD:
|
||||
Field::NONE);
|
||||
|
||||
if (default_value->type() == Item::NULL_ITEM)
|
||||
new_field->def= 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
We are setting TIMESTAMP_OLD_FIELD here only temporary, we will
|
||||
replace this value by TIMESTAMP_DNUN_FIELD or NONE later when
|
||||
/*
|
||||
If we have default TIMESTAMP NOT NULL column without explicit DEFAULT
|
||||
or ON UPDATE values then for the sake of compatiblity we should treat
|
||||
this column as having DEFAULT NOW() ON UPDATE NOW() (when we don't
|
||||
have another TIMESTAMP column with auto-set option before this one)
|
||||
or DEFAULT 0 (in other cases).
|
||||
So here we are setting TIMESTAMP_OLD_FIELD only temporary, and will
|
||||
replace this value by TIMESTAMP_DNUN_FIELD or NONE later when
|
||||
information about all TIMESTAMP fields in table will be availiable.
|
||||
|
||||
If we have TIMESTAMP NULL column without explicit DEFAULT value
|
||||
we treat it as having DEFAULT NULL attribute.
|
||||
*/
|
||||
new_field->unireg_check= on_update_value?Field::TIMESTAMP_UN_FIELD:
|
||||
Field::TIMESTAMP_OLD_FIELD;
|
||||
new_field->unireg_check= on_update_value ?
|
||||
Field::TIMESTAMP_UN_FIELD :
|
||||
(new_field->flags & NOT_NULL_FLAG ?
|
||||
Field::TIMESTAMP_OLD_FIELD:
|
||||
Field::NONE);
|
||||
}
|
||||
break;
|
||||
case FIELD_TYPE_DATE: // Old date type
|
||||
|
Reference in New Issue
Block a user