当前位置: 首页 > news >正文

mysql源代码解析经典类——TABLE类

表类定义了MySQL 数据库表在 MySQL 内存中的形式。表以两种形式存在——-打开或关闭状态。MySQL要想使用表,必须先将其打开。表描述类是在表被打开时创建。表描述类创建后会被置于表缓存(table_cache)中,等待下一个查询的重用,以提高访问的效率。
​ 表描述类对象经常在查询解析、查询优化、访问控制和查询缓存代码中被引用。所以了解它的组成有助于读者对MySQL底层对表操作的理解。
​ sql下的table.h

公共成员函数

//优化和执行后重置字段状态
void 	reset ()
//初始化TABLE实例(新创建的实例,或来自表缓存或THD :: temporary_tables列表的实例),并准备在语句执行期间进一步使用。  
void 	init (THD *thd, TABLE_LIST *tl)
//将表初始化为内部tmp表。
bool 	init_tmp_table (THD *thd, TABLE_SHARE *share, MEM_ROOT *m_root, CHARSET_INFO *charset, const char *alias, Field **fld, uint *blob_fld, bool is_virtual)
//为表中的每一列创建Item_field。
bool 	fill_item_list (mem_root_deque< Item *> *item_list) const
//重置现有的Item_field项目列表以指向该表的Fields    
void 	reset_item_list (const mem_root_deque< Item *> &item_list) const
void 	clear_column_bitmaps (void)
//告诉handler我们将在稍后调用position()和rnd_pos()。
void 	prepare_for_position (void)
//根据mark_used将列标记为已读或已写(或无)。
void 	mark_column_used (Field *field, enum enum_mark_columns mark)
//标记键使用的列,但不要重置其他字段
void 	mark_columns_used_by_index_no_reset (uint index, MY_BITMAP *map, uint key_parts=0) const
void 	mark_columns_used_by_index (uint index)
//在读写映射中将自动递增字段标记为已使用字段 
void 	mark_auto_increment_column (void)
//标记更新行所需的列。
void 	mark_columns_needed_for_update (THD *thd, bool mark_binlog_columns)
void 	mark_columns_needed_for_delete (THD *thd) 
void 	mark_columns_needed_for_insert (THD *thd)
void 	mark_columns_per_binlog_row_image (THD *thd)
//在执行更新和插入操作时,更新生成列的write / read_set。
void 	mark_generated_columns (bool is_update)
//将生成的列及其依赖项添加到read_set / write_set位图。
void 	mark_gcol_in_maps (const Field *field)
//在执行更新和插入操作时,使用检查约束评估所需的列更新read_map。
void 	mark_check_constraint_columns (bool is_update)
void 	column_bitmaps_set (MY_BITMAP *read_set_arg, MY_BITMAP *write_set_arg)
void 	column_bitmaps_set_no_signal (MY_BITMAP *read_set_arg, MY_BITMAP *write_set_arg)
void 	use_all_columns ()
void 	default_column_bitmaps ()
//应该重新打开该表的实例吗? 
bool 	needs_reopen ()
Field ** 	visible_field_ptr () const
uint 	visible_field_count () const
//为物化派生表分配键的空间。
bool 	alloc_tmp_keys (uint new_key_count, uint new_key_part_count, bool modify_share)
//将一个键添加到实例化派生表。    
bool 	add_tmp_key (Field_map *key_parts, bool invisible, bool modify_share)
//对于物化派生表:将KEY定义从某个位置复制到第一个尚未使用的位置(较低的位置)
void 	copy_tmp_key (int old_idx, bool modify_share)
//对于物化的派生表:在copy_tmp_key()复制了所有已用键的定义之后,在TABLE :: key_info中,我们有一个已用键的头,后跟一个未用键的尾;此功能可消除尾巴。
void 	drop_unused_tmp_keys (bool modify_share) 
void 	set_keyread (bool flag)
//检查给定索引是否具有虚拟生成的列。
bool 	index_contains_some_virtual_gcol (uint index_no) const
//为单个表UPDATE / DELETE查询更新TABLE :: const_key_parts
bool 	update_const_key_parts (Item *conds)
//如果所选的快速读取方法正在使用完全唯一索引,则可以删除读取。
bool 	check_read_removal (uint index)
ptrdiff_t 	default_values_offset () const
bool 	has_storage_handler () const
// 为临时表设置存储handler
void 	set_storage_handler (handler *file_arg)
//如果表已实例化,则返回true,否则返回false
bool 	is_created () const
//将表设置为“ created”,并启用没有实例化表无法启用的存储引擎中的标志。
void 	set_created ()
//删除内容后,将表的内容设置为“删除”,即“未创建”。
void 	set_deleted ()
//将表设置为可为空,即它在某些外部联接的内部。
void 	set_nullable ()
//返回表是否为空
bool 	is_nullable () const
bool 	has_gcol () const
//行缓冲区的生命周期如下 
void 	set_not_started ()
bool 	is_started () const
// 设置行缓冲区的状态:包含行
void 	set_found_row ()
//设置行缓冲区的状态:不包含任何行。
void 	set_no_row ()
//从handler的结果中设置“row found”状态
void 	set_row_status_from_handler (int status)
//将当前行设置为“空行”,以用于空补充的外部联接
void 	set_null_row ()
//对当前行清除设置到“null now”的状态
void 	reset_null_row ()
//为当前行设置”updated"属性 
void 	set_updated_row ()
//为当前行设置“deleted"属性 
void 	set_deleted_row ()
bool 	has_row () const
bool 	has_null_row () const
bool 	has_updated_row () const
bool 	has_deleted_row () const
//将当前行的NULL标志保存到指定的缓冲区中      
void 	save_null_flags ()
//从指定的缓冲区还原当前行的NULL标志。
void 	restore_null_flags ()
//清空内部临时表(删除行,关闭扫描) 
bool 	empty_result_table ()
//初始化优化程序成本模型。
void 	init_cost_model (const Cost_model_server *cost_model_server)
//返回此表的成本模型对象 
const Cost_model_table * 	cost_model () const
//修复表的生成列(GC)和/或默认表达式 
void 	refix_value_generator_items (THD *thd)
//refix_value_generator_items()的辅助函数,用于修复一列的表达式(无论是GC还是默认表达式)并检查约束表达式。
void 	refix_inner_value_generator_items (Value_generator *g_expr)
//清除与生成的列关联的项目中的任何状态,以准备下一条语句。 
void 	cleanup_value_generator_items ()
void 	set_tmp_table_seq_id (uint arg)
//根据最大读取密钥长度更新覆盖密钥。 
void 	update_covering_prefix_keys (Field *field, uint16 key_read_length, Key_map *covering_prefix_keys)
//该表在当前行中是否有可以使用部分更新来更新的列? 
bool 	has_binary_diff_columns () const
//获取已为当前行中的给定列收集的二进制差异列表,如果无法对该列使用部分更新,则返回nullptr。
const Binary_diff_vector * 	get_binary_diffs (const Field *field) const
//将给定列标记为可以在执行update语句期间使用部分更新来更新的列。 
bool 	mark_column_for_partial_update (const Field *field)
//此列是否已标记为部分更新?
bool 	is_marked_for_partial_update (const Field *field) const
//该表是否有标记为mark_column_for_partial_update()的列?
bool 	has_columns_marked_for_partial_update () const
//在此表中启用JSON列的部分更新。
bool 	setup_partial_update (bool logical_diffs)
bool 	setup_partial_update ()
//为使用部分更新更新的列添加二进制差异。
bool 	add_binary_diff (const Field *field, size_t offset, size_t length)
//清除为JSON列的部分更新而收集的差异,并为临时禁用当前行的部分更新的所有列重新启用部分更新。 
void 	clear_partial_update_diffs ()
//清理用于部分更新JSON列的状态。 
void 	cleanup_partial_update ()
//暂时禁用当前行中某一列的二进制差异集合。
void 	disable_binary_diffs_for_current_row (const Field *field)
//暂时禁止收集描述当前行中JSON列的逻辑更改的Json_diff对象。
void 	disable_logical_diffs_for_current_row (const Field *field) const 
//获取一个缓冲区,该缓冲区可用于在执行部分更新时保存部分更新的列值。 
String * 	get_partial_update_buffer ()
//将描述逻辑更改的逻辑JSON差异添加到部分更新中的JSON列 
void 	add_logical_diff (const Field_json *field, const Json_seekable_path &path, enum_json_diff_operation operation, const Json_wrapper *new_value)
//获取已为当前行中的给定列收集的JSON差异列表,如果无法对该列使用部分更新,则返回nullptr。
const Json_diff_vector * 	get_logical_diffs (const Field_json *field) const
//是否在此JSON列上启用了使用二进制差异进行的部分更新?
bool 	is_binary_diff_enabled (const Field *field) const
//是否在此JSON列上启用了使用逻辑差异的部分更新? 
bool 	is_logical_diff_enabled (const Field *field) const
//BLOB类型的虚拟字段具有标志m_keep_old_value。 
void 	blobs_need_not_keep_old_value ()
//设置变量should_binlog_drop_if_temp_flag,以便可以确定临时表的日志记录。
void 	set_binlog_drop_if_temp (bool should_binlog)
bool 	should_binlog_drop_if_temp (void) const

公共属性

TABLE_SHARE * 	s {nullptr}
handler * 	file {nullptr}
TABLE * 	next {nullptr}
TABLE * 	prev {nullptr}
//一个位图,标记存在的功能索引存在的隐藏的已生成列。 
MY_BITMAP 	fields_for_functional_indexes
THD * 	in_use {nullptr}
Field ** 	field {nullptr}
//隐藏字段的计数(如果有内部临时表);否则为0。 
uint 	hidden_field_count {0}
uchar * 	record [2] {nullptr, nullptr}
uchar * 	write_row_record {nullptr}
uchar * 	insert_values {nullptr}
//用于多行读取的缓冲区。最初是空的。 
Record_buffer 	m_record_buffer {0, 0, nullptr}
Key_map 	covering_keys
Key_map 	quick_keys
Key_map 	merge_keys
Key_map 	possible_quick_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 {nullptr}
// 生成键的键部分数组,用于物化派生表
KEY_PART_INFO * 	base_key_parts {nullptr}
Field * 	next_number_field {nullptr}
Field * 	found_next_number_field {nullptr}
//指向生成的列的指针 
Field ** 	vfield {nullptr}
//指向具有默认值的字段的指针。
Field ** 	gen_def_fields_ptr {nullptr}
//唯一约束使用的字段。 
Field * 	hash_field {nullptr}
Field * 	fts_doc_id_field {nullptr}
Table_trigger_dispatcher * 	triggers {nullptr}
TABLE_LIST * 	pos_in_table_list {nullptr}
TABLE_LIST * 	pos_in_locked_tables {nullptr}
ORDER * 	group {nullptr}
//表的别名 
const char * 	alias {nullptr}
//指向记录[0]的空标志的指针 
uchar * 	null_flags {nullptr}
//当null_row为true时保存null_flags。 
uchar * 	null_flags_saved
MY_BITMAP 	def_read_set
MY_BITMAP 	def_write_set
MY_BITMAP 	tmp_set
MY_BITMAP 	pack_row_tmp_set
MY_BITMAP 	cond_set
//表字段(列)的位图,在INSERT INTO语句中明确设置 
MY_BITMAP 	def_fields_set_during_insert
//设置优化器打算读取的所有列。
MY_BITMAP * 	read_set {nullptr}
MY_BITMAP * 	write_set {nullptr}
//指向表字段(列)的位图的指针,该字段在INSERT INTO语句中明确设置 
MY_BITMAP * 	fields_set_during_insert {nullptr}
query_id_t 	query_id {0}
ha_rows 	quick_rows [MAX_KEY] {0}
key_part_map 	const_key_parts [MAX_KEY] {0}
uint 	quick_key_parts [MAX_KEY] {0}
uint 	quick_n_ranges [MAX_KEY] {0}
ha_rows 	quick_condition_rows {0}
uint 	lock_position {0}
uint 	lock_data_start {0}
uint 	lock_count {0}
uint 	db_stat {0}
int 	current_lock {0}
Sql_table_check_constraint_list * 	table_check_constraint_list {nullptr}
bool 	null_row {false}
bool 	copy_blobs {false}
bool 	force_index {false}
//语句包含FORCE INDEX FOR ORDER BY时设置的标志,请参见TABLE_LIST :: process_index_hints() 
bool 	force_index_order {false}
//语句包含FORCE INDEX FOR GROUP BY时设置的标志,请参见TABLE_LIST :: process_index_hints()
bool 	force_index_group {false}
bool 	const_table {false}
//如果写入此表不应写入行,而仅写入键,则为True。 
bool 	no_rows {false}
//如果设置,优化器发现行检索应仅访问索引树。
bool 	key_read {false}
//某些需要整行的语句将其设置为禁止仅索引访问。
bool 	no_keyread {false}
//如果设置,指示服务器未复制该表
bool 	no_replicate {false}
bool 	fulltext_searched {false}
bool 	no_cache {false}
bool 	open_by_handler {false}
//指示auto_increment字段的值是由用户或其他来源显式提供的 
bool 	autoinc_field_has_explicit_non_null_value {false}
bool 	alias_name_used {false}
bool 	get_fields_in_item_tree {false}
//该表是否必须重新打开,并且不能重复使用 
bool 	m_needs_reopen {false}
//是否物化,true:是的
bool 	materialized {false}
struct {
   class JOIN_TAB *   join_tab {nullptr}
   class QEP_TAB *   qep_tab {nullptr}
   thr_lock_type   lock_type {TL_UNLOCK}
   thr_locked_row_action   locked_row_action {THR_DEFAULT}
   bool   not_exists_optimize {false}
   bool   impossible_range {false}
} 	reginfo
MEM_ROOT 	mem_root
//如果GROUP_CONCAT与ORDER BY | | |一起使用,则在Item_func_group_concat :: setup中为适当的临时表初始化。 DISTINCT和BLOB字段计数>0。 
Blob_mem_storage * 	blob_storage {nullptr}
//不归表所有;仅用于filesort_free_buffers()
SortingIterator * 	sorting_iterator {nullptr}
SortingIterator * 	duplicate_removal_iterator {nullptr}
//如果对表应用唯一操作(按行ID)的结果 
Sort_result 	unique_result
partition_info * 	part_info {nullptr}
bool 	all_partitions_pruned_away {false}
MDL_ticket * 	mdl_ticket {nullptr}

私有属性

//Table_cache特定实例中特定表的已使用/未使用TABLE对象列表的链接(换言之,特定Table_cache_element对象)。
TABLE * 	cache_next {nullptr}
TABLE ** 	cache_prev {nullptr}
//如果为true,则此表为内部表。 
bool 	nullable {false}
uint8 	m_status {0}
//针对临时表 
bool 	created {false}
//此表上操作的成本模型对象。
Cost_model_table 	m_cost_model
//内部tmp表序号
uint 	tmp_table_seq_id {0}
//位图,在更新语句中告诉哪些列适合部分更新
MY_BITMAP * 	m_partial_update_columns {nullptr}
//包含执行时间状态的对象,用于部分更新JSON列。
Partial_update_info * 	m_partial_update_info {nullptr}
//这个标志决定了我们是否应该记录放置临时表命令。
bool 	should_binlog_drop_if_temp_flag {false}

相关文章:

  • mysql源代码解析经典类——sql解析Lex类
  • mysql源代码解析经典类——SELECT_LEX类
  • mysql源代码目录详解
  • mysql源代码目录innodb引擎目录详解
  • mysql数据库系统自带的4个默认数据库
  • Centos源码安装Postgresql12
  • linux下用gdb调试查看core文件内容
  • C++ map和multimap的键查找和值查找以及删除操作
  • 学习make和CMake的经典文档和视频
  • Go语言关于PorstgreSQL数据库的驱动-pg
  • linux调式命令
  • Bash快捷键
  • PostgreSQL插件汇总
  • ulimit详解
  • 数据库连接接口(驱动)
  • canvas绘制圆角头像
  • CentOS7 安装JDK
  • Create React App 使用
  • flask接收请求并推入栈
  • golang中接口赋值与方法集
  • IDEA 插件开发入门教程
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Phpstorm怎样批量删除空行?
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • vue:响应原理
  • Vue2.0 实现互斥
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 翻译--Thinking in React
  • 记一次和乔布斯合作最难忘的经历
  • 巧用 TypeScript (一)
  • 如何合理的规划jvm性能调优
  • 实习面试笔记
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #14vue3生成表单并跳转到外部地址的方式
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (3)nginx 配置(nginx.conf)
  • (39)STM32——FLASH闪存
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET MVC之AOP
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • [ linux ] linux 命令英文全称及解释
  • [.NET]桃源网络硬盘 v7.4
  • [].slice.call()将类数组转化为真正的数组
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [Assignment] C++1