MySQL 源码|113 - 抽象语法树:(5) 枚举类型的节点 ②

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

enum_key_algorithmopt_key_algo):分区算法

枚举类型 enum_key_algorithm 描述 MySQL 的分区键使用的哈希算法。

  • KEY_ALGORITHM_NONE = 0:不使用任何特定的哈希算法。

  • KEY_ALGORITHM_51 = 1:使用 MySQL 5.1 版本的哈希算法(数值字段作为二进制数据进行哈希)。

  • KEY_ALGORITHM_55 = 2:使用 MySQL 5.5 版本的哈希算法(数值字段以 latin1 字节的形式进行哈希处理)。

// sql/partition_info.h
enum class enum_key_algorithm {
  KEY_ALGORITHM_NONE = 0,
  KEY_ALGORITHM_51 = 1,
  KEY_ALGORITHM_55 = 2
};

YACC 语义组:

  • opt_num_subparts:指定分区键哈希算法的可选的 ALGORITHM = 1ALGORITHM = 2 子句。
enum_drop_modeopt_restrict):DROP 语句模式

枚举类型 enum_drop_mode 描述 MySQL 删除操作的行为模式。

  • DROP_DEFAULT:未指定模式,使用默认行为。

  • DROP_CASCADE:级联删除选项。不仅会删除指定的对象,还会删除引用该对象的所有其他对象。

  • DROP_RESTRICT:限制删除选项。如果存在引用指定对象的其他对象,则不允许删除该对象。

// sql/parser_yystype.h
enum enum_drop_mode {
  DROP_DEFAULT,  // mode is not specified
  DROP_CASCADE,  // CASCADE option
  DROP_RESTRICT  // RESTRICT option
};

YACC 语义组:

  • opt_restrictDROP 语句中可选的指定删除模式的 RESTRICTCASCADE 关键字。
enum_jt_columnjt_column_type):JSON_TABLE 的字段类型

枚举类型 enum_jt_column 描述 MySQL 中 JSON_TABLE 的字段类型。

  • JTC_ORDINALITY:表示 JSON 数据中的顺序性列,通常用于表示数组元素的位置。

  • JTC_PATH:路径列类型,用于从 JSON 文档中提取指定路径的数据。

  • JTC_EXISTS:存在性列类型,用于检查特定路径的数据是否存在,并返回布尔值结果。

  • JTC_NESTED_PATH:嵌套路径列类型,允许对 JSON 数据进行深层次的嵌套查询,适用于复杂结构的 JSON 数据。

// sql/table_functions.h
enum class enum_jt_column {
  JTC_ORDINALITY,
  JTC_PATH,
  JTC_EXISTS,
  JTC_NESTED_PATH
};

YACC 语义组:

  • jt_column_typeJSON_TABLE 子句中指定字段类型的可选的 EXISTS 关键字。
enum_orderorder_direction):排序方向

枚举类型 enum_order 描述 MySQL 中的排序方向。

  • ORDER_NOT_RELEVANT:表示排序不相关,通常用于不需要考虑排序的情况。

  • ORDER_ASC:表示升序排列,数据将按照从小到大的顺序进行排序。

  • ORDER_DESC:表示降序排列,数据将按照从大到小的顺序进行排序。

// sql/key_spec.h
enum enum_order : int { ORDER_NOT_RELEVANT = 1, ORDER_ASC, ORDER_DESC };

YACC 语义组:

  • order_direction / opt_ordering_direction:指定排序顺序的可选的 ASCDESC 关键字。
Alter_info::enum_with_validationwith_validation):改表结构的验证策略

枚举类型 Alter_info::enum_with_validation 描述 MySQL 中 ALTER TABLE 语句中的验证策略。

  • ALTER_VALIDATION_DEFAULT:默认值,当语句中未指定时使用。对于分区更改意味着“WITH VALIDATION”,而对于虚拟GC的更改则意味着“WITHOUT VALIDATION”。

  • ALTER_WITH_VALIDATION:表示带验证的更改。在执行表结构变更时,会进行数据有效性的检查。

  • ALTER_WITHOUT_VALIDATION:表示不带验证的更改。在执行表结构变更时,不会进行数据有效性的检查。

// sql/sql_alter.h
enum enum_with_validation {
  ALTER_VALIDATION_DEFAULT,
  ALTER_WITH_VALIDATION,
  ALTER_WITHOUT_VALIDATION
};

YACC 语义组:

  • with_validation / opt_with_validation:在 ALTER 语句指定验证策略的可选的验证子句 WITH VALIDATIONWITHOUT VALIDATION
keytypekey_type):索引类型

枚举类型 key_type 描述 MySQL 中索引类型。

  • KEYTYPE_PRIMARY:主键,用于唯一标识表中的每一行记录。

  • KEYTYPE_UNIQUE:唯一键,确保一列或多列的组合值是唯一的。

  • KEYTYPE_MULTIPLE:复合键,由多个字段组成的键,用于确保这些字段值的组合是唯一的。

  • KEYTYPE_FULLTEXT:全文索引键,用于快速匹配检索大文本中的关键词。

  • KEYTYPE_SPATIAL:空间索引键,用于地理空间数据的存储和查询。

  • KEYTYPE_FOREIGN:外键,用于维护两个表之间的引用完整性。

// sql/key_spec.h
enum keytype {
  KEYTYPE_PRIMARY,
  KEYTYPE_UNIQUE,
  KEYTYPE_MULTIPLE,
  KEYTYPE_FULLTEXT,
  KEYTYPE_SPATIAL,
  KEYTYPE_FOREIGN
};

YACC 语义组:

  • opt_uniqueCREATE INDEX 语句中指定是否唯一键的可选的 UNIQUE 关键字。
  • constraint_key_typeCREATE TABLE 语句和 ALTER TABLE 语句中,定义索引时,指定索引类型的 PRIMARY KEYUNIQUE 字段。
ha_rkey_functionha_rkey_mode):HANDLE 语句中的查找模式

枚举类型 ha_rkey_function 描述 MySQL 中 HANDLE 语句中的字段与查找值之间的关系模式。

  • HA_READ_KEY_EXACT:精确查找第一条记录,否则报错。

  • HA_READ_KEY_OR_NEXT:查找记录或下一条记录。

  • HA_READ_KEY_OR_PREV:查找记录或上一条记录。

  • HA_READ_AFTER_KEY:查找键记录之后的下一条记录。

  • HA_READ_BEFORE_KEY:查找键记录之前的下一条记录。

  • HA_READ_PREFIX:具有相同前缀的键。

  • HA_READ_PREFIX_LAST:具有相同前缀的最后一个键。

  • HA_READ_PREFIX_LAST_OR_PREV:具有相同前缀的最后一个键或前一个键。

  • HA_READ_MBR_CONTAIN:最小边界矩形包含关系。

  • HA_READ_MBR_INTERSECT:最小边界矩形相交关系。

  • HA_READ_MBR_WITHIN:最小边界矩形包含于关系。

  • HA_READ_MBR_DISJOINT:最小边界矩形不相交关系。

  • HA_READ_MBR_EQUAL:最小边界矩形相等关系。

  • HA_READ_NEAREST_NEIGHBOR:最近邻搜索。

  • HA_READ_INVALID:无效的枚举值,总是作为最后一个值。

// include/my_base.h
enum ha_rkey_function {
  HA_READ_KEY_EXACT,           /* Find first record else error */
  HA_READ_KEY_OR_NEXT,         /* Record or next record */
  HA_READ_KEY_OR_PREV,         /* Record or previous */
  HA_READ_AFTER_KEY,           /* Find next rec. after key-record */
  HA_READ_BEFORE_KEY,          /* Find next rec. before key-record */
  HA_READ_PREFIX,              /* Key which as same prefix */
  HA_READ_PREFIX_LAST,         /* Last key with the same prefix */
  HA_READ_PREFIX_LAST_OR_PREV, /* Last or prev key with the same prefix */
  HA_READ_MBR_CONTAIN,         /* Minimum Bounding Rectangle contains */
  HA_READ_MBR_INTERSECT,       /* Minimum Bounding Rectangle intersect */
  HA_READ_MBR_WITHIN,          /* Minimum Bounding Rectangle within */
  HA_READ_MBR_DISJOINT,        /* Minimum Bounding Rectangle disjoint */
  HA_READ_MBR_EQUAL,           /* Minimum Bounding Rectangle equal */
  HA_READ_NEAREST_NEIGHBOR,    /* Nearest Neighbor search */
  HA_READ_INVALID = -1         /* Invalid enumeration value, always last. */
};

YACC 语义组:

  • handler_rkey_modeHANDLE 语句中指定查找模式的运算符。
thr_lock_typelock_type):线程锁类型

枚举类型 thr_lock_type 描述了 MySQL 中的线程锁类型。

  • TL_IGNORE:忽略锁,值为 -1。

  • TL_UNLOCK:解锁任何锁。

  • TL_READ_DEFAULT:仅解析器使用!在 open_tables() 时根据二进制日志格式(SBR/RBR)和表类别(日志表)变为 TL_READTL_READ_NO_INSERT。用于被修改表的语句读取的表。

  • TL_READ:读锁。

  • TL_READ_WITH_SHARED_LOCKS:带有共享锁的读锁。

  • TL_READ_HIGH_PRIORITY:高优先级读锁,允许并发插入。

  • TL_READ_NO_INSERT:读锁,不允许并发插入。

  • TL_WRITE_ALLOW_WRITE:写锁,但允许其他线程进行读/写操作。由 MySQL 中的 BDB 表使用,以标记有人正在读取/写入表。

  • TL_WRITE_CONCURRENT_DEFAULT:仅解析器使用!延迟绑定的 low_priority_flag。在 open_tables() 时变为 thd->insert_lock_default

  • TL_WRITE_CONCURRENT_INSERT:用于并发插入的写锁。如果可以在表上使用并发插入,则允许读取。

  • TL_WRITE_DEFAULT:仅解析器使用!延迟绑定的 low_priority 标志。在 open_tables() 时变为 thd->update_lock_default

  • TL_WRITE_LOW_PRIORITY:写锁,其优先级低于 TL_READ

  • TL_WRITE:普通写锁。

  • TL_WRITE_ONLY:仅写锁,拒绝新的锁请求并报错。

// include/thr_lock.h
enum thr_lock_type {
  TL_IGNORE = -1,
  TL_UNLOCK,
  TL_READ_DEFAULT,
  TL_READ,
  TL_READ_WITH_SHARED_LOCKS,
  TL_READ_HIGH_PRIORITY,
  TL_READ_NO_INSERT,
  TL_WRITE_ALLOW_WRITE,
  TL_WRITE_CONCURRENT_DEFAULT,
  TL_WRITE_CONCURRENT_INSERT,
  TL_WRITE_DEFAULT,
  TL_WRITE_LOW_PRIORITY,
  TL_WRITE,
  TL_WRITE_ONLY
};

YACC 语义组:

  • replace_lock_optionREPLACE 语句中的锁选项。
  • opt_low_priorityUPDATE 语句和 REPLACE 语句中可选的 LOW_PRIORITY 选项。
  • insert_lock_optionINSERT 语句中的锁选项。
  • load_data_lockLOAD 语句中的锁选项。
interval_type intervalinterval_time_st):INTERVAL 子句中的间隔类型

官方文档:MySQL 参考手册 - 11.5 Expressions - Temporal Intervals

枚举类型 interval_type 描述 INTERVAL 子句中的间隔类型。

  • INTERVAL_YEAR:年份间隔。

  • INTERVAL_QUARTER:季度间隔。

  • INTERVAL_MONTH:月份间隔。

  • INTERVAL_WEEK:周间隔。

  • INTERVAL_DAY:天间隔。

  • INTERVAL_HOUR:小时间隔。

  • INTERVAL_MINUTE:分钟间隔。

  • INTERVAL_SECOND:秒间隔。

  • INTERVAL_MICROSECOND:微秒间隔。

  • INTERVAL_YEAR_MONTH:年月间隔。

  • INTERVAL_DAY_HOUR:天小时间隔。

  • INTERVAL_DAY_MINUTE:天分钟间隔。

  • INTERVAL_DAY_SECOND:天秒间隔。

  • INTERVAL_HOUR_MINUTE:小时分钟间隔。

  • INTERVAL_HOUR_SECOND:小时秒间隔。

  • INTERVAL_MINUTE_SECOND:分钟秒间隔。

  • INTERVAL_DAY_MICROSECOND:天微秒间隔。

  • INTERVAL_HOUR_MICROSECOND:小时微秒间隔。

  • INTERVAL_MINUTE_MICROSECOND:分钟微秒间隔。

  • INTERVAL_SECOND_MICROSECOND:秒微秒间隔。

  • INTERVAL_LAST:最后一个间隔,用于标记枚举结束。

// include/my_time.h
enum interval_type {
  INTERVAL_YEAR,
  INTERVAL_QUARTER,
  INTERVAL_MONTH,
  INTERVAL_WEEK,
  INTERVAL_DAY,
  INTERVAL_HOUR,
  INTERVAL_MINUTE,
  INTERVAL_SECOND,
  INTERVAL_MICROSECOND,
  INTERVAL_YEAR_MONTH,
  INTERVAL_DAY_HOUR,
  INTERVAL_DAY_MINUTE,
  INTERVAL_DAY_SECOND,
  INTERVAL_HOUR_MINUTE,
  INTERVAL_HOUR_SECOND,
  INTERVAL_MINUTE_SECOND,
  INTERVAL_DAY_MICROSECOND,
  INTERVAL_HOUR_MICROSECOND,
  INTERVAL_MINUTE_MICROSECOND,
  INTERVAL_SECOND_MICROSECOND,
  INTERVAL_LAST
};

YACC 语义组:

  • interval / interval_time_stINTERVAL 子句或 CAST 子句中的间隔关键字。
index_hint_typeindex_hint):索引提示子句类型

枚举类型 index_hint_type 描述 MySQL 中的索引提示子句类型。

  • INDEX_HINT_IGNORE:忽略索引提示,数据库优化器将不使用指定的索引。

  • INDEX_HINT_USE:使用索引提示,建议数据库优化器使用指定的索引,但不是强制性的。

  • INDEX_HINT_FORCE:强制使用索引提示,要求数据库优化器必须使用指定的索引。

// sql/table.h
enum index_hint_type { INDEX_HINT_IGNORE, INDEX_HINT_USE, INDEX_HINT_FORCE };

YACC 语义组:

  • index_hint_type:DQL 语句中的索引提示子句中的 FORCEIGNORE 关键字。
fk_optionm_fk_option):索引处理数据变化时的处理选项

索引类型 fk_option 描述 MySQL 索引对数据变化时的处理选项。

  • FK_OPTION_UNDEF:未定义选项,表示没有指定任何外键动作。

  • FK_OPTION_RESTRICT:限制操作,如果外键相关的记录存在,则不允许删除或更新父表记录。

  • FK_OPTION_CASCADE:级联操作,父表中的更改(如更新或删除)会自动传播到相关子表记录。

  • FK_OPTION_SET_NULL:设为空操作,当父表记录被删除或更新时,子表中外键字段将被设置为 NULL。

  • FK_OPTION_NO_ACTION:不执行任何动作,与 RESTRICT 类似,但在检查约束之前不会执行任何动作。

  • FK_OPTION_DEFAULT:默认操作,使用数据库系统的默认行为处理外键约束。

// sql/key_spec.h
enum fk_option {
  FK_OPTION_UNDEF,
  FK_OPTION_RESTRICT,
  FK_OPTION_CASCADE,
  FK_OPTION_SET_NULL,
  FK_OPTION_NO_ACTION,
  FK_OPTION_DEFAULT
};

YACC 语义组:

  • delete_option:DDL 语句中,索引对数据变化时的处理选项。
PT_joined_table_typejoin_type):关联类型

枚举类型 PT_joined_table_type 描述 MySQL 中的关联类型。

  • JTT_INNER:内连接,值为 0x01。

  • JTT_STRAIGHT:直连,值为 0x02。

  • JTT_NATURAL:自然连接,值为 0x04。

  • JTT_LEFT:左连接,值为 0x08。

  • JTT_RIGHT:右连接,值为 0x10。

  • JTT_STRAIGHT_INNER:直连内连接,JTT_STRAIGHT | JTT_INNER 的组合。

  • JTT_NATURAL_INNER:自然内连接,JTT_NATURAL | JTT_INNER 的组合。

  • JTT_NATURAL_LEFT:自然左连接,JTT_NATURAL | JTT_LEFT 的组合。

  • JTT_NATURAL_RIGHT:自然右连接,JTT_NATURAL | JTT_RIGHT 的组合。

// sql/parser_yystype.h
enum PT_joined_table_type {
  JTT_INNER = 0x01,
  JTT_STRAIGHT = 0x02,
  JTT_NATURAL = 0x04,
  JTT_LEFT = 0x08,
  JTT_RIGHT = 0x10,

  JTT_STRAIGHT_INNER = JTT_STRAIGHT | JTT_INNER,
  JTT_NATURAL_INNER = JTT_NATURAL | JTT_INNER,
  JTT_NATURAL_LEFT = JTT_NATURAL | JTT_LEFT,
  JTT_NATURAL_RIGHT = JTT_NATURAL | JTT_RIGHT
};

YACC 语义组:

  • outer_join_type / natural_join_type / inner_join_typeJOIN 子句中的关联类型。
xa_option_wordsxa_option_type):XA 事务选项

枚举类型 xa_option_words 描述 MySQL 的 XA 事务选项。

  • XA_NONE:无选项,表示没有特定的XA事务选项。

  • XA_JOIN:加入选项,用于指示当前事务应加入一个已存在的XA事务。

  • XA_RESUME:恢复选项,用于恢复之前挂起的XA事务。

  • XA_ONE_PHASE:单阶段提交选项,指示使用单阶段提交协议完成XA事务。

  • XA_SUSPEND:挂起选项,用于暂时挂起当前XA事务。

  • XA_FOR_MIGRATE:迁移选项,特指与事务迁移相关的XA操作。

// sql/xa.h
enum xa_option_words {
  XA_NONE,
  XA_JOIN,
  XA_RESUME,
  XA_ONE_PHASE,
  XA_SUSPEND,
  XA_FOR_MIGRATE
};

YACC 语义组:

  • opt_join_or_resumeXA BEGINXA START 语句中的 XA 事务选项。
  • opt_suspendXA END 语句中的 XA 事务选项。
  • opt_one_phaseXA COMMIT 语句中的 XA 事务选项。
Int_typeint_type):整数类字段类型

枚举类型 Int_type 描述 MySQL 中整数类字段的类型:

// sql/parser_yystype.h
enum class Int_type : ulong {
  INT = MYSQL_TYPE_LONG,
  TINYINT = MYSQL_TYPE_TINY,
  SMALLINT = MYSQL_TYPE_SHORT,
  MEDIUMINT = MYSQL_TYPE_INT24,
  BIGINT = MYSQL_TYPE_LONGLONG,
};

YACC 语义组:

  • int_type:整数类的字段类型。
Numeric_typenumeric_type):浮点类字段的类型

枚举类型 Numeric_type 描述 MySQL中浮点类字段的类型:

// sql/parser_yystype.h
enum class Numeric_type : ulong {
  DECIMAL = MYSQL_TYPE_NEWDECIMAL,
  FLOAT = MYSQL_TYPE_FLOAT,
  DOUBLE = MYSQL_TYPE_DOUBLE,
};

YACC 语义组:

  • real_type / numeric_type:小数、浮点数类的字段类型。
Show_cmd_typeshow_cmd_type):SHOW 语句模式

枚举类型 Show_cmd_type 用于指定 SHOW 命令的不同模式。

  • STANDARD:标准显示模式,仅展示基本信息。
  • FULL_SHOW:完整显示模式,展示详细信息而不进行扩展。
  • EXTENDED_SHOW:扩展显示模式,提供额外的信息字段。
  • EXTENDED_FULL_SHOW:完全扩展显示模式,结合了完整与扩展显示的特点,提供最详尽的信息。
// sql/parser_yystype.h
enum class Show_cmd_type {
  STANDARD,
  FULL_SHOW,
  EXTENDED_SHOW,
  EXTENDED_FULL_SHOW
};

YACC 语义组:

  • opt_show_cmd_typeSHOW 语句中可选的模式指定关键字。
Acl_typeacl_type):REVOKE 语句移除权限类型

枚举类型 Acl_type 用于指定 REVOKE 语句移除权限类型。

  • TABLE:表,与数据库表相关的访问控制。
  • FUNCTION:函数,与数据库函数相关的访问控制,等同于 TYPE_ENUM_FUNCTION
  • PROCEDURE:存储过程,与数据库存储过程相关的访问控制,等同于 TYPE_ENUM_PROCEDURE
// sql/sql_lex.h
enum class Acl_type {
  TABLE = 0,
  FUNCTION = TYPE_ENUM_FUNCTION,
  PROCEDURE = TYPE_ENUM_PROCEDURE,
};

YACC 语义组:

  • opt_acl_typeREVOKE 语句中可选的移除权限类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

长行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值