Bug #38272 | timestamps fields incorrectly defaulted on update accross partitions. | ||
---|---|---|---|
Submitted: | 21 Jul 2008 21:50 | Modified: | 15 Sep 2008 13:59 |
Reporter: | Dale Davenport | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Partitions | Severity: | S3 (Non-critical) |
Version: | 5.1.24, 5.1.26 | OS: | Any |
Assigned to: | Alexey Botchkov | CPU Architecture: | Any |
Tags: | InnoDB Partition Timestamp |
[21 Jul 2008 21:50]
Dale Davenport
[22 Jul 2008 6:46]
Valeriy Kravchuk
Thank you for a bug report. Verified just as described with 5.1.26-rc: C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot -P3310 test Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.26-rc-community MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> DROP TABLE IF EXISTS `ts_test`; Query OK, 0 rows affected, 1 warning (0.03 sec) mysql> mysql> CREATE TABLE `ts_test` ( -> `ID` bigint(20) NOT NULL AUTO_INCREMENT, -> `createdDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -> `number` int, -> PRIMARY KEY (`ID`, number) -> ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 -> PARTITION BY RANGE (number) ( -> PARTITION p0 VALUES LESS THAN (6), -> PARTITION p1 VALUES LESS THAN (11) -> ); Query OK, 0 rows affected (0.45 sec) mysql> INSERT INTO ts_test SET number=1; Query OK, 1 row affected (0.13 sec) mysql> SELECT * FROM ts_test; +----+---------------------+--------+ | ID | createdDate | number | +----+---------------------+--------+ | 27 | 2008-07-22 09:43:14 | 1 | +----+---------------------+--------+ 1 row in set (0.01 sec) mysql> SELECT SLEEP(5); +----------+ | SLEEP(5) | +----------+ | 0 | +----------+ 1 row in set (5.02 sec) mysql> UPDATE ts_test SET number=3; Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM ts_test; +----+---------------------+--------+ | ID | createdDate | number | +----+---------------------+--------+ | 27 | 2008-07-22 09:43:14 | 3 | +----+---------------------+--------+ 1 row in set (0.00 sec) mysql> SELECT SLEEP(5); +----------+ | SLEEP(5) | +----------+ | 0 | +----------+ 1 row in set (5.00 sec) mysql> mysql> UPDATE ts_test SET number=6; Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM ts_test; +----+---------------------+--------+ | ID | createdDate | number | +----+---------------------+--------+ | 27 | 2008-07-22 09:43:24 | 6 | +----+---------------------+--------+ 1 row in set (0.00 sec)
[27 Jul 2008 14:20]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/50573 2680 Alexey Botchkov 2008-07-27 Bug#38272 timestamps fields incorrectly defaulted on update accross partitions. It's not Innodb-specific bug. ha_partition::update_row() didn't set table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET when orig_timestamp_type == TIMESTAMP_AUTO_SET_ON_INSERT. So that a partition sets the timestamp field when a record is moved to a different partition. Fixed by doing '= TIMESTAMP_NO_AUTO_SET' unconditionally. Also ha_partition::write_row() is fixed in same way as now Field_timestamp::set() is called twice in SET_ON_INSERT case. per-file messages: mysql-test/r/partition.result Bug#38272 timestamps fields incorrectly defaulted on update accross partitions. test result mysql-test/t/partition.test Bug#38272 timestamps fields incorrectly defaulted on update accross partitions. test case sql/ha_partition.cc Bug#38272 timestamps fields incorrectly defaulted on update accross partitions. Do table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET unconditionally in ha_partition::update_row and ::write_row()
[15 Aug 2008 18:26]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/51764 2704 Chad MILLER 2008-08-15 Bug#38272: timestamps fields incorrectly defaulted on \ update accross partitions. It's not Innodb-specific bug. ha_partition::update_row() didn't set table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET when orig_timestamp_type == TIMESTAMP_AUTO_SET_ON_INSERT. So that a partition sets the timestamp field when a record is moved to a different partition. Fixed by doing '= TIMESTAMP_NO_AUTO_SET' unconditionally. Also ha_partition::write_row() is fixed in same way as now Field_timestamp::set() is called twice in SET_ON_INSERT case. (Chad queues this patch on demand by Trudy/Davi.)
[15 Aug 2008 18:39]
Chad MILLER
Queued to 5.1-bugteam and 6.0-bugteam.
[15 Aug 2008 18:40]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/51767 2704 Chad MILLER 2008-08-15 Bug#38272: timestamps fields incorrectly defaulted on \ update accross partitions. It's not Innodb-specific bug. ha_partition::update_row() didn't set table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET when orig_timestamp_type == TIMESTAMP_AUTO_SET_ON_INSERT. So that a partition sets the timestamp field when a record is moved to a different partition. Fixed by doing '= TIMESTAMP_NO_AUTO_SET' unconditionally. Also ha_partition::write_row() is fixed in same way as now Field_timestamp::set() is called twice in SET_ON_INSERT case. (Chad queues this patch on demand by Trudy/Davi.)
[21 Aug 2008 18:18]
Bugs System
Pushed into 5.1.28 (revid:chad@mysql.com-20080815182625-yfhxtes9hy8cxboq) (version source revid:sergefp@mysql.com-20080819132519-eimtstp3bx89ya9d) (pib:3)
[22 Aug 2008 8:17]
Jon Stephens
Documented in the 5.1.28 changelog as follows: When a partitioned table had a TIMESTAMP column defined with CURRENT_TIMESTAMP as the default but with no ON UPDATE clause, the column's value was incorrectly set to CURRENT_TIMESTAMP when updating across partitions. Set bug status back to Patch Queued pending merge to 6.0.
[14 Sep 2008 6:16]
Bugs System
Pushed into 6.0.7-alpha (revid:chad@mysql.com-20080815182625-yfhxtes9hy8cxboq) (version source revid:timothy.smith@sun.com-20080813081348-d1t79whh0xmepllq) (pib:3)
[15 Sep 2008 13:59]
Jon Stephens
Fix also documented in 6.0.7 changelog.