LEX_STRING
(lexer.lex_str
):字符串
LEX_STRING
是一个结构体,主要用来表示标识符或字符串字面值的节点,定义如下:
// inlcude/mysql/mysql_lex_string.h
struct MYSQL_LEX_STRING {
char *str;
size_t length;
};
YACC 语义组:
select_alias
:DQL 语句的SELECT
子句中字段的别名IDENT_sys
、opt_ident
、ident_or_text
、role_ident_or_text
、ident_or_empty
:标识符TEXT_STRING_sys
、TEXT_STRING_literal
、TEXT_STRING_filesystem
、TEXT_STRING_password
、TEXT_STRING_validated
、TEXT_STRING_hash
、TEXT_STRING_sys_nonewline
、filter_wild_db_table_string
:单引号 / 双引号字符串opt_constraint_name
:CONSTRAINT
关键字引导的约束条件名称(标识符)ts_datafile
、opt_ts_datafile_name
:DATEFILE
关键字引导的文件名(字符串)lg_undofile
:UNDOFILE
关键字引导的文件名(字符串)opt_logfile_group_name
:USE LOGFILE GROUP
引导的组名(标识符)opt_describe_column
:DESCRIBE
语句中需要描述的字段名(标识符或字符串)opt_datadir_ssl
:SSL 类型(常量)default_encryption
:ENCRYPTION
关键字引导的名称(字符串)schema
:库名(字符串)engine_or_all
:存储引擎名称或ALL
关键字(字符串)opt_binlog_in
:SHOW
语句中IN
引导的 Biglog 日志文件名(字符串)persisted_variable_ident
:IF EXISTS
子句中的名称,格式包括标识符
、标识符.标识符
、DEFAULT.标识符
routine_string
【待梳理】opt_explain_into
【待梳理】
Mem_root_array_YY<LEX_STRING>
(lex_str_list
):字符串的列表
Mem_root_array_YY
是 MySQL 自定义的类型安全的动态数组。
YACC 语义组:
TEXT_STRING_sys_list
:逗号分隔的单引号 / 双引号字符串(TEXT_STRING_sys
)的列表。
LEX_CSTRING
(lex_cstr
):不可变字符串
LEX_CSTRING
也是结构体,主要也用来表示标识符或字符串字面值的节点,定义如下:
// inlcude/mysql/mysql_lex_string.h
struct MYSQL_LEX_CSTRING {
const char *str;
size_t length;
};
YACC 语义组:
key_cache_name
:CACHE INDEX
语句中的缓存名称(标识符或DEFAULT
关键字)opt_table_alias
:表语句(表名或子查询)后,可选的表别名AS
子句(标识符)opt_replace_password
:SET
语句中可选的替换密码REPLACE
子句(字符串)sp_opt_label
【待梳理】json_attribute
:用于设置ENGINE_ATTRIBUTE
、SECONDARY_ENGINE_ATTRIBUTE
的 Json 格式字符串(字符串)opt_channel
:FOR CHANNEL
子句(字符串)opt_explain_for_schema
:EXPLAIN
语句中可选的FOR DATABASE
子句(标识符)opt_compression_algorithm
:LOAD
语句中可选的COMPRESSION
子句(字符串)
Mem_root_array<LEX_CSTRING> *
(lex_cstring_list
):不可变字符串的列表
Mem_root_array
是 MySQL 自定义的类型安全的动态数组。
YACC 语义组:
opt_column_list
/column_list
:逗号分隔的标识符的列表。
Mem_root_array_YY<LEX_CSTRING>
(simple_ident_list
):不可变字符串的列表
// sql/parser_yystype.h
typedef Mem_root_array_YY<LEX_CSTRING> Create_col_name_list;
YACC 语义组:
opt_derived_column_list
/simple_ident_list
:逗号分隔的标识符(字段名)的列表。
char *
(simple_string
):指向字符串的指针
simple_string
是指向字符串的指针,在联合体 MY_SQL_PARSER_STYPE
中定义如下:
char *simple_string;
YACC 语义组:
opt_db
:SHOW
语句中可选的FROM
或IN
子句(标识符)
List<char> *
(name_list
):指向字符串的指针的列表
YACC 语义组:
opt_name_list
/name_list
:PARTITION BY
子句中逗号分隔的字段名(标识符)的列表。
String
(string
):包含字符集的字符串
String
类是 MySQL 自定义的包含字符集的字符串,定义在 include/sql_string.h
中。
核心属性:
char *m_ptr
:指向字符串的指针size_t m_length
:字符串的长度const CHARSET_INFO *m_charset
:字符串的字符集
YACC 语义组:
text_string
:字面值字面值、十六进制字面值或二进制字面值opt_gconcat_separator
:group_concat
函数中可选的指定分隔符的SEPARATOR
子句opt_xml_rows_identified_by
:LOAD
语句中可选的指定 XML 文件行分隔符的ROWS IDENTIFIED BY
子句
List<String> *
(string_list
):包含字符集的字符串的列表
YACC 语义组:
string_list
:各个场景下,逗号分隔的text_string
(字面值字面值、十六进制字面值或二进制字面值)的列表ident_string_list
/using_list
:各个场景下,逗号分隔的ident
(标识符)的列表opt_use_partition
/use_partition
:描述PARITITION (list of partitions)
子句。all_or_alt_part_name_list
:ALTER
语句的PARTITION
子句中,指定分区范围的ALL
关键字或部分名称的列表。
Item_string
(item_string
):继承自 Item
的字符串
Item_string
是继承自 MySQL 抽象语法树节点基类 Item
的字符串类型节点,它存储了指向字符串的指针、字符串的长度以及字符串的字符集,并将这些信息存储在 Item
的 str_value
属性中。
继承关系:Parse_tree_node > Item > Item_basic_constant > Item_string
核心属性:
String str_value
:包含字符集的字符串
YACC 语义组:
window_name
/opt_existing_window_name
:窗口子句中的窗口名称(标识符)filter_db_ident
:CHANGE REPLICATION
语句中REPLICATE_DO_DB
配置项或REPLICATE_IGNORE_DB
配置项中的数据库名称(标识符)filter_table_ident
:CHANGE REPLICATION
语句中REPLICATE_DO_TABLE
配置项或REPLICATE_IGNORE_TABLE
配置项中的表名称(标识符)filter_string
:CHANGE REPLICATION
语句中REPLICATE_WILD_DO_TABLE
配置项或REPLICATE_WILD_IGNORE_TABLE
配置项中包含通配符的表名称(字符串),这里的Item_string
对象是基于lexer.lex_str
类型构造的。
mem_root_deque<Item *> *
:继承自 Item
的字符串
YACC 语义组:
filter_db_list
、opt_filter_db_list
:逗号分隔的filter_db_ident
的列表。filter_table_list
、opt_filter_table_list
:逗号分隔的filter_table_ident
的列表。filter_string_list
、opt_filter_string_list
:逗号分隔的filter_string
的列表。filter_db_pair_list
、opt_filter_db_pair_list
:逗号分隔的(filter_db_ident, filter_db_ident)
的列表。
const chat *
(c_str
):指向字符串的不可变指针
simple_string
是指向字符串的指针,在联合体 MY_SQL_PARSER_STYPE
中定义如下:
const char *c_str;
YACC 语义组:
field_length
/opt_field_length
:在 DDL 语句中,指定字段类型长度的括号。type_datetime_precision
:在 DDL 语句或CAST
函数中,指定时间类型精度的括号。opt_place
:在 DDL 语句中指定新增字段位置的可选的FIRST
或AFTER column_name
子句。