diff -Narup ./021_mariadb-10.0.15-merge_table/sql/ha_partition.cc ./022_mariadb-10.0.15-auto_increment/sql/ha_partition.cc
--- ./021_mariadb-10.0.15-merge_table/sql/ha_partition.cc	2014-11-29 17:05:04.673795477 +0900
+++ ./022_mariadb-10.0.15-auto_increment/sql/ha_partition.cc	2014-11-29 17:05:30.813505210 +0900
@@ -4275,9 +4275,15 @@ int ha_partition::write_row(uchar * buf)
     if (!bulk_access_executing || !bulk_access_info_exec_tgt->called)
     {
 #endif
-    if (!part_share->auto_inc_initialized &&
-        !table_share->next_number_keypart)
-    {
+    if (
+      (
+#ifdef HANDLER_HAS_NEED_INFO_FOR_AUTO_INC
+        need_info_for_auto_inc() ||
+#endif
+        !part_share->auto_inc_initialized
+      ) &&
+      !table_share->next_number_keypart
+    ) {
       /*
         If auto_increment in table_share is not initialized, start by
         initializing it.
@@ -4371,9 +4377,15 @@ int ha_partition::pre_write_row(uchar * 
   */
   if (have_auto_increment)
   {
-    if (!part_share->auto_inc_initialized &&
-        !table_share->next_number_keypart)
-    {
+    if (
+      (
+#ifdef HANDLER_HAS_NEED_INFO_FOR_AUTO_INC
+        need_info_for_auto_inc() ||
+#endif
+        !part_share->auto_inc_initialized
+      ) &&
+      !table_share->next_number_keypart
+    ) {
       /*
         If auto_increment in table_share is not initialized, start by
         initializing it.
@@ -4582,7 +4594,12 @@ exit:
       bitmap_is_set(table->write_set,
                     table->found_next_number_field->field_index))
   {
-    if (!part_share->auto_inc_initialized)
+    if (
+#ifdef HANDLER_HAS_NEED_INFO_FOR_AUTO_INC
+      need_info_for_auto_inc() ||
+#endif
+      !part_share->auto_inc_initialized
+    )
       info(HA_STATUS_AUTO);
     set_auto_increment_if_higher(table->found_next_number_field);
   }
@@ -7875,8 +7892,12 @@ int ha_partition::info(uint flag)
     DBUG_PRINT("info", ("HA_STATUS_AUTO"));
     if (!table->found_next_number_field)
       stats.auto_increment_value= 0;
-    else if (part_share->auto_inc_initialized)
-    {
+    else if (
+#ifdef HANDLER_HAS_NEED_INFO_FOR_AUTO_INC
+      !m_need_info_for_auto_inc &&
+#endif
+      part_share->auto_inc_initialized
+    ) {
       lock_auto_increment();
       stats.auto_increment_value= part_share->next_auto_inc_val;
       unlock_auto_increment();
@@ -7885,7 +7906,12 @@ int ha_partition::info(uint flag)
     {
       lock_auto_increment();
       /* to avoid two concurrent initializations, check again when locked */
-      if (part_share->auto_inc_initialized)
+      if (
+#ifdef HANDLER_HAS_NEED_INFO_FOR_AUTO_INC
+        !m_need_info_for_auto_inc &&
+#endif
+        part_share->auto_inc_initialized
+      )
         stats.auto_increment_value= part_share->next_auto_inc_val;
       else
       {
@@ -7921,6 +7947,9 @@ int ha_partition::info(uint flag)
       }
       unlock_auto_increment();
     }
+#ifdef HANDLER_HAS_NEED_INFO_FOR_AUTO_INC
+    m_need_info_for_auto_inc= FALSE;
+#endif
   }
   if (flag & HA_STATUS_VARIABLE)
   {
@@ -9948,6 +9977,26 @@ int ha_partition::cmp_ref(const uchar *r
 ****************************************************************************/
 
 
+#ifdef HANDLER_HAS_NEED_INFO_FOR_AUTO_INC
+bool ha_partition::need_info_for_auto_inc()
+{
+  handler **file= m_file;
+  DBUG_ENTER("ha_partition::need_info_for_auto_inc");
+
+  do
+  {
+    if ((*file)->need_info_for_auto_inc())
+    {
+      m_need_info_for_auto_inc= TRUE;
+      DBUG_RETURN(TRUE);
+    }
+  } while (*(++file));
+  m_need_info_for_auto_inc= FALSE;
+  DBUG_RETURN(FALSE);
+}
+#endif
+
+
 int ha_partition::reset_auto_increment(ulonglong value)
 {
   handler **file= m_file;
diff -Narup ./021_mariadb-10.0.15-merge_table/sql/ha_partition.h ./022_mariadb-10.0.15-auto_increment/sql/ha_partition.h
--- ./021_mariadb-10.0.15-merge_table/sql/ha_partition.h	2014-11-29 17:05:04.673795477 +0900
+++ ./022_mariadb-10.0.15-auto_increment/sql/ha_partition.h	2014-11-29 17:05:30.814563902 +0900
@@ -1204,6 +1204,10 @@ public:
     auto_increment_column_changed
      -------------------------------------------------------------------------
   */
+#ifdef HANDLER_HAS_NEED_INFO_FOR_AUTO_INC
+  bool m_need_info_for_auto_inc;
+  virtual bool need_info_for_auto_inc();
+#endif
   virtual void get_auto_increment(ulonglong offset, ulonglong increment,
                                   ulonglong nb_desired_values,
                                   ulonglong *first_value,
diff -Narup ./021_mariadb-10.0.15-merge_table/sql/handler.h ./022_mariadb-10.0.15-auto_increment/sql/handler.h
--- ./021_mariadb-10.0.15-merge_table/sql/handler.h	2014-11-29 17:05:18.590797313 +0900
+++ ./022_mariadb-10.0.15-auto_increment/sql/handler.h	2014-11-29 17:05:31.714411758 +0900
@@ -41,6 +41,7 @@
 
 #define HANDLER_HAS_TOP_TABLE_FIELDS
 #define HANDLER_HAS_DIRECT_UPDATE_ROWS
+#define HANDLER_HAS_NEED_INFO_FOR_AUTO_INC
 #define INFO_KIND_UPDATE_FIELDS 101
 #define INFO_KIND_UPDATE_VALUES 102
 #define INFO_KIND_FORCE_LIMIT_BEGIN 103
@@ -3210,6 +3211,7 @@ public:
   virtual void try_semi_consistent_read(bool) {}
   virtual void unlock_row() {}
   virtual int start_stmt(THD *thd, thr_lock_type lock_type) {return 0;}
+  virtual bool need_info_for_auto_inc() { return 0; }
   virtual void get_auto_increment(ulonglong offset, ulonglong increment,
                                   ulonglong nb_desired_values,
                                   ulonglong *first_value,
