1
0
mirror of https://github.com/MariaDB/server.git synced 2026-01-06 05:22:24 +03:00

Made TIMESTAMP NULL columns without explicit DEFAULT value to be always

treated as DEFAULT NULL columns (independently from their position in
table).

(still to be discussed with Monty, Brian, Trudy et al. before push)


mysql-test/r/type_timestamp.result:
  Update test after making TIMESTAMP NULL columns without explicit 
  DEFAULT value to be always treated as DEFAULT NULL columns 
  (independently from their position in table).
mysql-test/t/type_timestamp.test:
  Update test after making TIMESTAMP NULL columns without explicit 
  DEFAULT value to be always treated as DEFAULT NULL columns 
  (independently from their position in table).
sql/sql_parse.cc:
  add_field_to_list(): made TIMESTAMP NULL columns without explicit 
  DEFAULT value to be always treated as DEFAULT NULL columns (independently
  from their position in table). This also simplifies code a bit.
This commit is contained in:
unknown
2004-10-04 17:13:31 +04:00
parent 29a62c1129
commit 76c9e10ebd
3 changed files with 47 additions and 18 deletions

View File

@@ -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