zoukankan      html  css  js  c++  java
  • mysql 函数在源码中的定义

    大牛那海蓝蓝

     

    MySQL提供了较为丰富的SQL语句,用以支持MySQL提供的主要功能。在数据库内部,MySQL又是怎么知道自己能够处理哪些对象、处理哪些事情的?

    如果我们输入一条SQL语句,MySQL可能报告语法错误或对象不存在等错误提示,这些提示,大致可以分为2类,一类是针对解析用户命令的如语法错误,一类是针对语义检查如说对象不存在的。其实还有其他类型如权限等检查,只是这些与本文无关,且简单故忽略莫执著于此处。

    这2类错误提示,其实可以对应到MySQL的2个重要文件上,这是从源码的角度来看的。

    首先,sql_yacc.yy文件,帮MySQL解决了怎么知道处理哪些事情。

    其次,item.h这个文件,帮MySQL解决了怎么知道处理哪些对象。

    本文从代码的角度,简单解析item.h这个文件。

    一 从文件名看MySQL可以处理的对象

    MySQL可以处理的各种对象、以及对象间的关系,可以从如下文件认识。

    1 item.h: 总的对象定义类,定义了'Item'类作为总的对象类,此后,本文件中定义了许多子类,来丰富和发展MySQL可以处理的对象。但此类继承自'Parse_tree_node'类,使得对象和词法语法解析关联起来,这个不细述。

    2 item_cmpfunc.h:定义了'Item_bool_func'类,继承自'Item_int_func'类,而Item_int_func继承自Item_func,Item_func类继承自Item类。'Item_bool_func'类主要用于支持比较操作,如等于、大于、小于、IN、BETWEEN、是否为NULL等。

    3 item_create.h:用户自定义函数的创建接口。

    4 item_func.h:定义了 Item_func类,继承自Item类,用以支持各种函数操作。如求绝对值、求长度、取余等等。本文件中也定义了许多子类,来丰富和发展MySQL可以处理的对象。

    5 item_geofunc.h:空间对象处理相关函数。

    6 item_inetfunc.h:定义IPv4、IP6的处理。

    7 item_row.h:行值函数定义,用以支持类似如下操作:

    (a, b, c) > (10, 10, 30)

    (a, b, c) = (select c, d, e, from t1 where x=12)

    (a, b, c) IN ((1,2,2), (3,4,5), (6,7,8)

    (a, b, c) IN (select c, d, e, from t1)

    8 item_strfunc.h:定义了字符类型的处理函数(主要是字符类型, 还有一些其他类型,如make_set函数的处理但返回值是字符类型)。如一些字符集相关的处理、去左空格、字符串替换等。

    9 item_subselect.h:尽管子查询可以被优化,即需要对子查询内部的对象分解,但是,MySQL把子查询当作一个对象,相关辅助处理子查询的对象也在这个文件中定义。

    10 item_sum.h:定义聚集函数的处理。包括MIN和MAX,但通常这2函数个是利用索引进行优化的。

    11 item_timefunc.h:定义时间和日期的处理函数。

    12 item_xmlfunc.h:定义XML类型数据的处理函数。

    特别注意,本文中,说“定义时间和日期的处理函数”中的函数一词,除了有编程中的函数的含义外,更多的指得是“功能”,即数据库提供处理时间和日期的能力。其他类似。

  • 相关阅读:
    Max Sum of Max-K-sub-sequence(单调队列)
    Matrix Swapping II(求矩阵最大面积,dp)
    重温世界杯(贪心)
    Pie(求最小身高差,dp)
    Matrix(多线程dp)
    Python 实现自动导入缺失的库
    分布式系统session一致性解决方案
    数据结构 【链表】
    【数字图像处理】gamma变换
    【数字图像处理】顶帽变换和底帽变换
  • 原文地址:https://www.cnblogs.com/zengkefu/p/5641054.html
Copyright © 2011-2022 走看看