mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Bug#30081: "ON UPDATE CURRENT_TIMESTAMP" wasn't shown by the SHOW FIELDS
command and reported to a client. The fact that a timestamp field will be set to NO on UPDATE wasn't shown by the SHOW COMMAND and reported to a client through connectors. This led to problems in the ODBC connector and might lead to a user confusion. A new filed flag called ON_UPDATE_NOW_FLAG is added. Constructors of the Field_timestamp set it when a field should be set to NOW on UPDATE. The get_schema_column_record function now reports whether a timestamp field will be set to NOW on UPDATE. mysql-test/t/information_schema.test: A test case adjusted after fixing the bug#30081. mysql-test/r/type_timestamp.result: Adjusted a test case after fixing bug#30081. mysql-test/r/type_ranges.result: Adjusted a test case after fixing bug#30081. mysql-test/r/show_check.result: Adjusted a test case after fixing bug#30081. mysql-test/r/ps_5merge.result: Adjusted a test case after fixing bug#30081. mysql-test/r/ps_4heap.result: Adjusted a test case after fixing bug#30081. mysql-test/r/ps_3innodb.result: Adjusted a test case after fixing bug#30081. mysql-test/r/ps_2myisam.result: Adjusted a test case after fixing bug#30081. mysql-test/r/metadata.result: Adjusted a test case after fixing bug#30081. mysql-test/r/log_tables.result: Adjusted a test case after fixing bug#30081. mysql-test/r/information_schema.result: A test case adjusted after fixing the bug#30081. mysql-test/r/grant.result: Adjusted a test case after fixing bug#30081. tests/mysql_client_test.c: A test case adjusted after fixing the bug#30081. sql/sql_show.cc: Bug#30081: "ON UPDATE CURRENT_TIMESTAMP" wasn't shown by the SHOW FIELDS command and reported to a client. The get_schema_column_record function now reports whether a timestamp field will be set to NOW on UPDATE. sql/field.cc: Bug#30081: "ON UPDATE CURRENT_TIMESTAMP" wasn't shown by the SHOW FIELDS command and reported to a client. Constructors of the Field_timestamp set the ON_UPDATE_NOW_FLAG on a field when it should be set to NOW on UPDATE. include/mysql_com.h: Bug#30081: "ON UPDATE CURRENT_TIMESTAMP" wasn't shown by the SHOW FIELDS command and reported to a client. A new filed flag called ON_UPDATE_NOW_FLAG is added. client/mysql.cc: Bug#30081: "ON UPDATE CURRENT_TIMESTAMP" wasn't shown by the SHOW FIELDS command and reported to a client. The fieldflag2str function is adjusted to print the ON_UPDATE_NOW_FLAG.
This commit is contained in:
parent
aaa1c321b2
commit
b1b1d62776
17 changed files with 36 additions and 24 deletions
|
@ -2366,6 +2366,7 @@ static char *fieldflags2str(uint f) {
|
|||
ff2s_check_flag(GROUP);
|
||||
ff2s_check_flag(UNIQUE);
|
||||
ff2s_check_flag(BINCMP);
|
||||
ff2s_check_flag(ON_UPDATE_NOW);
|
||||
#undef ff2s_check_flag
|
||||
if (f)
|
||||
sprintf(s, " unknows=0x%04x", f);
|
||||
|
|
|
@ -94,6 +94,7 @@ enum enum_server_command
|
|||
#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */
|
||||
#define SET_FLAG 2048 /* field is a set */
|
||||
#define NO_DEFAULT_VALUE_FLAG 4096 /* Field doesn't have default value */
|
||||
#define ON_UPDATE_NOW_FLAG 8192 /* Field is set to NOW on UPDATE */
|
||||
#define NUM_FLAG 32768 /* Field is num (for clients) */
|
||||
#define PART_KEY_FLAG 16384 /* Intern; Part of some key */
|
||||
#define GROUP_FLAG 32768 /* Intern: Group field */
|
||||
|
|
|
@ -529,7 +529,7 @@ Db char(64) NO PRI
|
|||
User char(16) NO PRI
|
||||
Table_name char(64) NO PRI
|
||||
Grantor char(77) NO MUL
|
||||
Timestamp timestamp NO CURRENT_TIMESTAMP
|
||||
Timestamp timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
|
||||
Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') NO
|
||||
Column_priv set('Select','Insert','Update','References') NO
|
||||
use test;
|
||||
|
|
|
@ -1141,11 +1141,13 @@ DROP FUNCTION func2;
|
|||
select column_type, group_concat(table_schema, '.', table_name), count(*) as num
|
||||
from information_schema.columns where
|
||||
table_schema='information_schema' and
|
||||
(column_type = 'varchar(7)' or column_type = 'varchar(20)')
|
||||
(column_type = 'varchar(7)' or column_type = 'varchar(20)'
|
||||
or column_type = 'varchar(27)')
|
||||
group by column_type order by num;
|
||||
column_type group_concat(table_schema, '.', table_name) num
|
||||
varchar(27) information_schema.COLUMNS 1
|
||||
varchar(7) information_schema.ROUTINES,information_schema.VIEWS 2
|
||||
varchar(20) information_schema.COLUMNS,information_schema.FILES,information_schema.FILES,information_schema.PLUGINS,information_schema.PLUGINS,information_schema.PLUGINS 6
|
||||
varchar(20) information_schema.FILES,information_schema.FILES,information_schema.PLUGINS,information_schema.PLUGINS,information_schema.PLUGINS 5
|
||||
create table t1(f1 char(1) not null, f2 char(9) not null)
|
||||
default character set utf8;
|
||||
select CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH from
|
||||
|
|
|
@ -50,7 +50,7 @@ general_log CREATE TABLE `general_log` (
|
|||
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
|
||||
show fields from mysql.general_log;
|
||||
Field Type Null Key Default Extra
|
||||
event_time timestamp NO CURRENT_TIMESTAMP
|
||||
event_time timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
|
||||
user_host mediumtext NO NULL
|
||||
thread_id int(11) NO NULL
|
||||
server_id int(11) NO NULL
|
||||
|
@ -73,7 +73,7 @@ slow_log CREATE TABLE `slow_log` (
|
|||
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
|
||||
show fields from mysql.slow_log;
|
||||
Field Type Null Key Default Extra
|
||||
start_time timestamp NO CURRENT_TIMESTAMP
|
||||
start_time timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
|
||||
user_host mediumtext NO NULL
|
||||
query_time time NO NULL
|
||||
lock_time time NO NULL
|
||||
|
|
|
@ -21,7 +21,7 @@ def test t1 t1 g g 5 4 0 Y 32768 3 63
|
|||
def test t1 t1 h h 246 7 0 Y 0 4 63
|
||||
def test t1 t1 i i 13 4 0 Y 32864 0 63
|
||||
def test t1 t1 j j 10 10 0 Y 128 0 63
|
||||
def test t1 t1 k k 7 19 0 N 1249 0 63
|
||||
def test t1 t1 k k 7 19 0 N 9441 0 63
|
||||
def test t1 t1 l l 12 19 0 Y 128 0 63
|
||||
def test t1 t1 m m 254 1 0 Y 256 0 8
|
||||
def test t1 t1 n n 254 3 0 Y 2048 0 8
|
||||
|
|
|
@ -63,7 +63,7 @@ def test t9 t9 c11 c11 246 9 6 Y 0 4 63
|
|||
def test t9 t9 c12 c12 246 10 6 Y 0 4 63
|
||||
def test t9 t9 c13 c13 10 10 10 Y 128 0 63
|
||||
def test t9 t9 c14 c14 12 19 19 Y 128 0 63
|
||||
def test t9 t9 c15 c15 7 19 19 N 1249 0 63
|
||||
def test t9 t9 c15 c15 7 19 19 N 9441 0 63
|
||||
def test t9 t9 c16 c16 11 8 8 Y 128 0 63
|
||||
def test t9 t9 c17 c17 13 4 4 Y 32864 0 63
|
||||
def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
|
||||
|
|
|
@ -63,7 +63,7 @@ def test t9 t9 c11 c11 246 9 6 Y 0 4 63
|
|||
def test t9 t9 c12 c12 246 10 6 Y 0 4 63
|
||||
def test t9 t9 c13 c13 10 10 10 Y 128 0 63
|
||||
def test t9 t9 c14 c14 12 19 19 Y 128 0 63
|
||||
def test t9 t9 c15 c15 7 19 19 N 1249 0 63
|
||||
def test t9 t9 c15 c15 7 19 19 N 9441 0 63
|
||||
def test t9 t9 c16 c16 11 8 8 Y 128 0 63
|
||||
def test t9 t9 c17 c17 13 4 4 Y 32864 0 63
|
||||
def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
|
||||
|
|
|
@ -64,7 +64,7 @@ def test t9 t9 c11 c11 246 9 6 Y 0 4 63
|
|||
def test t9 t9 c12 c12 246 10 6 Y 0 4 63
|
||||
def test t9 t9 c13 c13 10 10 10 Y 128 0 63
|
||||
def test t9 t9 c14 c14 12 19 19 Y 128 0 63
|
||||
def test t9 t9 c15 c15 7 19 19 N 1249 0 63
|
||||
def test t9 t9 c15 c15 7 19 19 N 9441 0 63
|
||||
def test t9 t9 c16 c16 11 8 8 Y 128 0 63
|
||||
def test t9 t9 c17 c17 13 4 4 Y 32864 0 63
|
||||
def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
|
||||
|
|
|
@ -106,7 +106,7 @@ def test t9 t9 c11 c11 246 9 6 Y 0 4 63
|
|||
def test t9 t9 c12 c12 246 10 6 Y 0 4 63
|
||||
def test t9 t9 c13 c13 10 10 10 Y 128 0 63
|
||||
def test t9 t9 c14 c14 12 19 19 Y 128 0 63
|
||||
def test t9 t9 c15 c15 7 19 19 N 1249 0 63
|
||||
def test t9 t9 c15 c15 7 19 19 N 9441 0 63
|
||||
def test t9 t9 c16 c16 11 8 8 Y 128 0 63
|
||||
def test t9 t9 c17 c17 13 4 4 Y 32864 0 63
|
||||
def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
|
||||
|
@ -3128,7 +3128,7 @@ def test t9 t9 c11 c11 246 9 6 Y 0 4 63
|
|||
def test t9 t9 c12 c12 246 10 6 Y 0 4 63
|
||||
def test t9 t9 c13 c13 10 10 10 Y 128 0 63
|
||||
def test t9 t9 c14 c14 12 19 19 Y 128 0 63
|
||||
def test t9 t9 c15 c15 7 19 19 N 1249 0 63
|
||||
def test t9 t9 c15 c15 7 19 19 N 9441 0 63
|
||||
def test t9 t9 c16 c16 11 8 8 Y 128 0 63
|
||||
def test t9 t9 c17 c17 13 4 4 Y 32864 0 63
|
||||
def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
|
||||
|
|
|
@ -979,7 +979,7 @@ def COLUMNS CHARACTER_SET_NAME CHARACTER_SET_NAME 253 192 0 Y 0 0 33
|
|||
def COLUMNS COLLATION_NAME COLLATION_NAME 253 192 0 Y 0 0 33
|
||||
def COLUMNS COLUMN_TYPE COLUMN_TYPE 252 589815 7 N 17 0 33
|
||||
def COLUMNS COLUMN_KEY COLUMN_KEY 253 9 3 N 1 0 33
|
||||
def COLUMNS EXTRA EXTRA 253 60 0 N 1 0 33
|
||||
def COLUMNS EXTRA EXTRA 253 81 0 N 1 0 33
|
||||
def COLUMNS PRIVILEGES PRIVILEGES 253 240 31 N 1 0 33
|
||||
def COLUMNS COLUMN_COMMENT COLUMN_COMMENT 253 765 0 N 1 0 33
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
|
||||
|
@ -998,7 +998,7 @@ def COLUMNS COLUMN_TYPE Type 252 589815 7 N 17 0 33
|
|||
def COLUMNS IS_NULLABLE Null 253 9 2 N 1 0 33
|
||||
def COLUMNS COLUMN_KEY Key 253 9 3 N 1 0 33
|
||||
def COLUMNS COLUMN_DEFAULT Default 252 589815 0 Y 16 0 33
|
||||
def COLUMNS EXTRA Extra 253 60 0 N 1 0 33
|
||||
def COLUMNS EXTRA Extra 253 81 0 N 1 0 33
|
||||
Field Type Null Key Default Extra
|
||||
c int(11) NO PRI NULL
|
||||
----------------------------------------------------------------
|
||||
|
|
|
@ -57,7 +57,7 @@ ushort smallint(5) unsigned zerofill NULL NO MUL 00000 #
|
|||
umedium mediumint(8) unsigned NULL NO MUL 0 #
|
||||
ulong int(11) unsigned NULL NO MUL 0 #
|
||||
ulonglong bigint(13) unsigned NULL NO MUL 0 #
|
||||
time_stamp timestamp NULL NO CURRENT_TIMESTAMP #
|
||||
time_stamp timestamp NULL NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP #
|
||||
date_field date NULL YES NULL #
|
||||
time_field time NULL YES NULL #
|
||||
date_time datetime NULL YES NULL #
|
||||
|
@ -225,7 +225,7 @@ ushort smallint(5) unsigned zerofill NULL NO 00000 #
|
|||
umedium mediumint(8) unsigned NULL NO MUL 0 #
|
||||
ulong int(11) unsigned NULL NO MUL 0 #
|
||||
ulonglong bigint(13) unsigned NULL NO MUL 0 #
|
||||
time_stamp timestamp NULL NO CURRENT_TIMESTAMP #
|
||||
time_stamp timestamp NULL NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP #
|
||||
date_field char(10) latin1_swedish_ci YES NULL #
|
||||
time_field time NULL YES NULL #
|
||||
date_time datetime NULL YES NULL #
|
||||
|
|
|
@ -251,7 +251,7 @@ t1 CREATE TABLE `t1` (
|
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
show columns from t1;
|
||||
Field Type Null Key Default Extra
|
||||
t1 timestamp NO 2003-01-01 00:00:00
|
||||
t1 timestamp NO 2003-01-01 00:00:00 on update CURRENT_TIMESTAMP
|
||||
t2 datetime YES NULL
|
||||
drop table t1;
|
||||
create table t1 (t1 timestamp default now() on update now(), t2 datetime);
|
||||
|
@ -276,7 +276,7 @@ t1 CREATE TABLE `t1` (
|
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
show columns from t1;
|
||||
Field Type Null Key Default Extra
|
||||
t1 timestamp NO CURRENT_TIMESTAMP
|
||||
t1 timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
|
||||
t2 datetime YES NULL
|
||||
drop table t1;
|
||||
create table t1 (t1 timestamp, t2 datetime, t3 timestamp);
|
||||
|
@ -302,7 +302,7 @@ t1 CREATE TABLE `t1` (
|
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
show columns from t1;
|
||||
Field Type Null Key Default Extra
|
||||
t1 timestamp NO CURRENT_TIMESTAMP
|
||||
t1 timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
|
||||
t2 datetime YES NULL
|
||||
t3 timestamp NO 0000-00-00 00:00:00
|
||||
drop table t1;
|
||||
|
@ -328,7 +328,7 @@ t1 CREATE TABLE `t1` (
|
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
show columns from t1;
|
||||
Field Type Null Key Default Extra
|
||||
t1 timestamp NO CURRENT_TIMESTAMP
|
||||
t1 timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
|
||||
t2 datetime YES NULL
|
||||
truncate table t1;
|
||||
insert into t1 values ('2004-04-01 00:00:00', '2004-04-01 00:00:00');
|
||||
|
|
|
@ -807,7 +807,8 @@ DROP FUNCTION func2;
|
|||
select column_type, group_concat(table_schema, '.', table_name), count(*) as num
|
||||
from information_schema.columns where
|
||||
table_schema='information_schema' and
|
||||
(column_type = 'varchar(7)' or column_type = 'varchar(20)')
|
||||
(column_type = 'varchar(7)' or column_type = 'varchar(20)'
|
||||
or column_type = 'varchar(27)')
|
||||
group by column_type order by num;
|
||||
|
||||
#
|
||||
|
|
|
@ -4616,6 +4616,8 @@ Field_timestamp::Field_timestamp(uchar *ptr_arg, uint32 len_arg,
|
|||
/* This timestamp has auto-update */
|
||||
share->timestamp_field= this;
|
||||
flags|= TIMESTAMP_FLAG;
|
||||
if (unireg_check != TIMESTAMP_DN_FIELD)
|
||||
flags|= ON_UPDATE_NOW_FLAG;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4629,6 +4631,8 @@ Field_timestamp::Field_timestamp(bool maybe_null_arg,
|
|||
{
|
||||
/* For 4.0 MYD and 4.0 InnoDB compatibility */
|
||||
flags|= ZEROFILL_FLAG | UNSIGNED_FLAG;
|
||||
if (unireg_check != TIMESTAMP_DN_FIELD)
|
||||
flags|= ON_UPDATE_NOW_FLAG;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -3777,8 +3777,11 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
|
|||
|
||||
end= tmp;
|
||||
if (field->unireg_check == Field::NEXT_NUMBER)
|
||||
end=strmov(tmp,"auto_increment");
|
||||
table->field[16]->store(tmp, (uint) (end-tmp), cs);
|
||||
table->field[16]->store(STRING_WITH_LEN("auto_increment"), cs);
|
||||
if (show_table->timestamp_field == field &&
|
||||
field->unireg_check != Field::TIMESTAMP_DN_FIELD)
|
||||
table->field[16]->store(STRING_WITH_LEN("on update CURRENT_TIMESTAMP"),
|
||||
cs);
|
||||
|
||||
table->field[18]->store(field->comment.str, field->comment.length, cs);
|
||||
if (schema_table_store_record(thd, table))
|
||||
|
@ -5981,7 +5984,7 @@ ST_FIELD_INFO columns_fields_info[]=
|
|||
{"COLLATION_NAME", 64, MYSQL_TYPE_STRING, 0, 1, "Collation", OPEN_FRM_ONLY},
|
||||
{"COLUMN_TYPE", 65535, MYSQL_TYPE_STRING, 0, 0, "Type", OPEN_FRM_ONLY},
|
||||
{"COLUMN_KEY", 3, MYSQL_TYPE_STRING, 0, 0, "Key", OPEN_FRM_ONLY},
|
||||
{"EXTRA", 20, MYSQL_TYPE_STRING, 0, 0, "Extra", OPEN_FRM_ONLY},
|
||||
{"EXTRA", 27, MYSQL_TYPE_STRING, 0, 0, "Extra", OPEN_FRM_ONLY},
|
||||
{"PRIVILEGES", 80, MYSQL_TYPE_STRING, 0, 0, "Privileges", OPEN_FRM_ONLY},
|
||||
{"COLUMN_COMMENT", 255, MYSQL_TYPE_STRING, 0, 0, "Comment", OPEN_FRM_ONLY},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
|
||||
|
|
|
@ -7787,7 +7787,7 @@ static void test_explain_bug()
|
|||
verify_prepare_field(result, 5, "Extra", "EXTRA",
|
||||
mysql_get_server_version(mysql) <= 50000 ?
|
||||
MYSQL_TYPE_STRING : MYSQL_TYPE_VAR_STRING,
|
||||
0, 0, "", 20, 0);
|
||||
0, 0, "", 27, 0);
|
||||
|
||||
mysql_free_result(result);
|
||||
mysql_stmt_close(stmt);
|
||||
|
|
Loading…
Reference in a new issue