用mysql源码进行SQL解析

 

   Mysql是通过yacc进行SQL语句解析的,这里介绍一下如何使用mysql的源码进行SQL语句解析。由于Mysql的源代码注释比较少,而且缺少资料,所有些地方研究不够深入。

1        Filed介绍

MYSQLFiled有以下几种类型:

enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,

            MYSQL_TYPE_SHORT,  MYSQL_TYPE_LONG,

            MYSQL_TYPE_FLOAT,  MYSQL_TYPE_DOUBLE,

            MYSQL_TYPE_NULL,   MYSQL_TYPE_TIMESTAMP,

            MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,

            MYSQL_TYPE_DATE,   MYSQL_TYPE_TIME,

            MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR,

            MYSQL_TYPE_NEWDATE,

            MYSQL_TYPE_ENUM=247,

            MYSQL_TYPE_SET=248,

            MYSQL_TYPE_TINY_BLOB=249,

            MYSQL_TYPE_MEDIUM_BLOB=250,

           MYSQL_TYPE_LONG_BLOB=251,

            MYSQL_TYPE_BLOB=252,

            MYSQL_TYPE_VAR_STRING=253,

            MYSQL_TYPE_STRING=254,

            MYSQL_TYPE_GEOMETRY=255

};

下图列出几种常用的Filed子类及其关系

2        ITEM介绍

MYSQL中,有以下ITEM大类型:

FIELD_ITEM, FUNC_ITEM, SUM_FUNC_ITEM, STRING_ITEM, INT_ITEM, REAL_ITEM, NULL_ITEM, VARBIN_ITEM, COPY_STR_ITEM, FIELD_AVG_ITEM, DEFAULT_VALUE_ITEM, PROC_ITEM,COND_ITEM, REF_ITEM, FIELD_STD_ITEM, FIELD_VARIANCE_ITEM, INSERT_VALUE_ITEM, SUBSELECT_ITEM, ROW_ITEM, CACHE_ITEM, TYPE_HOLDER, PARAM_ITEM

其中许多ITEM还有小类,如Item_func有如下小类型:

UNKNOWN_FUNC,EQ_FUNC,EQUAL_FUNC,NE_FUNC,LT_FUNC,LE_FUNC, GE_FUNC,GT_FUNC,FT_FUNC, LIKE_FUNC,NOTLIKE_FUNC,ISNULL_FUNC,ISNOTNULL_FUNC, COND_AND_FUNC, COND_OR_FUNC, COND_XOR_FUNC, BETWEEN, IN_FUNC, INTERVAL_FUNC, ISNOTNULLTEST_FUNC, SP_EQUALS_FUNC, SP_DISJOINT_FUNC,SP_INTERSECTS_FUNC, SP_TOUCHES_FUNC,SP_CROSSES_FUNC,SP_WITHIN_FUNC, SP_CONTAINS_FUNC,SP_OVERLAPS_FUNC, SP_STARTPOINT,SP_ENDPOINT,SP_EXTERIORRING, SP_POINTN,SP_GEOMETRYN,SP_INTERIORRINGN, NOT_FUNC, NOT_ALL_FUNC, NOW_FUNC, VAR_VALUE_FUNC

下图是对所用的主要的ITEM子类以及关系:

 

3        FIELDITEM的关系

通过Item类中的tmp_table_field_from_field_type函数将一个Item类转化为一个Filed类返回。并不是所有的Item类返回的Filed都有意义,下面列举几个有意义的转化:

Item_int ->Field_longlong

Item_real->Field_double

Item_string->Field_string

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值