mysql源码包结构_MySQL源码分析以及目录结构 2

THD 线程描述符(sql/sql_class.h)

包含处理用户请求时需要的相关数据,每个连接会有一个线程来处理,在一些高层函数中,此数据结构常被当作第一个参数传递。

NET net; // 客户连接描述符

Protocol *protocol; // 当前的协议

Protocol_text protocol_text; // 普通协议

Protocol_binary protocol_binary; // 二进制协议

HASH user_vars; //用户变量的hash值

String packet; // 网络IO时所用的缓存

String convert_buffer; // 字符集转换所用的缓存

struct sockaddr_in remote; //客户端socket地址

THR_LOCK_INFO lock_info; // 当前线程的锁信息

THR_LOCK_OWNER main_lock_id; // 在旧版的查询中使用

THR_LOCK_OWNER *lock_id; //若非main_lock_id, 指向游标的lock_id

pthread_mutex_t LOCK_thd_data; //thd的mutex锁,保护THD数据(thd->query, thd->query_length)不会被其余线程访问到。

Statement_map stmt_map; //prepared statements和stored routines 会被重复利用

int insert(THD *thd, Statement *statement); // statement的hash容器

class Statement::

LEX_STRING name;

LEX *lex; //语法树描述符

bool set_db(const char *new_db, size_t new_db_len)

void set_query(char *query_arg, uint32 query_length_arg);

{

pthread_mutex_lock(&LOCK_thd_data);

set_query_inner(query_arg, query_length_arg);

pthread_mutex_unlock(&LOCK_thd_data);

}

NET 网络连接描述符(sql/mysql_com.h)

网络连接描述符,对内部数据包进行了封装,是client和server之间的通信协议。

Vio *vio; //底层的网络I/O socket描述符

unsigned char *buff,*buff_end,*write_pos,*read_pos; //缓存相关

unsigned long remain_in_buf,length, buf_length, where_b;

unsigned long max_packet,max_packet_size; //当前值;最大值

unsigned int pkt_nr,compress_pkt_nr; //当前(未)压缩包的顺序值

my_bool compress; //是否压缩

unsigned int write_timeout, read_timeout, retry_count; //最大等待时间

unsigned int *return_status; //thd中的服务器状态

unsigned char reading_or_writing;

unsigned int last_errno; //返回给客户端的错误号

unsigned char error;

TABLE 数据库表描述符(sql/table.h)

数据库表描述符,分成TABLE和TABLE_SHARE两部分。

handler *file; //指向这张表在storage engine中的handler的指针

THD *in_use;

Field **field;

uchar *record[2];

uchar *write_row_record;

uchar *insert_values;

key_map covering_keys;

key_map quick_keys, merge_keys;

key_map keys_in_use_for_query;

key_map keys_in_use_for_group_by;

key_map keys_in_use_for_order_by;

KEY *key_info;

HASH name_hash; //数据域名字的hash值

MEM_ROOT mem_root; //内存块

LEX_STRING db;

LEX_STRING table_name;

LEX_STRING table_cache_key;

enum db_type db_type //当前表的storage engine类型

enum row_type row_type //当前记录是定长还是变长

uint primary_key;

uint next_number_index; //自动增长key的值

bool is_view ;

bool crashed;

FIELD 字段描述符(sql/field.h)

域描述符,是各种字段的抽象基类。

uchar *ptr; // 记录中数据域的位置

uchar *null_ptr; // 记录 null_bit 位置的byte

TABLE *table; // 指向表的指针

TABLE *orig_table; // 指向原表的指针

const char **table_name, *field_name;

LEX_STRING comment;

key_map key_start, part_of_key, part_of_key_not_clustered;

key_map part_of_sortkey;

enum utype { NONE,DATE,SHIELD,NOEMPTY,CASEUP,PNR,BGNR,PGNR,YES,NO,REL,

CHECK,EMPTY,UNKNOWN_FIELD,CASEDN,NEXT_NUMBER,INTERVAL_FIELD,

BIT_FIELD, TIMESTAMP_OLD_FIELD, CAPITALIZE, BLOB_FIELD,

TIMESTAMP_DN_FIELD, TIMESTAMP_UN_FIELD, TIMESTAMP_DNUN_FIELD};

…..

virtual int store(const char *to, uint length,CHARSET_INFO *cs)=0;

inline String *val_str(String *str) { return val_str(str, str); }

Utility API Calls 各种API

各种核心的工具,例如内存分配,字符串操作或文件管理。标准C库中的函数只使用了很少一部分,C++中的函数基本没用。

void *my_malloc(size_t size, myf my_flags) //对malloc的封装

size_t my_write(File Filedes, const uchar *Buffer, size_t Count, myf MyFlags) //对write的封装

Preprocessor Macros 处理器宏

Mysql中使用了大量的C预编译,随编译参数的不同最终代码也不同。

#define max(a, b) ((a) > (b) ? (a) : (b)) //得出两数中的大者

do

{

char compile_time_assert[(X) ? 1 : -1]

__attribute__ ((unused));

} while(0)

使用gcc的attribute属性指导编译器行为

• Global variables 全局变量

• configuration settings

• server status information

• various data structures shared among threads

主要包括一些全局的设置,服务器信息和部分线程间共享的数据结构。

struct system_status_var global_status_var; //全局的状态信息

struct system_variables global_system_variables; //全局系统变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值