MySQL 源码|112 - 抽象语法树:(4) 枚举类型的节点 ①

文档中对枚举值描述部分由 AI 生成。

enum_var_typevar_type):变量作用域级别

枚举类型 enum_var_type 描述 MySQL 变量作用域级别。

  • OPT_DEFAULT = 0:默认选项。当没有指定其他选项时,将使用此默认值。
  • OPT_SESSION:会话级选项。这种类型的选项在用户的一个会话期间有效。
  • OPT_GLOBAL:全局选项。指定了对整个系统或应用程序都有效的设置。
  • OPT_PERSIST:持久化选项。这类选项不仅即时生效,还会被保存起来,以便在系统重启后依然有效。
  • OPT_PERSIST_ONLY:仅持久化选项。这种类型的选项只会在持久存储中更新,不会立即对当前运行的系统产生影响。
// sql/set_var.h
enum enum_var_type : int {
  OPT_DEFAULT = 0,
  OPT_SESSION,
  OPT_GLOBAL,
  OPT_PERSIST,
  OPT_PERSIST_ONLY
};

YACC 语义组:

  • option_typeSET 语句中可选的变量作用域级别关键字。
  • opt_var_typeSHOW STATUS 语句和 SHOW VARIABLES 语句中可选的作用域级别关键字。
  • opt_rvalue_system_variable_type / opt_set_var_ident_type@@ 之后可选的作用域级别关键字。
  • install_option_typeINSTALL 语句中可选的 SET 子句中可选的变量作用域级别关键字。
enum row_typerow_type):行存储方式

枚举类型 enum_var_type 描述 MySQL 的行存储方式。

  • ROW_TYPE_NOT_USED:标识该类型未被使用,值为 -1
  • ROW_TYPE_DEFAULT:标识默认的行类型,没有特定的存储规则或特征。
  • ROW_TYPE_FIXED:标识固定长度的行类型,所有记录具有相同的长度。
  • ROW_TYPE_DYNAMIC:标识动态长度的行类型,记录长度可以变化。
  • ROW_TYPE_COMPRESSED:标识压缩类型的行,适用于需要节省存储空间的情况。
  • ROW_TYPE_REDUNDANT:标识冗余类型的行,可能包含额外的信息用于恢复或其他目的。
  • ROW_TYPE_COMPACT:标识紧凑类型的行,优化存储以减少空间占用。
  • ROW_TYPE_PAGED:标识分页类型的行,适用于大容量数据存储和检索。
// sql/handler.h
enum row_type : int {
  ROW_TYPE_NOT_USED = -1,
  ROW_TYPE_DEFAULT,
  ROW_TYPE_FIXED,
  ROW_TYPE_DYNAMIC,
  ROW_TYPE_COMPRESSED,
  ROW_TYPE_REDUNDANT,
  ROW_TYPE_COMPACT,
  ROW_TYPE_PAGED
};

YACC 语义组:

  • row_types:DDL 语句中 ROW_FORMAT 子句中的行存储格式。
enum_ha_read_modesha_read_mode):数据读取方式

枚举类型 enum_ha_read_modes 描述 MySQL 的 HANDLER 语句的数据读取的方式。

  • RFIRST:表示第一次读取。
  • RNEXT:表示读取下一个。
  • RPREV:表示读取前一个。
  • RLAST:表示最后一次读取。
  • RKEY:表示基于键的读取。
  • RNEXT_SAME:表示读取下一个相同的数据。
// sql/sql_handler.h
enum class enum_ha_read_modes { RFIRST, RNEXT, RPREV, RLAST, RKEY, RNEXT_SAME };

YACC 语义组:

  • handler_scan_functionHANDLER 语句扫描表时的数据读取方式。
  • handler_rkey_functionHANDLER 语句扫描索引时的数据读取方式。
enum_tx_isolationtx_isolation):隔离级别

枚举类型 enum_tx_isolation 描述事务的隔离级别,用于控制事务之间的可见性及并发副作用(如脏读、不可重复读、幻读等)。

  • ISO_READ_UNCOMMITTED:读未提交。允许一个事务读取其他事务未提交的数据,这可能会导致脏读、不可重复读和幻读。
  • ISO_READ_COMMITTED:读已提交。保证一个事务只能读取其他事务已经提交的数据,避免了脏读,但无法避免不可重复读和幻读。
  • ISO_REPEATABLE_READ:可重复读。确保在同一个事务中多次读取同样的数据结果是一致的,避免了脏读和不可重复读,但理论上可能仍会出现幻读。
  • ISO_SERIALIZABLE:可序列化。提供最严格的事务隔离级别,防止任何并发冲突的发生,完全避免了脏读、不可重复读和幻读。
// sql/sql_handler.h
enum enum_tx_isolation : int {
  ISO_READ_UNCOMMITTED,
  ISO_READ_COMMITTED,
  ISO_REPEATABLE_READ,
  ISO_SERIALIZABLE
};

YACC 语义组:

  • isolation_types:定义事务隔离级别的 ISOLATION LEVEL 子句。
enum_mysql_timestamp_typedate_time_type):时间戳类型

枚举类型 enum_mysql_timestamp_type 描述了 MySQL 中不同时间戳类型,用于区分不同的日期和时间数据类型。

  • MYSQL_TIMESTAMP_NONE:无时间戳。

  • MYSQL_TIMESTAMP_ERROR:表示错误的时间戳类型。

  • MYSQL_TIMESTAMP_DATE:对应 DATE 关键字,仅存储年、月、日。

  • MYSQL_TIMESTAMP_DATETIME:对应 DATETIME 关键字和 TIMESTAMP 关键字,对应 DATETIME 时存储本地市区,对应 TIMESTAMP 时存储世界时。

  • MYSQL_TIMESTAMP_TIME:对应 TIME 关键字,仅存储小时、分钟、秒和微秒。

  • MYSQL_TIMESTAMP_DATETIME_TZ:带有时间区域信息的DATETIMETIMESTAMP 的临时类型,在时间区域信息被处理后转换为 MYSQL_TIMESTAMP_DATETIME

// include/mysql_time.h
enum enum_mysql_timestamp_type {
  MYSQL_TIMESTAMP_NONE = -2,
  MYSQL_TIMESTAMP_ERROR = -1,
  MYSQL_TIMESTAMP_DATE = 0,
  MYSQL_TIMESTAMP_DATETIME = 1,
  MYSQL_TIMESTAMP_TIME = 2,
  MYSQL_TIMESTAMP_DATETIME_TZ = 3
};

YACC 语义组:

  • date_time_typeGET_FORMAT 函数中的时间戳类型。
enum_filetypefiletype):读取的文件类型

枚举类型 enum_filetype 描述 LOAD 语句中读取的文件类型:

  • FILETYPE_CSV:csv 格式文件。
  • FILETYPE_XML:xml 格式文件。
// sql/sql_exchange.h
enum enum_filetype { FILETYPE_CSV, FILETYPE_XML };

YACC 语义组:

  • data_or_xmlLOAD 语句中指定读取文件类型的关键字。
enum_source_typesource_type):读取的文件来源

枚举类型 enum_source_type 描述 LOAD 语句中读取的文件来源:

  • LOAD_SOURCE_FILE:从本地文件系统加载数据。
  • LOAD_SOURCE_URL:从网络URL加载数据。
  • LOAD_SOURCE_S3:从Amazon S3存储服务加载数据。
// sql/sql_exchange.h
enum enum_source_type { LOAD_SOURCE_FILE, LOAD_SOURCE_URL, LOAD_SOURCE_S3 };

YACC 语义组:

  • load_source_typeLOAD 语句中指定读取文件来源的关键字。
enum_yes_no_unknownm_yes_no_unk):是、否、未知的枚举值

枚举类型 enum_source_type 描述是、否和未知 3 种状态。

// sql/parser_yystype.h
enum enum_yes_no_unknown { TVL_YES, TVL_NO, TVL_UNKNOWN };

YACC 语义组:

  • opt_chainCOMMIT 语句和 ROLLBACK 语句中可选的 AND NO CHAINAND CHAIN
  • opt_releaseCOMMIT 语句和 ROLLBACK 语句中可选的 RELEASENO RELEASE
enum_condition_item_nameda_condition_item_name):条件类型名称

枚举类型 enum_condition_item_name 描述 MySQL 条件区域中条件的所有条件项名称,这些条件可以由用户通过 SIGNALRESIGNAL 设置,也可以由服务器实现设置。

  • CIN_CLASS_ORIGIN = 0:条件类别起源,标记为第一个属性 CIN_FIRST_PROPERTY
  • CIN_SUBCLASS_ORIGIN = 1:子类起源。
  • CIN_CONSTRAINT_CATALOG = 2:约束目录。
  • CIN_CONSTRAINT_SCHEMA = 3:约束模式。
  • CIN_CONSTRAINT_NAME = 4:约束名称。
  • CIN_CATALOG_NAME = 5:目录名称。
  • CIN_SCHEMA_NAME = 6:模式名称。
  • CIN_TABLE_NAME = 7:表名称。
  • CIN_COLUMN_NAME = 8:列名称。
  • CIN_CURSOR_NAME = 9:游标名称。
  • CIN_MESSAGE_TEXT = 10:消息文本。
  • CIN_MYSQL_ERRNO = 11:MySQL错误号,同时标记为最后一个属性 CIN_LAST_PROPERTY
// sql/sql_signal.h
enum enum_condition_item_name {
  CIN_CLASS_ORIGIN = 0,
  CIN_FIRST_PROPERTY = CIN_CLASS_ORIGIN,
  CIN_SUBCLASS_ORIGIN = 1,
  CIN_CONSTRAINT_CATALOG = 2,
  CIN_CONSTRAINT_SCHEMA = 3,
  CIN_CONSTRAINT_NAME = 4,
  CIN_CATALOG_NAME = 5,
  CIN_SCHEMA_NAME = 6,
  CIN_TABLE_NAME = 7,
  CIN_COLUMN_NAME = 8,
  CIN_CURSOR_NAME = 9,
  CIN_MESSAGE_TEXT = 10,
  CIN_MYSQL_ERRNO = 11,
  CIN_LAST_PROPERTY = CIN_MYSQL_ERRNO
};

YACC 语义组:

  • opt_set_signal_informationSIGNAL 语句和 RESIGNAL 语句中的 SET 子句中的条件名称。
enum_trigger_order_typetrigger_action_order_type):触发器顺序子句类型

枚举类型 enum_trigger_order_type 描述 MySQL 触发器顺序子句的类型。

  • TRG_ORDER_NONE:未指定触发器顺序子句
  • TRG_ORDER_FOLLOWS:FOLLOWS 子句
  • TRG_ORDER_PRECEDES:PRECEDES 子句
// sql/triggfer_def.h
enum enum_trigger_order_type {
  TRG_ORDER_NONE = 0,
  TRG_ORDER_FOLLOWS = 1,
  TRG_ORDER_PRECEDES = 2
};

YACC 语义组:

  • trigger_action_order:触发器顺序子句 FOLLOWS 子句或 PRECEDES 子句的类型。
enum olap_typeolap_type):GROUP BY 语句中的 OLAP 类型

枚举类型 olap_type 描述 MySQL 的 GROUP BY 语句中的 OLAP 类型。

  • UNSPECIFIED_OLAP_TYPE:未指定的OLAP类型
  • ROLLUP_TYPE:Rollup类型
  • CUBE_TYPE:Cube类型
// sql/olap.h
enum olap_type { UNSPECIFIED_OLAP_TYPE, ROLLUP_TYPE, CUBE_TYPE };

YACC 语义组:

  • olap_opt:DQL 语句中的 GROUP BY 子句中可选的的 WITH ROLLUP 关键字。
enum tablesample_typetablesample_type):抽样方法

枚举类型 tablesample_type 描述 MySQL 的抽样方法。

  • UNSPECIFIED_TABLESAMPLE_TYPE:未指定的表采样类型
  • SYSTEM_TABLESAMPLE_TYPE:系统表采样类型
  • BERNOULLI_TABLESAMPLE_TYPE:伯努利表采样类型
// sql/tablesample.h
enum class tablesample_type {
  UNSPECIFIED_TABLESAMPLE_TYPE,
  SYSTEM_TABLESAMPLE_TYPE,
  BERNOULLI_TABLESAMPLE_TYPE
};

YACC 语义组:

  • sampling_methodTABLESAMPLE 子句中的抽样方法 SYSTEMBERNOULLI 关键字。
enum_window_frame_unitframe_units):窗口函数的单位

枚举类型 enum_window_frame_unit 描述窗口框架单位。

  • WFU_ROWS:行单位
  • WFU_RANGE:范围单位
  • WFU_GROUPS:组单位
// sql/window_lex.h
enum enum_window_frame_unit { WFU_ROWS, WFU_RANGE, WFU_GROUPS };

YACC 语义组:

  • frame_units:窗口函数中指定单位的 ROWSRANGEGROUPS 关键字。
enum_null_treatmentnull_treatment):窗口函数中对 NULL 值的处理方法

枚举类型 enum_null_treatment 描述窗口函数中对 NULL 值的处理方法。

  • NT_NONE:未指定空值处理方式
  • NT_RESPECT_NULLS:考虑空值
  • NT_IGNORE_NULLS:忽略空值
// sql/window_lex.h
enum enum_null_treatment { NT_NONE, NT_RESPECT_NULLS, NT_IGNORE_NULLS };

YACC 语义组:

  • opt_null_treatment:窗口函数中可选的指定 NULL 值处理规则的 RESPECT NULLSIGNORE NULLS 子句。
enum_from_first_lastfrom_first_last):窗口函数中开头方向的选择

枚举类型 enum_from_first_last 描述窗口函数 NTH_VALUE 中开头方向的选择。

  • NFL_NONE:未指定是否从第一个或最后一个开始
  • NFL_FROM_FIRST:从第一个开始
  • NFL_FROM_LAST:从最后一个开始
// sql/window_lex.h
enum enum_from_first_last { NFL_NONE, NFL_FROM_FIRST, NFL_FROM_LAST };

YACC 语义组:

  • opt_from_first_last:窗口函数 NTH_VALUE 中可选的指定从头还是从尾开始的 FROM FIRSTFROM LAST 子句。
delete_option_enumopt_delete_option):DELETE 语句选项

枚举类型 delete_option_enum 描述 MySQL 中 DELETE 语句的选项。

  • DELETE_QUICK:快速删除
  • DELETE_LOW_PRIORITY:低优先级删除
  • DELETE_IGNORE:忽略错误删除
// sql/parser_yystype.h
enum delete_option_enum {
  DELETE_QUICK = 1 << 0,
  DELETE_LOW_PRIORITY = 1 << 1,
  DELETE_IGNORE = 1 << 2
};

YACC 语义组:

  • opt_delete_optionDELETE 语句中删除选项 QUICKLOW_PRIORITYIGNORE 关键字中的零个或一个。
  • opt_delete_options(语义组为 num 类型):DELETE 语句中可选的删除选项 QUICKLOW_PRIORITYIGNORE 关键字中的零个、一个或多个,枚举值按位或合并。
Alter_info::enum_alter_table_lockalter_table_lock):改表结构时的锁级别

枚举类型 enum_alter_table_lock 定义在 Alter_info 中,描述了在执行 ALTER TABLE 操作期间支持的不同锁定级别,这些级别决定了操作的并发性水平。

  • ALTER_TABLE_LOCK_DEFAULT:给定操作支持的最大并发级别。使用此选项时,MySQL 将根据操作类型自动选择最适合的锁定级别以保证最佳的并发性能。

  • ALTER_TABLE_LOCK_NONE:允许并发读和写。如果请求的并发级别不被支持,则返回错误。这是最灵活的选项,允许最大程度的并行操作,但并非所有类型的表变更都支持这种无锁操作。

  • ALTER_TABLE_LOCK_SHARED:只允许并发读操作。如果有写操作尝试访问目标表,则会返回错误。此选项适合于那些不会导致表结构发生重大变化的操作,从而允许其他会话继续查询该表。

  • ALTER_TABLE_LOCK_EXCLUSIVE:阻止所有读写操作。这意味着在进行表变更时,不允许任何其他会话对该表进行访问,直到操作完成。这种锁定级别适用于需要对表进行全面修改的情况,以确保数据的一致性和完整性。

// sql/sql_alter.h
enum enum_alter_table_lock {
  ALTER_TABLE_LOCK_DEFAULT,
  ALTER_TABLE_LOCK_NONE,
  ALTER_TABLE_LOCK_SHARED,
  ALTER_TABLE_LOCK_EXCLUSIVE
};

YACC 语义组:

  • alter_lock_option / alter_lock_option_valueALTER TABLE 语句中指定锁级别的 LOCK 子句。
  • lock_option(语义组为 num 类型):LOCK 语句中指定锁级别的 READWRITEREAD LOCAL 子句。
Alter_info::enum_alter_table_algorithmalter_table_algorithm):改表结构时的算法

枚举类型 enum_alter_table_algorithm 定义在 Alter_info 中,描述了在修改表时使用哪种算法。

  • ALTER_TABLE_ALGORITHM_DEFAULT:如果支持,则使用就地(in-place)算法,否则使用复制(copy)算法。

  • ALTER_TABLE_ALGORITHM_INPLACE:如果支持,则使用就地(in-place)算法,否则返回错误。

  • ALTER_TABLE_ALGORITHM_INSTANT:如果支持,则使用即时(instant)算法,否则返回错误。

  • ALTER_TABLE_ALGORITHM_COPY:如果支持,则使用复制(copy)算法,否则返回错误。

// sql/sql_alter.h
enum enum_alter_table_algorithm {
  ALTER_TABLE_ALGORITHM_DEFAULT,
  ALTER_TABLE_ALGORITHM_INPLACE,
  ALTER_TABLE_ALGORITHM_INSTANT,
  ALTER_TABLE_ALGORITHM_COPY
};

YACC 语义组:

  • alter_algorithm_option / alter_algorithm_option_valueALTER TABLE 语句中指定算法类型的 ALGORITHM 子句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值