做外贸是哪里网站,2345网址导航app,什么是网络营销产生的观念基础,网站制作 中企动力公司前篇介绍了MySQL如何从SQL语句转换成一个内部对象。本文是前篇的延续#xff0c;将更加详细的介绍WHERE语句对应的Item对象。1. Item对象MySQL InternalMySQL Internals Manual较为详细的介绍了Item对象。Item对象经常被称作thingamabob(A thingamabob is a noun …前篇介绍了MySQL如何从SQL语句转换成一个内部对象。本文是前篇的延续将更加详细的介绍WHERE语句对应的Item对象。1. Item对象MySQL InternalMySQL Internals Manual较为详细的介绍了Item对象。Item对象经常被称作thingamabob(A thingamabob is a noun used to describe items that either you cant remember the name of or that dont actually exist.)。Item是一个类每一个Item实例都(1)代表一个SQL语句里的对象;(2)有取值;(3)有数据类型指针。下面列出的的SQL相关的对象都是一个Item对象或者继承至Item(1)一段字符; (2)数据表的某列; (3)一个局部或全局变量; (4)一个存储过程的变量; (5) 一个用户参数; (6)一个函数/存储过程(这包括运算符、||、、like等) 。例如下面的SQL语句SELECT UPPER(column1) FROM t WHERE column2 x;MySQL需要一系列的Item来描述上面的SQL一个描述column1对象描述UPPER函数的对象还有描述WHERE语句的几个相关的Item对象。Item对象可以理解做一个特殊的数据对象。MySQL的Item对象定义在./sql/item.h中其子类都定义在./sql/item*.h中例如item_cmpfunc.h, item_func.h。在MySQL Server层代码中有大量操作和使用Item对象的代码建议阅读的时候慢慢理解。2. WHERE对应的Item对象本节将介绍MySQL中如何使用Item对象描述一个WHERE条件。下面从简单到复杂逐个介绍2.1 WHERE id 1 and id 32.2 WHERE id 1 or id 102.3 WHERE id 0 and id 2 or id 20验证(gdb) p ((Item_cond *)conds)-functype()$5 Item_func::COND_OR_FUNC打印WHERE(也就是Item_cond_or) List中的第一个元素(gdb) p ((Item_cond *)(((Item_cond *)conds)-list-first-info))-functype()$17 Item_func::COND_AND_FUNC第二个元素(gdb) p ((Item_cond *)(((Item_cond *)conds)-list-first-next-info))-functype()$18 Item_func::EQ_FUNC2.4 WHERE (id 10 or … ) and id 15WHERE (id 10 or id 3 ) and id 15(gdb) p ((Item_cond_or *)((Item_cond_and *)conds)-list-first-info)-list-first$39 (list_node *) 0x7facfc005698(gdb) p ((Item_cond_or *)((Item_cond_and *)conds)-list-first-info)-list-first-info$40 (void *) 0x7facfc005150(gdb) p (Item *)$40$41 (Item *) 0x7facfc005150(gdb) p ((Item *)$40)-type()$42 Item::FUNC_ITEM(gdb) p ((Item_func *)$40)-functype()$43 Item_func::EQ_FUNC(gdb) p ((Item_func_eq *)$40)-arg_count$44 2(gdb) p ((Item_func_eq *)$40)-args[0]$45 (Item *) 0x7facfc004fe02.5 WHERE id 15 or (id 1 and id 10)(gdb) p ((Item *)conds)-type()$47 Item::COND_ITEM(gdb) p ((Item_cond *)conds)-functype()$48 Item_func::COND_OR_FUNC(gdb) p ((Item_cond_or *)conds)-list-first-next-info$56 (void *) 0x7facfc0058b8(gdb) p ((Item *)$56)-type()$57 Item::COND_ITEM(gdb) p ((Item_cond *)$56)-functype()$58 Item_func::COND_AND_FUNC2.6 WHERE id 15 or ( … and ( … or … ))WHERE id 15 or ( id 1 and ( id 4 or id 0 ))3. Item对象的继承关系图3.1 Item_bool_func的继承关系图3.2 完整Item对象继承关系图完整的Item继承关系图非常复杂下面是缩略图(完整图1.8MB谨慎打开)这是一幅庞大关系图,使用doxygengraphviz绘制(如何使用doxygen如何配置doxygen生成MySQL文档)。参考MySQL source codeMySQL Internal Manual觉得文章有用立即和朋友一起 共学习 共进步猜您喜欢