diff --git a/sql/sql_class.h b/sql/sql_class.h
index bcc00c19eb0adec00d09635ffb4ff6cd2ecf636b..cc1c5488ae5d67cac846a105e77259531e5aff06 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -1605,13 +1605,14 @@ public:
     lock(0)
     {}
   int prepare(List<Item> &list, SELECT_LEX_UNIT *u);
-  friend class select_create_prepare_hooks;
   
   void binlog_show_create_table(TABLE **tables, uint count);
   void store_values(List<Item> &values);
   void send_error(uint errcode,const char *err);
   bool send_eof();
   void abort();
+  // Needed for access from local class MY_HOOKS in prepare(), since thd is proteted.
+  THD *get_thd(void) { return thd; }
 };
 
 #include <myisam.h>
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 6e797f558d4f8a4953f61b2a1d8a14d922e8d3cf..261fe4ad8aba1aa46f369e53f79a83e794564e01 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -2498,28 +2498,25 @@ bool select_insert::send_eof()
   CREATE TABLE (SELECT) ...
 ***************************************************************************/
 
-/* HPUX compiler bug prevents this from being a local class, since then it
-   does not have access to protected member select_create::thd.
-*/
-class select_create_prepare_hooks : public TABLEOP_HOOKS {
-public:
-  select_create_prepare_hooks(select_create *x) : ptr(x) { }
-  virtual void do_prelock(TABLE **tables, uint count)
-  {
-    if (ptr->thd->current_stmt_binlog_row_based)
-      ptr->binlog_show_create_table(tables, count);
-  }
-
-private:
-  select_create *ptr;
-};
-
 int
 select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
 {
   DBUG_ENTER("select_create::prepare");
 
-  select_create_prepare_hooks hooks(this);
+  class MY_HOOKS : public TABLEOP_HOOKS {
+  public:
+    MY_HOOKS(select_create *x) : ptr(x) { }
+    virtual void do_prelock(TABLE **tables, uint count)
+    {
+      if (ptr->get_thd()->current_stmt_binlog_row_based)
+        ptr->binlog_show_create_table(tables, count);
+    }
+
+  private:
+    select_create *ptr;
+  };
+
+  MY_HOOKS hooks(this);
 
   unit= u;
   table= create_table_from_items(thd, create_info, create_table,