Commit cf7c0e43 authored by mskold@mysql.com's avatar mskold@mysql.com

Fix for bug#9435: TIMESTAMP columns don't update

parent 1b0370c6
...@@ -2,6 +2,9 @@ DROP TABLE IF EXISTS t1; ...@@ -2,6 +2,9 @@ DROP TABLE IF EXISTS t1;
CREATE TABLE t1 ( CREATE TABLE t1 (
auto int(5) unsigned NOT NULL auto_increment, auto int(5) unsigned NOT NULL auto_increment,
string char(10) default "hello", string char(10) default "hello",
vstring varchar(10) default "hello",
bin binary(7),
vbin varbinary(7),
tiny tinyint(4) DEFAULT '0' NOT NULL , tiny tinyint(4) DEFAULT '0' NOT NULL ,
short smallint(6) DEFAULT '1' NOT NULL , short smallint(6) DEFAULT '1' NOT NULL ,
medium mediumint(8) DEFAULT '0' NOT NULL, medium mediumint(8) DEFAULT '0' NOT NULL,
...@@ -14,12 +17,13 @@ ushort smallint(5) unsigned zerofill DEFAULT '00000' NOT NULL, ...@@ -14,12 +17,13 @@ ushort smallint(5) unsigned zerofill DEFAULT '00000' NOT NULL,
umedium mediumint(8) unsigned DEFAULT '0' NOT NULL, umedium mediumint(8) unsigned DEFAULT '0' NOT NULL,
ulong int(11) unsigned DEFAULT '0' NOT NULL, ulong int(11) unsigned DEFAULT '0' NOT NULL,
ulonglong bigint(13) unsigned DEFAULT '0' NOT NULL, ulonglong bigint(13) unsigned DEFAULT '0' NOT NULL,
time_stamp timestamp, options enum('one','two','tree') not null,
flags set('one','two','tree') not null,
date_field date, date_field date,
year_field year,
time_field time, time_field time,
date_time datetime, date_time datetime,
options enum('one','two','tree') not null, time_stamp timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
flags set('one','two','tree') not null,
PRIMARY KEY (auto), PRIMARY KEY (auto),
KEY (utiny), KEY (utiny),
KEY (tiny), KEY (tiny),
...@@ -33,4 +37,36 @@ KEY (ulong), ...@@ -33,4 +37,36 @@ KEY (ulong),
KEY (ulonglong,ulong), KEY (ulonglong,ulong),
KEY (options,flags) KEY (options,flags)
); );
set @now = now();
insert into t1
(string,vstring,bin,vbin,tiny,short,medium,long_int,longlong,
real_float,real_double, utiny, ushort, umedium,ulong,ulonglong,
options,flags,date_field,year_field,time_field,date_time)
values
("aaaa","aaaa",0xAAAA,0xAAAA,-1,-1,-1,-1,-1,1.1,1.1,1,1,1,1,1,
'one','one', '1901-01-01','1901','01:01:01','1901-01-01 01:01:01');
select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong,
real_float,real_double, utiny, ushort, umedium,ulong,ulonglong,
options,flags,date_field,year_field,time_field,date_time
from t1;
auto string vstring bin vbin tiny short medium long_int longlong real_float real_double utiny ushort umedium ulong ulonglong options flags date_field year_field time_field date_time
1 aaaa aaaa -1 -1 -1 -1 -1 1.1 1.1000 1 00001 1 1 1 one one 1901-01-01 1901 01:01:01 1901-01-01 01:01:01
select time_stamp>@now from t1;
time_stamp>@now
1
set @now = now();
update t1 set string="bbbb",vstring="bbbb",bin=0xBBBB,vbin=0xBBBB,
tiny=-2,short=-2,medium=-2,long_int=-2,longlong=-2,real_float=2.2,
real_double=2.2,utiny=2,ushort=2,umedium=2,ulong=2,ulonglong=2,
options='one',flags='one', date_field='1902-02-02',year_field='1902',
time_field='02:02:02',date_time='1902-02-02 02:02:02' where auto=1;
select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong,
real_float,real_double, utiny, ushort, umedium,ulong,ulonglong,
options,flags,date_field,year_field,time_field,date_time
from t1;
auto string vstring bin vbin tiny short medium long_int longlong real_float real_double utiny ushort umedium ulong ulonglong options flags date_field year_field time_field date_time
1 bbbb bbbb -2 -2 -2 -2 -2 2.2 2.2000 2 00002 2 2 2 one one 1902-02-02 1902 02:02:02 1902-02-02 02:02:02
select time_stamp>@now from t1;
time_stamp>@now
1
drop table t1; drop table t1;
...@@ -7,10 +7,12 @@ DROP TABLE IF EXISTS t1; ...@@ -7,10 +7,12 @@ DROP TABLE IF EXISTS t1;
# #
# Test creation of different column types in NDB # Test creation of different column types in NDB
# #
CREATE TABLE t1 ( CREATE TABLE t1 (
auto int(5) unsigned NOT NULL auto_increment, auto int(5) unsigned NOT NULL auto_increment,
string char(10) default "hello", string char(10) default "hello",
vstring varchar(10) default "hello",
bin binary(7),
vbin varbinary(7),
tiny tinyint(4) DEFAULT '0' NOT NULL , tiny tinyint(4) DEFAULT '0' NOT NULL ,
short smallint(6) DEFAULT '1' NOT NULL , short smallint(6) DEFAULT '1' NOT NULL ,
medium mediumint(8) DEFAULT '0' NOT NULL, medium mediumint(8) DEFAULT '0' NOT NULL,
...@@ -23,12 +25,13 @@ CREATE TABLE t1 ( ...@@ -23,12 +25,13 @@ CREATE TABLE t1 (
umedium mediumint(8) unsigned DEFAULT '0' NOT NULL, umedium mediumint(8) unsigned DEFAULT '0' NOT NULL,
ulong int(11) unsigned DEFAULT '0' NOT NULL, ulong int(11) unsigned DEFAULT '0' NOT NULL,
ulonglong bigint(13) unsigned DEFAULT '0' NOT NULL, ulonglong bigint(13) unsigned DEFAULT '0' NOT NULL,
time_stamp timestamp, options enum('one','two','tree') not null,
flags set('one','two','tree') not null,
date_field date, date_field date,
year_field year,
time_field time, time_field time,
date_time datetime, date_time datetime,
options enum('one','two','tree') not null, time_stamp timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
flags set('one','two','tree') not null,
PRIMARY KEY (auto), PRIMARY KEY (auto),
KEY (utiny), KEY (utiny),
KEY (tiny), KEY (tiny),
...@@ -43,5 +46,34 @@ CREATE TABLE t1 ( ...@@ -43,5 +46,34 @@ CREATE TABLE t1 (
KEY (options,flags) KEY (options,flags)
); );
set @now = now();
sleep 1;
insert into t1
(string,vstring,bin,vbin,tiny,short,medium,long_int,longlong,
real_float,real_double, utiny, ushort, umedium,ulong,ulonglong,
options,flags,date_field,year_field,time_field,date_time)
values
("aaaa","aaaa",0xAAAA,0xAAAA,-1,-1,-1,-1,-1,1.1,1.1,1,1,1,1,1,
'one','one', '1901-01-01','1901','01:01:01','1901-01-01 01:01:01');
select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong,
real_float,real_double, utiny, ushort, umedium,ulong,ulonglong,
options,flags,date_field,year_field,time_field,date_time
from t1;
select time_stamp>@now from t1;
set @now = now();
sleep 1;
update t1 set string="bbbb",vstring="bbbb",bin=0xBBBB,vbin=0xBBBB,
tiny=-2,short=-2,medium=-2,long_int=-2,longlong=-2,real_float=2.2,
real_double=2.2,utiny=2,ushort=2,umedium=2,ulong=2,ulonglong=2,
options='one',flags='one', date_field='1902-02-02',year_field='1902',
time_field='02:02:02',date_time='1902-02-02 02:02:02' where auto=1;
select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong,
real_float,real_double, utiny, ushort, umedium,ulong,ulonglong,
options,flags,date_field,year_field,time_field,date_time
from t1;
select time_stamp>@now from t1;
drop table t1; drop table t1;
...@@ -1953,7 +1953,11 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data) ...@@ -1953,7 +1953,11 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
statistic_increment(ha_update_count,&LOCK_status); statistic_increment(ha_update_count,&LOCK_status);
if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE) if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE)
{
table->timestamp_field->set_time(); table->timestamp_field->set_time();
// Set query_id so that field is really updated
table->timestamp_field->query_id= thd->query_id;
}
/* Check for update of primary key for special handling */ /* Check for update of primary key for special handling */
if ((table->primary_key != MAX_KEY) && if ((table->primary_key != MAX_KEY) &&
......
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