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,