diff -Narup ./001_mariadb-10.0.15-partition_cond_push/sql/ha_partition.cc ./002_mariadb-10.0.15-spider/sql/ha_partition.cc
--- ./001_mariadb-10.0.15-partition_cond_push/sql/ha_partition.cc	2014-11-29 17:00:34.063713748 +0900
+++ ./002_mariadb-10.0.15-spider/sql/ha_partition.cc	2014-11-29 17:01:07.231796206 +0900
@@ -327,7 +327,9 @@ void ha_partition::init_handler_variable
   m_file_buffer= NULL;
   m_name_buffer_ptr= NULL;
   m_engine_array= NULL;
+/*
   m_connect_string= NULL;
+*/
   m_file= NULL;
   m_file_tot_parts= 0;
   m_reorged_file= NULL;
@@ -1516,7 +1518,9 @@ int ha_partition::prepare_new_partition(
   if ((error= set_up_table_before_create(tbl, part_name, create_info, p_elem)))
     goto error_create;
 
+/*
   tbl->s->connect_string = p_elem->connect_string;
+*/
   if ((error= file->ha_create(part_name, tbl, create_info)))
   {
     /*
@@ -2082,9 +2086,9 @@ void ha_partition::update_create_info(HA
   */
   my_bool from_alter = (create_info->data_file_name == (const char*) -1);
   create_info->data_file_name= create_info->index_file_name = NULL;
-
+/*
   create_info->connect_string= null_lex_str;
-
+*/
   /*
     We do not need to update the individual partition DATA DIRECTORY settings
     since they can be changed by ALTER TABLE ... REORGANIZE PARTITIONS.
@@ -2554,10 +2558,12 @@ int ha_partition::set_up_table_before_cr
   }
   info->index_file_name= part_elem->index_file_name;
   info->data_file_name= part_elem->data_file_name;
+/*
   info->connect_string= part_elem->connect_string;
   if (info->connect_string.length)
     info->used_fields|= HA_CREATE_USED_CONNECTION;
   tbl->s->connect_string= part_elem->connect_string;
+*/
   DBUG_RETURN(0);
 }
 
@@ -2735,6 +2741,7 @@ bool ha_partition::create_handler_file(c
                              MYF(MY_WME | MY_NABP)) != 0;
 
     /* Write connection information (for federatedx engine) */
+/*
     part_it.rewind();
     for (i= 0; i < num_parts && !result; i++)
     {
@@ -2750,6 +2757,7 @@ bool ha_partition::create_handler_file(c
         break;
       }
     }
+*/
     (void) mysql_file_close(file, MYF(0));
   }
   else
@@ -2770,7 +2778,9 @@ void ha_partition::clear_handler_file()
   free_root(&m_mem_root, MYF(MY_KEEP_PREALLOC));
   m_file_buffer= NULL;
   m_engine_array= NULL;
+/*
   m_connect_string= NULL;
+*/
 }
 
 
@@ -2954,19 +2964,23 @@ bool ha_partition::read_par_file(const c
   m_file_buffer= file_buffer;          // Will be freed in clear_handler_file()
   m_name_buffer_ptr= (char*) (tot_name_len_offset + PAR_WORD_SIZE);
 
+/*
   if (!(m_connect_string= (LEX_STRING*)
         alloc_root(&m_mem_root, m_tot_parts * sizeof(LEX_STRING))))
     goto err2;
   bzero(m_connect_string, m_tot_parts * sizeof(LEX_STRING));
-
+*/
   /* Read connection arguments (for federated X engine) */
+/*
   for (i= 0; i < m_tot_parts; i++)
   {
     LEX_STRING connect_string;
     uchar buffer[4];
     if (my_read(file, buffer, 4, MYF(MY_NABP)))
     {
+*/
       /* No extra options; Probably not a federatedx engine */
+/*
       break;
     }
     connect_string.length= uint4korr(buffer);
@@ -2977,6 +2991,7 @@ bool ha_partition::read_par_file(const c
     connect_string.str[connect_string.length]= 0;
     m_connect_string[i]= connect_string;
   }
+*/
 
   (void) mysql_file_close(file, MYF(0));
   DBUG_RETURN(false);
@@ -3488,11 +3503,15 @@ int ha_partition::open(const char *name,
    {
       create_partition_name(name_buff, name, name_buffer_ptr, NORMAL_PART_NAME,
                             FALSE);
+/*
       table->s->connect_string = m_connect_string[(uint)(file-m_file)];
+*/
       if ((error= (*file)->ha_open(table, name_buff, mode,
                                    test_if_locked | HA_OPEN_NO_PSI_CALL)))
         goto err_handler;
+/*
       bzero(&table->s->connect_string, sizeof(LEX_STRING));
+*/
       if (m_file == file)
         m_num_locks= (*file)->lock_count();
       DBUG_ASSERT(m_num_locks == (*file)->lock_count());
@@ -7205,7 +7224,8 @@ int ha_partition::extra(enum ha_extra_fu
       only KEY partitioning and won't use this optimization for tables
       which have additional unique constraints).
     */
-    break;
+    /* At this time, this is safe by limitation of ha_partition */
+    DBUG_RETURN(loop_extra(operation));
   }
     /* Category 7), used by federated handlers */
   case HA_EXTRA_INSERT_WITH_UPDATE:
diff -Narup ./001_mariadb-10.0.15-partition_cond_push/sql/ha_partition.h ./002_mariadb-10.0.15-spider/sql/ha_partition.h
--- ./001_mariadb-10.0.15-partition_cond_push/sql/ha_partition.h	2014-11-29 17:00:34.065713289 +0900
+++ ./002_mariadb-10.0.15-spider/sql/ha_partition.h	2014-11-29 17:01:07.232796383 +0900
@@ -144,7 +144,9 @@ private:
   handler **m_new_file;                 // Array of references to new handlers
   handler **m_reorged_file;             // Reorganised partitions
   handler **m_added_file;               // Added parts kept for errors
+/*
   LEX_STRING *m_connect_string;
+*/
   partition_info *m_part_info;          // local reference to partition
   Field **m_part_field_array;           // Part field array locally to save acc
   uchar *m_ordered_rec_buffer;          // Row and key buffer for ord. idx scan
diff -Narup ./001_mariadb-10.0.15-partition_cond_push/sql/sql_plugin.cc ./002_mariadb-10.0.15-spider/sql/sql_plugin.cc
--- ./001_mariadb-10.0.15-partition_cond_push/sql/sql_plugin.cc	2014-11-22 06:02:56.000000000 +0900
+++ ./002_mariadb-10.0.15-spider/sql/sql_plugin.cc	2014-11-29 17:01:07.966420674 +0900
@@ -2740,7 +2740,8 @@ static void update_func_str(THD *thd, st
       *(char**) tgt= my_strdup(value, MYF(0));
     else
       *(char**) tgt= 0;
-    my_free(old);
+    if (old)
+      my_free(old);
   }
   else
     *(char**) tgt= value;
diff -Narup ./001_mariadb-10.0.15-partition_cond_push/sql/sql_priv.h ./002_mariadb-10.0.15-spider/sql/sql_priv.h
--- ./001_mariadb-10.0.15-partition_cond_push/sql/sql_priv.h	2014-11-22 06:02:53.000000000 +0900
+++ ./002_mariadb-10.0.15-spider/sql/sql_priv.h	2014-11-29 17:01:08.704384098 +0900
@@ -27,6 +27,8 @@
 #ifndef SQL_PRIV_INCLUDED
 #define SQL_PRIV_INCLUDED
 
+#define PLUGIN_VAR_CAN_MEMALLOC
+
 #ifndef MYSQL_CLIENT
 
 /*
diff -Narup ./001_mariadb-10.0.15-partition_cond_push/sql/sql_table.cc ./002_mariadb-10.0.15-spider/sql/sql_table.cc
--- ./001_mariadb-10.0.15-partition_cond_push/sql/sql_table.cc	2014-11-22 06:02:57.000000000 +0900
+++ ./002_mariadb-10.0.15-spider/sql/sql_table.cc	2014-11-29 17:01:09.536797192 +0900
@@ -7697,6 +7697,11 @@ mysql_prepare_alter_table(THD *thd, TABL
     create_info->comment.str= table->s->comment.str;
     create_info->comment.length= table->s->comment.length;
   }
+  if (!create_info->connect_string.str)
+  {
+    create_info->connect_string.str= table->s->connect_string.str;
+    create_info->connect_string.length= table->s->connect_string.length;
+  }
 
   table->file->update_create_info(create_info);
   if ((create_info->table_options &
diff -Narup ./001_mariadb-10.0.15-partition_cond_push/sql/table.cc ./002_mariadb-10.0.15-spider/sql/table.cc
--- ./001_mariadb-10.0.15-partition_cond_push/sql/table.cc	2014-11-22 06:02:57.000000000 +0900
+++ ./002_mariadb-10.0.15-spider/sql/table.cc	2014-11-29 17:01:10.335795997 +0900
@@ -3345,6 +3345,7 @@ void update_create_info_from_table(HA_CR
   create_info->default_table_charset= share->table_charset;
   create_info->table_charset= 0;
   create_info->comment= share->comment;
+  create_info->connect_string= share->connect_string;
   create_info->transactional= share->transactional;
   create_info->page_checksum= share->page_checksum;
   create_info->option_list= share->option_list;
