From: Date: May 19 2009 10:07am Subject: bzr commit into mysql-5.1-bugteam branch (Sergey.Glukhov:2840) Bug#33717 List-Archive: http://lists.mysql.com/commits/74467 X-Bug: 33717 Message-Id: <0KJV008K7VZIB5G0@fe-emea-10.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_8eZDb84qMsYPZZOFP6pDrg)" --Boundary_(ID_8eZDb84qMsYPZZOFP6pDrg) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///home/gluh/MySQL/mysql-5.1-bug-33717/ based on revid:matthias.leich@stripped 2840 Sergey Glukhov 2009-05-19 Bug#33717 INSERT...(default) fails for enum. Crashes CSV tables, loads spaces for MyISAM(for 5.0 & 5.1) Table corruption happens during table reading in ha_tina::find_current_row() func. Field::store() method returns error(true) if stored value is 0. The fix: added special case for enum type which correctly processes 0 value. Additional fix: INSERT...(default) and INSERT...() have the same behaviour now for enum type. @ mysql-test/r/csv.result test result @ mysql-test/r/default.result result fix @ mysql-test/t/csv.test test case @ sql/item.cc Changes: --do not print warning for 'enum' type if there is no default value --set default value @ storage/csv/ha_tina.cc Table corruption happens during table reading in ha_tina::find_current_row() func. Field::store() method returns error(true) if stored value is 0. The fix: added special case for enum type which correctly processes 0 value. modified: mysql-test/r/csv.result mysql-test/r/default.result mysql-test/t/csv.test sql/item.cc storage/csv/ha_tina.cc === modified file 'mysql-test/r/csv.result' --- a/mysql-test/r/csv.result 2009-01-23 12:22:05 +0000 +++ b/mysql-test/r/csv.result 2009-05-19 08:07:05 +0000 @@ -5394,17 +5394,24 @@ select * from t1; ERROR HY000: File 'MYSQLD_DATADIR/test/t1.CSV' not found (Errcode: 2) unlock tables; drop table t1; -create table t1(a enum ('a') not null) engine=csv; -insert into t1 values (2); +CREATE TABLE t1 (e enum('foo','bar') NOT NULL) ENGINE = CSV; +INSERT INTO t1 VALUES(); +INSERT INTO t1 VALUES(default); +INSERT INTO t1 VALUES(0); Warnings: -Warning 1265 Data truncated for column 'a' at row 1 -select * from t1 limit 1; -ERROR HY000: Table 't1' is marked as crashed and should be repaired -repair table t1; -Table Op Msg_type Msg_text -test.t1 repair Warning Data truncated for column 'a' at row 1 -test.t1 repair status OK -select * from t1 limit 1; -a -drop table t1; +Warning 1265 Data truncated for column 'e' at row 1 +INSERT INTO t1 VALUES(3); +Warnings: +Warning 1265 Data truncated for column 'e' at row 1 +INSERT INTO t1 VALUES(-1); +Warnings: +Warning 1265 Data truncated for column 'e' at row 1 +SELECT * FROM t1; +e +foo +foo + + + +DROP TABLE t1; End of 5.1 tests === modified file 'mysql-test/r/default.result' --- a/mysql-test/r/default.result 2008-09-03 08:06:03 +0000 +++ b/mysql-test/r/default.result 2009-05-19 08:07:05 +0000 @@ -180,7 +180,6 @@ insert into bug20691 values (2, 3, 5, '0 insert into bug20691 values (DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, 4); Warnings: Warning 1364 Field 'a' doesn't have a default value -Warning 1364 Field 'b' doesn't have a default value Warning 1364 Field 'c' doesn't have a default value Warning 1364 Field 'd' doesn't have a default value Warning 1364 Field 'e' doesn't have a default value @@ -193,7 +192,7 @@ a b c d e f g h i x two large 00:00:05 0007-01-01 11 13 17 0019-01-01 00:00:00 23 1 small 00:00:00 0000-00-00 0 0000-00-00 00:00:00 0 2 two large 00:00:05 0007-01-01 11 13 17 0019-01-01 00:00:00 23 3 - 00:00:00 0000-00-00 0 0000-00-00 00:00:00 0 4 + small 00:00:00 0000-00-00 0 0000-00-00 00:00:00 0 4 drop table bug20691; create table t1 (id int not null); insert into t1 values(default); === modified file 'mysql-test/t/csv.test' --- a/mysql-test/t/csv.test 2009-01-23 12:22:05 +0000 +++ b/mysql-test/t/csv.test 2009-05-19 08:07:05 +0000 @@ -1806,16 +1806,15 @@ drop table t1; --disconnect con1 # -# Bug#41441 repair csv table crashes debug server +# Bug#33717 INSERT...(default) fails for enum. Crashes CSV tables, loads spaces for MyISAM # -# Note: The test should be removed after Bug#33717 is fixed - -create table t1(a enum ('a') not null) engine=csv; -insert into t1 values (2); ---error ER_CRASHED_ON_USAGE -select * from t1 limit 1; -repair table t1; -select * from t1 limit 1; -drop table t1; +CREATE TABLE t1 (e enum('foo','bar') NOT NULL) ENGINE = CSV; +INSERT INTO t1 VALUES(); +INSERT INTO t1 VALUES(default); +INSERT INTO t1 VALUES(0); +INSERT INTO t1 VALUES(3); +INSERT INTO t1 VALUES(-1); +SELECT * FROM t1; +DROP TABLE t1; --echo End of 5.1 tests === modified file 'sql/item.cc' --- a/sql/item.cc 2009-03-27 13:00:20 +0000 +++ b/sql/item.cc 2009-05-19 08:07:05 +0000 @@ -6236,7 +6236,10 @@ int Item_default_value::save_in_field(Fi { if (!arg) { - if (field_arg->flags & NO_DEFAULT_VALUE_FLAG) + if (field_arg->flags & NO_DEFAULT_VALUE_FLAG +#if MYSQL_VERSION_ID < 0x60000 + && field_arg->real_type() != MYSQL_TYPE_ENUM) +#endif { if (field_arg->reset()) { === modified file 'storage/csv/ha_tina.cc' --- a/storage/csv/ha_tina.cc 2009-03-24 09:02:01 +0000 +++ b/storage/csv/ha_tina.cc 2009-05-19 08:07:05 +0000 @@ -679,9 +679,21 @@ int ha_tina::find_current_row(uchar *buf if (read_all || bitmap_is_set(table->read_set, (*field)->field_index)) { + bool is_enum= ((*field)->real_type() == MYSQL_TYPE_ENUM); + /* + Here CHECK_FIELD_WARN checks that all values in the csv file are valid + which is normally the case, if they were written by + INSERT -> ha_tina::write_row. '0' values on ENUM fields are considered + invalid by Field_enum::store() but it can store them on INSERT anyway. + Thus, for enums we silence the warning, as it doesn't really mean + an invalid value. + */ if ((*field)->store(buffer.ptr(), buffer.length(), buffer.charset(), - CHECK_FIELD_WARN)) - goto err; + is_enum ? CHECK_FIELD_IGNORE : CHECK_FIELD_WARN)) + { + if (!is_enum) + goto err; + } if ((*field)->flags & BLOB_FLAG) { Field_blob *blob= *(Field_blob**) field; --Boundary_(ID_8eZDb84qMsYPZZOFP6pDrg) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/sergey.glukhov@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/sergey.glukhov@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: sergey.glukhov@stripped # target_branch: file:///home/gluh/MySQL/mysql-5.1-bug-33717/ # testament_sha1: ab625516b83fa031f507994ecd227d8d1e65cee5 # timestamp: 2009-05-19 13:07:13 +0500 # base_revision_id: matthias.leich@stripped\ # o95fgp78cddr4900 # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWYih5JcABd9/gFUwAQB59/// /+//oL////pgDEcTvmt777d57mWyitDxra3zpx6dt6b2q3Xr2xhdN3XEJKIACnpNpMp+mU1PU/Ux NJpk2KaYTJphMj1NABoJJTIUfpoIYEpkGNR6jRkNNDQaBoA0ANAlFPUnoxU9QaA00ABo9RiGjIAA AAACRKaCaGhNJ6NJtT0yh6janqAeoNNDRoA0MmTICKhAINNDKYE0NAKaG01PUDTQAANAaaCSICAR oEYIBKfk0aU/VB6mnqMgA0aeo9QGlIPwpJsDEzw7U5hT5gYa8NldmLFkWncecGs7rfKXX3/rxoNq ebdnz5W15v6/J5ayGutvJwXSLzJ8TA22OU3Sx+OmzFejjGqlpsuuKpElJMuCK2ATWsRI3L0Ssuxg drLFilS86AVAB4trB0W8mGddGeq6Q/ktQvyitDTY2DY22WwtTa+UDZ6lLH0xcHiYxybZldL27WXH KVU7kLabH3k9C1NYpHIB2Pp6WFWfVzY7cBYbZCVZzON3chjEQ5LcJGcb5dPiVCMb71y7zcqa9NRD wjze7YV138DF6nyYckoqSsRKtzZmyFB9EhuvMBGKWMP5tF+VTaUkSdz7SydZrVfhOwxuGqmYiZ6n 7niisy4cxIo4sQUSpIxmcT+YhjaZn9i4RZfZcrSR9Fx0KWRkvcbJxellarOr1xY+HQ5xcWiO3Zub VxajSw8pp5GovtJnXdW+hNuejNFCXx6xjp9v2Psbcnt9hcS8Rg5HQ9BqrzPVz5lGEyKVEsLEpfLj Z7zyNQzmUVKBS1YfXcYriErScmCczq/apYqNogcpOalUyZBaJG6a46zeVjjLjVvAI5oC9uSZ1YRd j43trZMZmTj4EWiv34F5I44HEDyDQzumqjU003osaESAMq6+JqFEQNHozZBYaLkUV+dEo1FE6NKJ bA9TJuItpEPwkXKwmYFk81bpIRR7kYMvhFg0goUxoJ9FIUMIBAi6YiVIJMjE6chC0gMbwpcSkmRR BQRX432EFUSkqCXcc1YWl/eO6ShMSpJBEZxndIIoYICnMw2FZQQIHl7D/tCuPURYxEr1YEK890X8 q2LAwt7Jae17nExNkrrGbHB2zUsZkGNaeazGAnqlSEFRccUScaN1mdJzS7roCVkv8GxU0pnpnMgs FoNolIjEehEhgDeTPkJfIlu027jFsmg7RkZpANt2TJ0UjixEsN9soHI1E4ucmluKlrrad/DvEsSq xussJF9WauedBeOgBaWmBQOOgwVqmjASvyKpK9L0t4piloUsEJOsg2XES+eL9hltKCjBvKULCbE8 MVWGyLIA8ChYS4ECpmbTxUCZs0euGot79N+Q2GOeoZBjO4UoOoMovBBU3Gih1QNlQeSepU4EToZJ 45Obj7Z5h035y4jpCdnIFBlO3iwcTDK9bU4b32G4yx2gFDhjBcvKlJKQlIZFDSm8t45vQRKFAwNy oXcSw0mBoqWjKNDpMihMS6kai4qWKNTwXlsWfGmbGJWQ+eWQ+JxNRQbYWkztM3csXXUmMZLSG+GG NiTxKFsLjMUkCReNT6NJg8G6za+Srddq2UILYuHLWJUomnz/J1GRO0uqbMBnIfgUSW5Hf26NHDCZ KFJEMBK9ZLWoSY6dq3G2t1Uw7dkcMdUnSUE1hGUEEZNvGXG16FlkSY5PjmQ7CMa6yhZbcatkLxyN U5p0mgpa8HpaJkyygpJImkmKb6lCHZO8YouapC1x1gcMG1yNJkP+LuZMZYIuZYnPUPjZbMgjYYQ0 WkyaICo8WSiiTMyUYtB9SCqq2ZTM16I4iYRGfQbGlbV+BHG1xYqDkrqrarHM2XXANra7KGhVb3AL TkmpiZ06olE4ynJv0DPKmJcAevGkew6j4HNuXhoaG3yhKzdahSICDLBz/6fzWLkX95jOPBxN+045 4LQRUS1wB0COcbNKExQNovFc3F0rkq20+YmrEUjYKzOVLYLVi4AZfV9I/qb/4HcuRuMyhoioCExB U6BEyTGsIn3mlPoLysxKEhQNBAAooWyGr8SD0iIyKwpNgRgXXc2OiCRImyzCoioUFqP7q/M+9NZr vKM55ncx3BuEaV4EQJMibfmJb0JGkD5kLhqQw9Q6hdYwXYaBPDSVprfJzoOY6yQaSrkmA959L5cD sIiBUdZiMC7Rw2jAebohSYgqkVR4FMpu+5O9WZ5uEeQR2EvzfPv9SyjaGY0ZDjISxOycq+Ay9Kmu UQiQupmTTKn1MhxYEFpATcunDVr7yiwMqlLS0fPqUOQEBAU5qxU/fx2fnerCJZ0gqMowWU3AmL2Y 3x0exFIw1noWGCJr9Yi5P92BM8T2KTBnZ34CWRWfbD7obVVZJIYU03l03r7XdOWl6vme6N+TOGgY H9O1HGJ4FoxuKI3lqUyxiqUN5iSKCTERriBUuPl0u4KW89aYX1WZzE9rl6RoMfY9hxa3bbwaW6s2 Tlb2Lpyph2QgPsHQ5kaKk5Euzr6JEaD08VAgoFljxY+cEZjne3gZLpOotn6Gi596tGIOdvt5MF6U TukxqZOzJDAOutRPMRNZcTTKdYXjicePZs8ql45EHIcCtwbN7e53DoWm0ZvXcWrrYId3O8sCMCBC 9W+9auOH2y7JUPsNgBashOUN5MzOeszH8OpKhoBQ5wVZMQJVSSKa2AaMypthDDvAGAZnOZ2jHiJU 7V9R1+w8/W03lUFx5FSBITFTAyFwgvp53L6Ix96MkREwwfPevcXJvD0KnkVvYS2iXvvkbOl22AdR CHE362kJEEZyKBc+hXzbvZBxVYmJT865/OsewpTFvBWhgbwLFsLTgXa+0gZHC4dAwofqUHaQwfBU XkoHFAaC3mpLoXl2oVTPG5YgHV7xOJuHPwLQkGYvY/AYMZObPT9uOsHRRSaVEkiS+SEIMBwAkbt2 YXmocG89Nvwq+WOAyQ3KIeJ/76QiCYS5KFkuO6q6QnXpTEUch0J1X02NPb6x3i05yJNn+B5taB0g dT7p4VXvQ33d/S90paltaFwJqTXh5QSKdzWNDGgLycFAbvDFjMGwry60gzFAqySQeMDQzUIeB+p5 leR3vC28rkQixaOTHhBjXEICjDkOkMrg1VF3hWatMldKjVv4PG3NGatccCAq3v5BeZ5YPNS+3ven Frtc1rAgTEZ9VopP3hNySEoAhrSmdrK60mIebpEBlfrA+Ko6sDb1HPrUrxi+hwhmEhjfTKnsEsGz 7mT3lcFfnVheVl40HreVmLmUbySvdK0N9i1OiZGRnANEmkNkzNjq1Y8zRAWxpg3ImIWl0GmYuHn5 +UGykdo0lxcN25uZwn2m2vK5crAmOSBmehyhmdLdbJvMwmx9Lt1cVxyWCE2xOe01GZRc1nCYjX9R 4cFK5pu7rpO8awjEwmiIyRy8wKMMcfV0aWUJloIszNfUX4BwqB0L3VKnK1xWGCgvgsLypWBAYtTu EDcysL1JcJncMcNAOchqSHkeHdjEmrFQg6a8ZQT0dfOujSdbYHY79p3rBI1HHLIdg5qy/JcDraE7 MKXPbzF9F92OHERERERFsLFhv91E7VpJETMCiDAkD3ikr0dGtzvLI04Vx3bd/popZzZAlBKosR2Q MJNwBKx5sJWFiUkC0SMmoI+ea2dmpJJwNZvDcpJ7RD8lYiAFFmeuztJGwDiY+hPghswBatuCldRx kU4lZKBWqiMoTKobh05K9Q1WXg6yE4yrAtROcZmCEgu4sIxoYmNbIKScCQ8oTVOmHmKxrMjI7tOd W6xKzZpkYE0iAwzEEMXhJzZItJN4E+4HM6sjsFyLHM+e0ji0sg+HUyeibfcbDpk8mp0bHazsXqZl KncRos3EGWuCBNSLM8Gg/Mnr63U2tTlcrWNtAGjU1Nry0S94XPZiFp4CeqGVB7D/i7kinChIRFDy S4A= --Boundary_(ID_8eZDb84qMsYPZZOFP6pDrg)--