List:Commits« Previous MessageNext Message »
From:Satya B Date:September 4 2009 6:51am
Subject:bzr commit into mysql-5.0-bugteam branch (satya.bn:2807) Bug#46384
View as plain text  
#At file:///home/satya/WORK/46384/mysql-5.0-bugteam-46384/ based on revid:satya.bn@stripped

 2807 Satya B	2009-09-04
      Fix for BUG#46384 - mysqld segfault when trying to create table with same 
                          name as existing view
      
      When trying to create a table with the same name as existing view with
      join, mysql server crashes.
      
      The problem is when create table is issued with the same name as view, while
      verifying with the existing tables, we assume that base table object is 
      created always.
      
      In this case, since it is a view over multiple tables, we don't have the 
      mysql derived table object.
      
      Fixed the logic which checks if there is an existing table to not to assume
      that table object is created when the base table is view over multiple 
      tables.
     @ mysql-test/r/create.result
        BUG#46384 - mysqld segfault when trying to create table with same 
                    name as existing view
        
        Testcase for the bug
     @ mysql-test/t/create.test
        BUG#46384 - mysqld segfault when trying to create table with same 
                    name as existing view
        
        Testcase for the bug
     @ sql/sql_insert.cc
        BUG#46384 - mysqld segfault when trying to create table with same 
                        name as existing view
            
        Fixed create_table_from_items() method to properly check, if the base table 
        is a view over multiple tables.

    modified:
      mysql-test/r/create.result
      mysql-test/t/create.test
      sql/sql_insert.cc
=== modified file 'mysql-test/r/create.result'
--- a/mysql-test/r/create.result	2008-10-02 11:57:52 +0000
+++ b/mysql-test/r/create.result	2009-09-04 06:51:54 +0000
@@ -1559,4 +1559,17 @@ CREATE TABLE IF NOT EXISTS t2 (a INTEGER
 SELECT a FROM t1;
 ERROR 23000: Duplicate entry '1' for key 1
 DROP TABLE t1, t2;
+#
+# BUG#46384 - mysqld segfault when trying to create table with same 
+#             name as existing view
+#
+CREATE TABLE t1 (a INT);
+CREATE TABLE t2 (a INT);
+INSERT INTO t1 VALUES (1),(2),(3);
+INSERT INTO t2 VALUES (1),(2),(3);
+CREATE VIEW v1 AS SELECT t1.a FROM t1, t2;
+CREATE TABLE v1 AS SELECT * FROM t1;
+ERROR 42S01: Table 'v1' already exists
+DROP VIEW v1;
+DROP TABLE t1,t2;
 End of 5.0 tests

=== modified file 'mysql-test/t/create.test'
--- a/mysql-test/t/create.test	2008-10-02 11:57:52 +0000
+++ b/mysql-test/t/create.test	2009-09-04 06:51:54 +0000
@@ -1194,5 +1194,22 @@ CREATE TABLE IF NOT EXISTS t2 (a INTEGER
 
 DROP TABLE t1, t2;
 
+--echo #
+--echo # BUG#46384 - mysqld segfault when trying to create table with same 
+--echo #             name as existing view
+--echo #
+
+CREATE TABLE t1 (a INT);
+CREATE TABLE t2 (a INT);
+
+INSERT INTO t1 VALUES (1),(2),(3);
+INSERT INTO t2 VALUES (1),(2),(3);
+
+CREATE VIEW v1 AS SELECT t1.a FROM t1, t2;
+--error ER_TABLE_EXISTS_ERROR
+CREATE TABLE v1 AS SELECT * FROM t1;
+
+DROP VIEW v1;
+DROP TABLE t1,t2;
 
 --echo End of 5.0 tests

=== modified file 'sql/sql_insert.cc'
--- a/sql/sql_insert.cc	2009-08-10 18:53:26 +0000
+++ b/sql/sql_insert.cc	2009-09-04 06:51:54 +0000
@@ -3217,7 +3217,7 @@ static TABLE *create_table_from_items(TH
   DBUG_EXECUTE_IF("sleep_create_select_before_check_if_exists", my_sleep(6000000););
 
   if (!(create_info->options & HA_LEX_CREATE_TMP_TABLE) &&
-      create_table->table->db_stat)
+      (create_table->table && create_table->table->db_stat))
   {
     /* Table already exists and was open at open_and_lock_tables() stage. */
     if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS)


Attachment: [text/bzr-bundle] bzr/satya.bn@sun.com-20090904065154-6adncuygkuragleb.bundle
Thread
bzr commit into mysql-5.0-bugteam branch (satya.bn:2807) Bug#46384Satya B4 Sep