PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询二:SQL解析为parsetree
话说查询“selectcname, comp from test1, test2 where test1.id=test2.id;” 发送到服务器端,走查询分支exec_simple_query,先调用start_xact_command初始化了事务管理相关对象和资源,接着调用pg_parse_query,通过Lex和Yacc对传入SQL语句进行词法语法解析,生成解析树。
下面是解析SQL语句的调用序列图。
Postgres服务进程简查之开始事务调用序列图
通过Lex和Yacc对传入SQL语句进行词法语法解析,主要是把SQL语句里的目前字段、DISTINCT子句、FROM子句、WHERE子句、GROUP BY子句、HAVING子句、ORDER BY子句等解析到各自对应的结构中,组织成各自的数据结构,最后组成解析树parsetree。分析完后对应SQL语句“selectcname, comp from test1, test2 where test1.id=test2.id;”的解析树结构如下图:
例子中SQL语句对应的解析树结构
?Lex and YACC primer/HOWTO http://tldp.org/HOWTO/Lex-YACC-HOWTO.html ,短短20页,足够让你建立自信,一个上午足够了吧。
?
?
------------
转载请注明出处,来自博客:
blog.csdn.net/beiigang
beigang.iteye.com