打开表时load table中的btr_pcur_open_on_user_rec_func调用

480阅读 0评论2013-03-20 gladness
分类:Mysql/postgreSQL



本例是正在打开seelock/see表,seelock是database名,see是表名。

/**************************************************************//**

If mode is PAGE_CUR_G or PAGE_CUR_GE, opens a persistent cursor on the first

user record satisfying the search condition, in the case PAGE_CUR_L or

PAGE_CUR_LE, on the last user record. If no such user record exists, then

in the first case sets the cursor after last in tree, and in the latter case

before first in tree. The latching mode must be BTR_SEARCH_LEAF or

BTR_MODIFY_LEAF. */

UNIV_INTERN

void

btr_pcur_open_on_user_rec_func(

/*===========================*/

     dict_index_t* index,        /*!< in: index */

     const dtuple_t*    tuple,        /*!< in: tuple on which search done */

     ulint         mode,         /*!< in: PAGE_CUR_L, ... */

     ulint         latch_mode,   /*!< in: BTR_SEARCH_LEAF or

                       BTR_MODIFY_LEAF */

     btr_pcur_t*   cursor,       /*!< in: memory buffer for persistent

                       cursor */

     const char*   file,         /*!< in: file name */

     ulint         line,         /*!< in: line where called */

     mtr_t*        mtr)     /*!< in: mtr */

{

     btr_pcur_open_func(index, tuple, mode, latch_mode, cursor,

                 file, line, mtr);

 

     if ((mode == PAGE_CUR_GE) || (mode == PAGE_CUR_G)) {

 

         if (btr_pcur_is_after_last_on_page(cursor)) {

 

              btr_pcur_move_to_next_user_rec(cursor, mtr);

         }

     } else {

         ut_ad((mode == PAGE_CUR_LE) || (mode == PAGE_CUR_L));

 

         /* Not implemented yet */

 

         ut_error;

     }

}

> mysqld.exe!btr_pcur_open_on_user_rec_func(dict_index_struct * index=0x1eec1548, const dtuple_struct * tuple=0x1efe9a30, unsigned long mode=2, unsigned long latch_mode=1, btr_pcur_struct * cursor=0x21b2cb3c, const char * file=0x019738f0, unsigned long line=1781, mtr_struct * mtr=0x21b2c690)  行586 C
  mysqld.exe!dict_load_table(const char * name=0x21b2cee4, unsigned long cached=1, dict_err_ignore ignore_err=DICT_ERR_IGNORE_NONE)  行1781 + 0x2f 字节 C
  mysqld.exe!dict_table_get_low(const char * table_name=0x21b2cee4)  行876 + 0xd 字节 C
  mysqld.exe!dict_table_get(const char * table_name=0x21b2cee4, unsigned long inc_mysql_count=1)  行744 + 0x9 字节 C
  mysqld.exe!ha_innobase::open(const char * name=0x1efd9b70, int mode=2, unsigned int test_if_locked=2)  行3868 + 0xe 字节 C++
  mysqld.exe!handler::ha_open(TABLE * table_arg=0x1efe70f0, const char * name=0x1efd9b70, int mode=2, int test_if_locked=2)  行2238 + 0x1e 字节 C++
  mysqld.exe!open_table_from_share(THD * thd=0x1ef5fff0, TABLE_SHARE * share=0x1efd9948, const char * alias=0x1efe23d0, unsigned int db_stat=39, unsigned int prgflag=44, unsigned int ha_open_flags=0, TABLE * outparam=0x1efe70f0, bool is_create_table=false)  行2073 + 0x8f 字节 C++
  mysqld.exe!open_table(THD * thd=0x1ef5fff0, TABLE_LIST * table_list=0x1efe23d8, st_mem_root * mem_root=0x21b2db50, Open_table_context * ot_ctx=0x21b2db7c)  行3098 + 0x2b 字节 C++
  mysqld.exe!open_and_process_table(THD * thd=0x1ef5fff0, LEX * lex=0x1ef60f90, TABLE_LIST * tables=0x1efe23d8, unsigned int * counter=0x21b2dbf8, unsigned int flags=0, Prelocking_strategy * prelocking_strategy=0x21b2dc24, bool has_prelocking_list=false, Open_table_context * ot_ctx=0x21b2db7c, st_mem_root * new_frm_mem=0x21b2db50)  行4460 + 0x15 字节 C++
  mysqld.exe!open_tables(THD * thd=0x1ef5fff0, TABLE_LIST * * start=0x21b2dc0c, unsigned int * counter=0x21b2dbf8, unsigned int flags=0, Prelocking_strategy * prelocking_strategy=0x21b2dc24)  行4908 + 0x2d 字节 C++
  mysqld.exe!open_and_lock_tables(THD * thd=0x1ef5fff0, TABLE_LIST * tables=0x1efe23d8, bool derived=true, unsigned int flags=0, Prelocking_strategy * prelocking_strategy=0x21b2dc24)  行5512 + 0x19 字节 C++
  mysqld.exe!open_and_lock_tables(THD * thd=0x1ef5fff0, TABLE_LIST * tables=0x1efe23d8, bool derived=true, unsigned int flags=0)  行475 + 0x1a 字节 C++
  mysqld.exe!execute_sqlcom_select(THD * thd=0x1ef5fff0, TABLE_LIST * all_tables=0x1efe23d8)  行4547 + 0x11 字节 C++
  mysqld.exe!mysql_execute_command(THD * thd=0x1ef5fff0)  行2151 + 0xd 字节 C++
  mysqld.exe!mysql_parse(THD * thd=0x1ef5fff0, char * rawbuf=0x1efe2288, unsigned int length=17, Parser_state * parser_state=0x21b2fb70)  行5627 + 0x9 字节 C++
  mysqld.exe!dispatch_command(enum_server_command command=COM_QUERY, THD * thd=0x1ef5fff0, char * packet=0x1efd9f99, unsigned int packet_length=17)  行1037 + 0x22 字节 C++
  mysqld.exe!do_command(THD * thd=0x1ef5fff0)  行773 + 0x1b 字节 C++
  mysqld.exe!do_handle_one_connection(THD * thd_arg=0x1ef5fff0)  行840 + 0x9 字节 C++
  mysqld.exe!handle_one_connection(void * arg=0x1ef5fff0)  行759 + 0x9 字节 C++
  mysqld.exe!pfs_spawn_thread(void * arg=0x1efcc988)  行1015 + 0x9 字节 C++
  mysqld.exe!pthread_start(void * p=0x1efd0158)  行61 + 0x9 字节 C
  mysqld.exe!_callthreadstartex()  行348 + 0xf 字节 C
  mysqld.exe!_threadstartex(void * ptd=0x1efddfe0)  行331 C
  kernel32.dll!76daed6c()
  [下面的框架可能不正确和/或缺失,没有为 kernel32.dll 加载符号]
  ntdll.dll!7723377b()
  ntdll.dll!7723374e() 

上一篇:从innodb buffer pool的freelist中获得空块buf_LRU_get_free_only
下一篇:mysql open table需要访问字典表,获取该表的space和page位置