MySQL源码 解析器
%token SELECT_SYM select:
select_init
{
LEX *lex= Lex;
lex->sql_command= SQLCOM_SELECT;
}; select_item_list:
select_item_list ',' select_item
| select_item
| '*'
{
THD *thd= YYTHD;
Item *item= new (thd->mem_root) Item_field(&thd->lex->current_select->context,NULL, NULL, "*");
if (item == NULL)
MYSQL_YYABORT;
if (add_item_to_list(thd, item))
MYSQL_YYABORT;
(thd->lex->current_select->with_wild)++;
}; where_clause:
/* empty */ { Select->where= ; }
| WHERE
{
Select->parsing_place= IN_WHERE;
}
expr
{
SELECT_LEX *select= Select;
select->where= $;
select->parsing_place= NO_MATTER;
if ($)
$->top_level_item();
};
(gdb) print select_lex->table_list
$ = {
<Sql_alloc> = {<No data fields>},
members of SQL_I_List<TABLE_LIST>:
elements = ,
first = 0x8ca04818,
next = 0x8ca04818
(gdb) print select_lex->where->type()
$ = Item::FUNC_ITEM
(gdb) p select_lex->where)->args))->type()
$ = Item::FIELD_ITEM
(gdb) p select_lex->where)->args++))->type()
$ = Item::INT_ITEM
结构如下:
where
|-->FUNC_ITEM
|-->FIELD_ITEM("id")
|-->INT_ITEM()
3. item_list
(gdb) print *(Item_field*)(select_lex->item_list->first->info)
name = 0x8ca04758 "id",
(gdb) print *(Item_field*)(select_lex->item_list->first->next->info)
name = 0x8cb047f8 "name",
结构如下:
item_list:
|-->Item_field("id")
|-->Item_field("name")
MySQL源码 解析器的更多相关文章
- MySQL源码解析之执行计划
MySQL源码解析之执行计划 MySQL执行计划介绍 MySQL执行计划代码概览 MySQL执行计划总结 一.MySQL执行计划介绍 在MySQL中,执行计划的实现是基于JOIN和QEP_TAB这两个 ...
- MySQL源码 优化器
完成了sql的解析过程后,开始进入优化器: 调用的流程分为: mysql_select: JOIN::prepare: JOIN::optimize: ...
- 【vuejs深入三】vue源码解析之二 htmlParse解析器的实现
写在前面 一个好的架构需要经过血与火的历练,一个好的工程师需要经过无数项目的摧残. 昨天博主分析了一下在vue中,最为基础核心的api,parse函数,它的作用是将vue的模板字符串转换成ast,从而 ...
- springMVC源码解析--ViewResolver视图解析器执行(三)
之前两篇博客springMVC源码分析--ViewResolver视图解析器(一)和springMVC源码解析--ViewResolverComposite视图解析器集合(二)中我们已经简单介绍了一些 ...
- springMVC 拦截器源码解析
前言:这两天学习了代理模式,自然想到了 springmvc 的 aop 使用的就是动态代理,拦截器使用的就是 jdk 的动态代理.今天看了看源码,记录一下.转载请注明出处:https://www.cn ...
- MySQL的JDBC驱动源码解析
原文: MySQL的JDBC驱动源码解析 大家都知道JDBC是Java访问数据库的一套规范,具体访问数据库的细节有各个数据库厂商自己实现 Java数据库连接(JDBC)由一组用 Java 编程语言 ...
- Google guava cache源码解析1--构建缓存器(1)
此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.guava cache 当下最常用最简单的本地缓存 线程安全的本地缓存 类似于ConcurrentHas ...
- 第二章 Google guava cache源码解析1--构建缓存器
1.guava cache 当下最常用最简单的本地缓存 线程安全的本地缓存 类似于ConcurrentHashMap(或者说成就是一个ConcurrentHashMap,只是在其上多添加了一些功能) ...
- AngularJS源码解析4:Parse解析器的详解
$ParseProvider简介 此服务提供者也是angularjs中用的比较多的,下面我们来详细的说下这个provider. function $ParseProvider() { var cach ...
随机推荐
- c语言学习之基础知识点介绍(十五):函数的指针
一.函数的指针的介绍 /* 函数指针: 函数的指针,本质上一个指针 指向函数的指针,就是一个函数指针. 回忆:我们写的源代码编译成二进制的指令集,一串交给CPU执行的指令 先存在内存里面,然后CPU读 ...
- WebSocket使用教程 - 带完整实例
http://my.oschina.net/u/1266171/blog/357488 什么是WebSocket?看过html5的同学都知道,WebSocket protocol 是HTML5一种新的 ...
- uglifyjs 压缩js
第一步 安装nodejs dos下执行 node -v npm -v
- 【收集整理】Linux下的目录讲解
Linux下的目录介绍:在Linux系统中,一切东西都是存放在一个唯一的“虚拟文件系统”中的,这个“虚拟文件系统”是树状的结构以一个根目录开始.以文件来表示所有逻辑实体和非逻辑实体,逻辑实体指文件和目 ...
- Jquery EasyUI中treegrid的中右键菜单和一般按钮同时绑定事件时的怪异事件
做个项目使用jquery easyui来做前端,也许是对此不是很熟悉,总是发现一些不可理解的事件. 主要源代码如下: <script type="text/javascript&qu ...
- 『奇葩问题集锦』Malformed lock file found: /var/cache/dnf/metadata_lock.pid.
Malformed lock file found: /var/cache/dnf/metadata_lock.pid.Ensure no other dnf process is running a ...
- PHP 插入排序法
<?php function insertSort($arr) { //区分 哪部分是已经排序好的 //哪部分是没有排序的 //找到其中一个需要排序的元素 //这个元素 就是从第二个元素开始,到 ...
- 阿里云服务器CentOS 5.7(64位)安装配置LAMP服务器(Apache+PHP5+MySQL)
一.快速安装Apache+PHP5+MySql ----------------------------------------------------- 补充:由于163的yum源上只有php5.1 ...
- C++指针例
int num1=15;int num2=22; 状态一://const int * 不可以通过指针改变值,但是可以改变指向的变量//const int *p1=&num1;//std::c ...
- #ifndef#define#endif的用法-b
The special operator defined is used in #if and #elif expressions to test whether a certain name is ...