List:Commits« Previous MessageNext Message »
From:Anurag Shekhar Date:February 24 2009 12:52pm
Subject:bzr commit into mysql-5.1-bugteam branch (anurag.shekhar:2810)
Bug#41305
View as plain text  
#At file:///home/anurag/mysqlsrc/mysql-5.1-41305/ based on revid:azundris@stripped

 2810 Anurag Shekhar	2009-02-24
      Bug#41305 server crashes when inserting duplicate row into a merge table
      
      This problem comes while inserting a duplicate row in merge table 
      without key but the child table has a primary key. 
      While forming the error message handler tries to locate the key field
      which is creating this problem but as there is no key on the merge 
      table there is a segmentation fault.
      
      An additional check to ensure that the key fields are present 
      fixes this problem.
modified:
  mysql-test/r/merge.result
  mysql-test/t/merge.test
  sql/handler.cc

per-file messages:
  mysql-test/r/merge.result
    Updated result file with additional test result.
  mysql-test/t/merge.test
    Added a test case to test the scenario described in bug#41305
  sql/handler.cc
    added an additional check to see if key_info of the table is not null. If it is an empty message is used.
=== modified file 'mysql-test/r/merge.result'
--- a/mysql-test/r/merge.result	2009-02-12 10:25:12 +0000
+++ b/mysql-test/r/merge.result	2009-02-24 12:52:11 +0000
@@ -2103,4 +2103,20 @@ a
 UNLOCK TABLES;
 # drop the created tables
 DROP TABLE t1, t2, t3;
+# insert duplicate value in child table while merge table doesn't have key
+create table t1 (
+col1 int(10),
+primary key (col1)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+create table t2 (
+col1 int(10),
+primary key (col1)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+CREATE TABLE m1 (
+col1 int(10) NOT NULL
+) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST UNION=(t1,t2);
+insert into m1 (col1) values (1);
+insert into m1 (col1) values (1);
+ERROR 23000: '''
+drop table m1, t1, t2;
 End of 5.1 tests

=== modified file 'mysql-test/t/merge.test'
--- a/mysql-test/t/merge.test	2009-02-12 10:25:12 +0000
+++ b/mysql-test/t/merge.test	2009-02-24 12:52:11 +0000
@@ -1496,4 +1496,27 @@ UNLOCK TABLES;
 --echo # drop the created tables
 DROP TABLE t1, t2, t3;
 
+#
+# Bug #41305 server crashes when inserting duplicate row into a merge table
+#
+--echo # insert duplicate value in child table while merge table doesn't have key
+create table t1 (
+        col1 int(10),
+        primary key (col1)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+create table t2 (
+        col1 int(10),
+        primary key (col1)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+CREATE TABLE m1 (
+  col1 int(10) NOT NULL
+) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST UNION=(t1,t2);
+
+insert into m1 (col1) values (1);
+--error ER_DUP_ENTRY
+insert into m1 (col1) values (1);
+
+drop table m1, t1, t2;
 --echo End of 5.1 tests

=== modified file 'sql/handler.cc'
--- a/sql/handler.cc	2009-02-18 20:29:30 +0000
+++ b/sql/handler.cc	2009-02-24 12:52:11 +0000
@@ -2539,6 +2539,15 @@ void handler::print_keydup_error(uint ke
     str.copy("", 0, system_charset_info);
     my_printf_error(ER_DUP_ENTRY, msg, MYF(0), str.c_ptr(), "*UNKNOWN*");
   }
+  else if (!table->key_info)
+  {
+    /*
+     Table doesn't have key info.
+     eg: in caseof merge table key may exist only on
+     child table.
+    */
+    my_printf_error(ER_DUP_ENTRY, "'''", MYF(0));
+  }
   else
   {
     /* Table is opened and defined at this point */

Thread
bzr commit into mysql-5.1-bugteam branch (anurag.shekhar:2810)Bug#41305Anurag Shekhar24 Feb
  • Re: bzr commit into mysql-5.1-bugteam branch (anurag.shekhar:2810)Bug#41305Sergey Vojtovich25 Feb