From: Date: February 27 2009 11:42am Subject: bzr commit into mysql-5.1-bugteam branch (Sergey.Glukhov:2828) Bug#33717 List-Archive: http://lists.mysql.com/commits/67828 X-Bug: 33717 Message-Id: <0KFQ00CQB0FU2IE0@fe-emea-10.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_KzkslREOFo1WujLZ96Nq9g)" --Boundary_(ID_KzkslREOFo1WujLZ96Nq9g) 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:kgeorge@stripped 2828 Sergey Glukhov 2009-02-27 Bug#33717 INSERT...(default) fails for enum. Crashes CSV tables, loads spaces for MyISAM 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. @ mysql-test/r/csv.result test result @ mysql-test/r/default.result result fix @ mysql-test/r/type_ranges.result result fix @ mysql-test/t/csv.test result fix @ sql/item.cc set default value @ sql/sql_insert.cc removed check for ENUM field. The reason is that ENUM field behavoir should be the same as other fileds have. @ 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/r/type_ranges.result mysql-test/t/csv.test sql/item.cc sql/sql_insert.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-02-27 10:42:53 +0000 @@ -5394,17 +5394,28 @@ 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(); 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 1364 Field 'e' doesn't have a default value +INSERT INTO t1 VALUES(default); +Warnings: +Warning 1364 Field 'e' doesn't have a default value +INSERT INTO t1 VALUES(0); +Warnings: +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-02-27 10:42:53 +0000 @@ -169,6 +169,7 @@ insert into bug20691 values (2, 3, 5, '0 insert into bug20691 (x) values (2); 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 +194,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/r/type_ranges.result' --- a/mysql-test/r/type_ranges.result 2007-11-13 13:24:48 +0000 +++ b/mysql-test/r/type_ranges.result 2009-02-27 10:42:53 +0000 @@ -125,6 +125,8 @@ Warning 1264 Out of range value for colu Warning 1264 Out of range value for column 'umedium' at row 1 Warning 1265 Data truncated for column 'options' at row 1 insert into t1 (tiny) values (1); +Warnings: +Warning 1364 Field 'options' doesn't have a default value select auto,string,tiny,short,medium,long_int,longlong,real_float,real_double,utiny,ushort,umedium,ulong,ulonglong,mod(floor(time_stamp/1000000),1000000)-mod(curdate(),1000000),date_field,time_field,date_time,blob_col,tinyblob_col,mediumblob_col,longblob_col from t1; auto string tiny short medium long_int longlong real_float real_double utiny ushort umedium ulong ulonglong mod(floor(time_stamp/1000000),1000000)-mod(curdate(),1000000) date_field time_field date_time blob_col tinyblob_col mediumblob_col longblob_col 10 1 1 1 1 1 1 1.0 1.0000 1 00001 1 1 1 0 0000-00-00 00:00:00 0000-00-00 00:00:00 1 1 1 1 === 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-02-27 10:42:53 +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-02-20 09:50:50 +0000 +++ b/sql/item.cc 2009-02-27 10:42:53 +0000 @@ -6214,6 +6214,7 @@ void Item_default_value::print(String *s int Item_default_value::save_in_field(Field *field_arg, bool no_conversions) { + int err= 0; if (!arg) { if (field_arg->flags & NO_DEFAULT_VALUE_FLAG) @@ -6243,10 +6244,10 @@ int Item_default_value::save_in_field(Fi ER(ER_NO_DEFAULT_FOR_FIELD), field_arg->field_name); } - return 1; + err= 1; } field_arg->set_default(); - return 0; + return err; } return Item_field::save_in_field(field_arg, no_conversions); } === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2009-02-19 21:09:35 +0000 +++ b/sql/sql_insert.cc 2009-02-27 10:42:53 +0000 @@ -1602,8 +1602,7 @@ int check_that_all_fields_are_given_valu for (Field **field=entry->field ; *field ; field++) { if (!bitmap_is_set(write_set, (*field)->field_index) && - ((*field)->flags & NO_DEFAULT_VALUE_FLAG) && - ((*field)->real_type() != MYSQL_TYPE_ENUM)) + ((*field)->flags & NO_DEFAULT_VALUE_FLAG)) { bool view= FALSE; if (table_list) === modified file 'storage/csv/ha_tina.cc' --- a/storage/csv/ha_tina.cc 2008-12-29 12:50:51 +0000 +++ b/storage/csv/ha_tina.cc 2009-02-27 10:42:53 +0000 @@ -679,9 +679,13 @@ 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); 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_KzkslREOFo1WujLZ96Nq9g) MIME-version: 1.0 Content-type: text/bzr-bundle; name="bzr/sergey.glukhov@stripped"; charset=us-ascii 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: e465b56937bcb66e1bff45c5f2e4af31664b6036 # timestamp: 2009-02-27 14:43:08 +0400 # base_revision_id: kgeorge@stripped # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWXLcSYcABwV/gFUwAQB59/// /+//oL////pgDcu+nYk+6rD0ANOtGkuR2to0oVUACpVSujewBkk00U9T0Ieiep4KPU9R5QMj1PSA GgNAAAASimUMk9PTSBGhoDRo0AaGTQMhoDQGjTQ5hNGRoaGQwjQyGmjQAYjJkAwgGAYSENTQSfpP U1PUGQ0Bp6gADQGgAAAEUkAhoaaJgIMVPRtJiYhTyhpkNHqNAANBJICABDFNMKYaCammo09JgmgA ek9EaaHpLpY6AFOIU7sZLUhkAcESDximXoTtKcXScaSK3KWNlSKGWPFsYTFTzMdV70fQgysqsIal VaKNAUGKyRtQnWrU9cuObJ+bxByLMmn1XHHmJGEZEVY0EECMmsTCv/Gu98apPyoxlJ0YSrjGbjJ/ DkCUkHtb8t/w5pl98q1/U9YDmk3kopBJJIhIpFIVAuiz6kl/svbw5U7wsVNHBOj20aKElipZIrbT GkrppVdzlZAtQdjKREUgeRjEZyGenZ357oyxohwT4R+zXhKCJ2BwWLGUOwV5iO4Jt7lY5vQater8 SJ/o7GKA3EyIxPynErPWT3MKKtcflMuTxw/xKSsKAdFiftNJ0lFX1FBZJMwX1s5J5QrLCCXrYeoE pkiRoe8QxiYH4FYS68FC8aBaIfFQYOPW1FytCxNtvA7W/HJA9cArIwD+Uu2+0TBagubXzruJfBKs 2mlYAIwwCqFLZmfUNIPBuoIRyG3g1J9bqPcejj/JQMJ6Yiqz1lPun8D2HanqsY9/38j07p8J+cHu hDAY6iwkfaQOYpgyZB5ZJC6HnznLLZcnoq0nJp8hLxDZ25J2lo2TOoPO1kTMYwkwbjUsGwbq0jaG kV3QB2wMJ5+1stw4GWWU3z8EQmBClQx9NW2TDARKRJOoDPPRKev8EoYssqXAmlLc58qKxvBMeNnB Ag6pbwQlIs8XiCohBuFodIzPVMDlPMki2GCvqNRXYMLDkJHBkqeFboCguKCyMxERBcPgYxTRGTh8 JTlEgzzE9Q5xSpxHoNCI56BO92VRCYrD2jwoAfFFmyJiYGBUYB6pH/iwQeLfGuNzkgydtecBk6Dx GG8l0x99QqkwqhA402O3cFtaWhDM2DeUoFcBlsYjoOgro5JZKElKGtK8cgPc9XAwgYoVpRkQDZaU hCZDjJUp87Saq6yKc+Y2RBV7X4boiq53RvqzJmgp2q6WltJqUsbQMiksJlS+KVIwkTTfrKqGwm6e EaU0sASL9rGDG/OuAzaaNIxLiJLOSEQCbJmgU4FTUFRcOqTUXk4qV4gtJPZVsOQixk/c0JIITGeI mbFYYm03F5lvPitFQvJTKdp9K216Or7zYILqMkG96TzYNtIujUVetRzG/gYYp+CquVyrZBbIWrSO tO6/AwfSMsSugr22WnHpM3ECR1FJAgeKtLziOPzedy0PDNc91qsDZ0aTbmkNmzt+2Mg4bTMggaYH aIPOspzLjjOikQMgePuNevQoMSXVObx2QnA4yKy0eto+goHEvqN7dHEOAF1JtJm825jUTtBke4p1 Mm1jg+x5uN2aJZNhBrxWzUyksaNe/set5FcB8SwZDhBon+sYLEDzriUUrgTNXrqKZvx77X4isLTk UQOs4qRtLUnDik7FCK81v6jlqaGu9Vq/Oi4iUtkzJHg3NEO/cOsIC4TzGgmOBqDykbctImRDsmb6 S0MGtJoKdi6iRQXmi2kOsQr8tbxd7lOl8HTn1SlGbXoZ75xnGChoIEIRDc4jFtTsJSP05zeUFBeq y8pcxRNLPvh53Y1YUILiwMTsLjQ3mRuWqvXG98/BVmfLbXo2LSdLYoBSQTnDCHDpd8B/MmYlDzuI z6VZnbZK4zLzQ1pJBjQJi3WJBDTtSyF3YXJxEIMGYKOWQBM4m9LkRiTLiUyIFhF8zJ49KI6BaUEy oNhMgXBAo6+7t6fKJjCoV7dReYPUGMUtTJ+eGRMmlADFwEQJk0ASsZAnNSpCVNJIuFsjRdHsp8Ig EPdHUOrIwDxI8OuoxF1uxANVCDmgykgjjziUQHE+37gPTi+LntNn84jTjxivMmW+jxB84fXqkfYZ L581oxURURVX3Br9BSAaQBAKZWW4y4mS+PGgwm4xhj/CiRk1Y2CJ/CHosjUmDgnEshPmdf6VCLxK REmYF2EjEnafQDF6uSPiw4+A1SzwJl0E8BMPWgiIZBQfnm7AsvNCoBWGwqEqqA6fe4tEWDBeFpQI z3fNYpPSIkmWIQETJIWX+K7vyIvxUy6+89jJe59qyA/BIEkwk0/1nXrgTvUnUQYl6FC6XRkQAxMA KdpbNSvKOH38BeGkhdcv3n3n47DQGcqbes2PzMBcH3EH6akIU3YHYfUzaLH/t4H7EFZNBlZzZGi1 5GYg3Hz/YhfaqcioyprxkilhJyRojkpglZJYhM5S5DiaWBkhhl7jSIzvNEs2WBiVDHgXmd5eMMaS KykedOQtdP+fd5rKxf35hM8khQXenoHIGQaBmcDxNyjvO0YNDM2nTQmtTiUnNdElUfdkqys8its7 e/aeTUSf73Y71QrwSZFL8N2J+spMjXabXHtcohYd3uC+CtM5AYJjesQdZUc48SZE8R5l5e03hvGL 0DTKQuYLEEdpWWkigQRORcWHqLqiZ4qs0PpoKDYWrE4I+CN3XglkxPueYGcQpMXe632vQ4w5O2s3 zlT2vAQgeXcFhoZjJdxeTHj11T2EcvkQ/cQKGk27/EEuwcinRhx2qwwWhys8a6KqBk5SPNeZ2GHz B4DFvQ2MjBBWjYRbyZD8EkwjNGugehYbSJGJnUstSBSdxEizNZcPjkUKhj5BgXnYuKvN4g7Bap0h GRMGe8khewp38QiCLGlt3MZNmGl+hcCYHygci4TFJmalqMTAd4BxQSLkJzRSCkeOXgws6tSJtaLJ QeApyOsnDqNp7Sc6XidOtoDaenpvLAXeeBcUDDjoXCLTICRRxKvxG/BK75Er1nAlIkP47HS2MHLm VnuK0eeCRxb+yte+AjaG+Wd0AbODIhhTvpaxnRL3zUKMR/y2y1sHL83/PFyHoNzaZubtH2kRLmAd Vz67CiCqBwFUCH0Zy6naxNSepU4Hm0FG9EyvsaHW8+AJWUxZgbYbTr8iN3d6oPadX7g4hBaf42Gc CqBDzalXQX1lrWyXSJSaNFK4C4kOVLPl4Vzeu20hGDHrofYf9/9NQLtoeOZ438tA43cwuX5v52d0 sq2jc83t46ShzPwML6YXkIdtNTmKW3RadCJ1CdrzcTxfjqt7u14SltRytIOxonSjdsDLAfCCZ9TI sEAeMAEj5V5LHSza87c0TnI9axwlAL6Q3BPUhsP4nioanscHHLoZEMNPJ142LJMKMGpOl9WjBRv8 nV8W8pYQvXu8r9hHq+zoL8jcflnttAuKOTwtZPKkLA9ga3qd1bhyhoF4Cf7FDR4GLBNJtqCl3sSL CF5Sc5UD9ghSSRmGByeLYjqYcOridZwYmAxZWJ4JmBHypy9FClu9zjZNalNhqM40G4A9eCt2V9oA PVLCT+er7wfbYl9FaiIeYgGCmb7Q3UOnHZpz5IRMdqb/o3ivB6RCnNOWgcuXEAqmByAmbDIWRzW1 RCPYX0lxdcmILexZgvsZOUM7dU35eLmanobxTqfc7Og7Hrvb8wktW6CY4fKtVM6LUHSBaSR/Y15K JxPJqR5P1XJQGQnLwBph/vI7PjJboZsrhYFMOcmd5LELsfeTFGw7K5DcYmY7nEFRWSJELgZSCxKz Czu+g2kGMGORymxGMRSTPKk8T6hlBO6ePYgxMl4q06Lr1PRCFllSwljgDSBlsMWUW5oX25kOD/XC HUV0E6FmTTbbbbbbbYygZjhvjpkCYpBskBUI0TwDWTKHiAzdAOVxeLe5805Z0bXwDVQzAShKIZMD q6UkXzhcAeM/W9mbXPiKMa2MFwsp3AErnDRQz1tCbtG0NQUBLALLe2LM9mg95LQQM0uRc3oSzQ2I BtVKg76CpOIMgpsTwgV+rIx1xCMrNMZhFCEI+FBU5hN8unnFFiF0QlCCIpTdsZJDCQhBAa0KGQDO ZGoQmpZjc15jrajM1Zzk+jox4ItBpZTAm1CWa5wDipmd1JT5tXyigXCyube9wjFz54c7hym50s7e 735cHO72TfS5Wds+DuanAzPN0q53M2M1e8xkwJNZM9jQfUovdOFzNbkcjYBmpR0tTjYnja7a9rgA xeRX73GFIhh09LU/cf/F3JFOFCQctxJhwA== --Boundary_(ID_KzkslREOFo1WujLZ96Nq9g)--