mirror of
https://github.com/MariaDB/server.git
synced 2025-08-05 13:16:09 +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;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
`a` timestamp NULL default NULL,
|
||||||
`b` timestamp NULL default NULL
|
`b` timestamp NULL default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
insert into t1 values (NULL, NULL);
|
insert into t1 values (NULL, NULL);
|
||||||
@@ -378,7 +378,22 @@ insert into t1 values ();
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
a b
|
a b
|
||||||
NULL NULL
|
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;
|
drop table t1;
|
||||||
create table t1 (a timestamp null default null, b timestamp null default '2003-01-01 00:00:00');
|
create table t1 (a timestamp null default null, b timestamp null default '2003-01-01 00:00:00');
|
||||||
show create table t1;
|
show create table t1;
|
||||||
|
@@ -236,9 +236,10 @@ drop table t1;
|
|||||||
|
|
||||||
#
|
#
|
||||||
# Test for TIMESTAMP columns which are able to store NULLs
|
# 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);
|
create table t1 (a timestamp null, b timestamp null);
|
||||||
show create table t1;
|
show create table t1;
|
||||||
insert into t1 values (NULL, NULL);
|
insert into t1 values (NULL, NULL);
|
||||||
@@ -247,6 +248,16 @@ insert into t1 values ();
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
drop table 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');
|
create table t1 (a timestamp null default null, b timestamp null default '2003-01-01 00:00:00');
|
||||||
show create table t1;
|
show create table t1;
|
||||||
insert into t1 values (NULL, NULL);
|
insert into t1 values (NULL, NULL);
|
||||||
|
@@ -4142,11 +4142,6 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
|||||||
}
|
}
|
||||||
else if (default_value->type() == Item::NULL_ITEM)
|
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)) ==
|
if ((type_modifier & (NOT_NULL_FLAG | AUTO_INCREMENT_FLAG)) ==
|
||||||
NOT_NULL_FLAG)
|
NOT_NULL_FLAG)
|
||||||
@@ -4357,19 +4352,27 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
|||||||
else
|
else
|
||||||
new_field->unireg_check= (on_update_value?Field::TIMESTAMP_UN_FIELD:
|
new_field->unireg_check= (on_update_value?Field::TIMESTAMP_UN_FIELD:
|
||||||
Field::NONE);
|
Field::NONE);
|
||||||
|
|
||||||
if (default_value->type() == Item::NULL_ITEM)
|
|
||||||
new_field->def= 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
We are setting TIMESTAMP_OLD_FIELD here only temporary, we will
|
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
|
replace this value by TIMESTAMP_DNUN_FIELD or NONE later when
|
||||||
information about all TIMESTAMP fields in table will be availiable.
|
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:
|
new_field->unireg_check= on_update_value ?
|
||||||
Field::TIMESTAMP_OLD_FIELD;
|
Field::TIMESTAMP_UN_FIELD :
|
||||||
|
(new_field->flags & NOT_NULL_FLAG ?
|
||||||
|
Field::TIMESTAMP_OLD_FIELD:
|
||||||
|
Field::NONE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FIELD_TYPE_DATE: // Old date type
|
case FIELD_TYPE_DATE: // Old date type
|
||||||
|
Reference in New Issue
Block a user