List:Commits« Previous MessageNext Message »
From:gluh Date:November 9 2007 6:09am
Subject:bk commit into 5.1 tree (gluh:1.2605) BUG#25629
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of gluh. When gluh does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-11-09 09:09:39+04:00, gluh@stripped +3 -0
  Bug#25629 CREATE TABLE LIKE does not work with INFORMATION_SCHEMA
  added new func mysql_create_like_schema_frm() which creates frm file based on I_S table

  mysql-test/r/create.result@stripped, 2007-11-09 09:09:37+04:00, gluh@stripped +38 -0
    test result

  mysql-test/t/create.test@stripped, 2007-11-09 09:09:37+04:00, gluh@stripped +13 -0
    test case

  sql/sql_table.cc@stripped, 2007-11-09 09:09:37+04:00, gluh@stripped +58 -1
    Bug#25629 CREATE TABLE LIKE does not work with INFORMATION_SCHEMA
    added new func mysql_create_like_schema_frm() which creates frm file based on I_S table

diff -Nrup a/mysql-test/r/create.result b/mysql-test/r/create.result
--- a/mysql-test/r/create.result	2007-10-23 19:02:23 +05:00
+++ b/mysql-test/r/create.result	2007-11-09 09:09:37 +04:00
@@ -1705,4 +1705,42 @@ create table t1 as select 1;
 create table t2 as select f1() from t1;
 drop table t1,t2;
 drop function f1;
+create table t1 like information_schema.processlist;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `ID` bigint(4) NOT NULL DEFAULT '0',
+  `USER` varchar(16) NOT NULL DEFAULT '',
+  `HOST` varchar(64) NOT NULL DEFAULT '',
+  `DB` varchar(64) DEFAULT NULL,
+  `COMMAND` varchar(16) NOT NULL DEFAULT '',
+  `TIME` bigint(7) NOT NULL DEFAULT '0',
+  `STATE` varchar(64) DEFAULT NULL,
+  `INFO` longtext
+) ENGINE=MyISAM DEFAULT CHARSET=utf8
+drop table t1;
+create temporary table t1 like information_schema.processlist;
+show create table t1;
+Table	Create Table
+t1	CREATE TEMPORARY TABLE `t1` (
+  `ID` bigint(4) NOT NULL DEFAULT '0',
+  `USER` varchar(16) NOT NULL DEFAULT '',
+  `HOST` varchar(64) NOT NULL DEFAULT '',
+  `DB` varchar(64) DEFAULT NULL,
+  `COMMAND` varchar(16) NOT NULL DEFAULT '',
+  `TIME` bigint(7) NOT NULL DEFAULT '0',
+  `STATE` varchar(64) DEFAULT NULL,
+  `INFO` longtext
+) ENGINE=MyISAM DEFAULT CHARSET=utf8
+drop table t1;
+create table t1 like information_schema.character_sets;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `CHARACTER_SET_NAME` varchar(64) NOT NULL DEFAULT '',
+  `DEFAULT_COLLATE_NAME` varchar(64) NOT NULL DEFAULT '',
+  `DESCRIPTION` varchar(60) NOT NULL DEFAULT '',
+  `MAXLEN` bigint(3) NOT NULL DEFAULT '0'
+) ENGINE=MEMORY DEFAULT CHARSET=utf8
+drop table t1;
 End of 5.1 tests
diff -Nrup a/mysql-test/t/create.test b/mysql-test/t/create.test
--- a/mysql-test/t/create.test	2007-09-29 02:25:42 +05:00
+++ b/mysql-test/t/create.test	2007-11-09 09:09:37 +04:00
@@ -1328,4 +1328,17 @@ create table t2 as select f1() from t1;
 drop table t1,t2;
 drop function f1;
 
+#
+# Bug#25629 CREATE TABLE LIKE does not work with INFORMATION_SCHEMA
+#
+create table t1 like information_schema.processlist;
+show create table t1;
+drop table t1;
+create temporary table t1 like information_schema.processlist;
+show create table t1;
+drop table t1;
+create table t1 like information_schema.character_sets;
+show create table t1;
+drop table t1;
+
 --echo End of 5.1 tests
diff -Nrup a/sql/sql_table.cc b/sql/sql_table.cc
--- a/sql/sql_table.cc	2007-10-23 13:33:18 +05:00
+++ b/sql/sql_table.cc	2007-11-09 09:09:37 +04:00
@@ -4517,6 +4517,55 @@ bool mysql_preload_keys(THD* thd, TABLE_
 }
 
 
+
+/**
+  @brief          Create frm file based on I_S table
+
+  @param[in]      thd                      thread handler
+  @param[in]      schema_table             I_S table           
+  @param[in]      dst_path                 path where frm should be created
+  @param[in]      create_info              Create info
+
+  @return         Operation status
+    @retval       0                        success
+    @retval       1                        error
+*/
+
+
+bool mysql_create_like_schema_frm(THD* thd, TABLE_LIST* schema_table,
+                                  char *dst_path, HA_CREATE_INFO *create_info)
+{
+  HA_CREATE_INFO local_create_info;
+  Alter_info alter_info;
+  bool tmp_table= (create_info->options & HA_LEX_CREATE_TMP_TABLE);
+  uint keys= schema_table->table->s->keys;
+  uint db_options= 0;
+  DBUG_ENTER("mysql_create_like_schema_frm");
+
+  bzero((char*) &local_create_info, sizeof(local_create_info));
+  local_create_info.db_type= schema_table->table->s->db_type();
+  local_create_info.row_type= schema_table->table->s->row_type;
+  local_create_info.default_table_charset=default_charset_info;
+  alter_info.flags= (ALTER_CHANGE_COLUMN | ALTER_RECREATE);
+  schema_table->table->use_all_columns();
+  if (mysql_prepare_alter_table(thd, schema_table->table,
+                                &local_create_info, &alter_info))
+    DBUG_RETURN(1);
+  if (mysql_prepare_create_table(thd, &local_create_info, &alter_info,
+                                 tmp_table, &db_options,
+                                 schema_table->table->file,
+                                 &schema_table->table->s->key_info, &keys, 0))
+    DBUG_RETURN(1);
+  local_create_info.max_rows= 0;
+  if (mysql_create_frm(thd, dst_path, NullS, NullS,
+                       &local_create_info, alter_info.create_list,
+                       keys, schema_table->table->s->key_info,
+                       schema_table->table->file))
+    DBUG_RETURN(1);
+  DBUG_RETURN(0);
+}
+
+
 /*
   Create a table identical to the specified table
 
@@ -4620,7 +4669,15 @@ bool mysql_create_like_table(THD* thd, T
     during the call to ha_create_table(). See bug #28614 for more info.
   */
   VOID(pthread_mutex_lock(&LOCK_open));
-  if (my_copy(src_path, dst_path, MYF(MY_DONT_OVERWRITE_FILE)))
+  if (src_table->schema_table)
+  {
+    if (mysql_create_like_schema_frm(thd, src_table, dst_path, create_info))
+    {
+      VOID(pthread_mutex_unlock(&LOCK_open));
+      goto err;
+    }
+  }
+  else if (my_copy(src_path, dst_path, MYF(MY_DONT_OVERWRITE_FILE)))
   {
     if (my_errno == ENOENT)
       my_error(ER_BAD_DB_ERROR,MYF(0),db);
Thread
bk commit into 5.1 tree (gluh:1.2605) BUG#25629gluh9 Nov
  • Re: bk commit into 5.1 tree (gluh:1.2605) BUG#25629Sergei Golubchik12 Nov
  • Re: bk commit into 5.1 tree (gluh:1.2605) BUG#25629Sergei Golubchik19 Nov