码迷,mamicode.com
首页 > 数据库 > 详细

druid SQL parser入门

时间:2018-10-24 00:56:24      阅读:1178      评论:0      收藏:0      [点我收藏+]

标签:http   数据   lex   应用   visitor   需求   wal   rtp   你知道   

简介

druid

druid是alibaba在github上开源的项目,它是一个组件库,包含了数据库连接池、Sql parser等组件。

wiki地址:https://github.com/alibaba/druid/wiki/%E9%A6%96%E9%A1%B5

DruidDataSource号称是Java语言中最全面最好的连接池,理论上支持所有的JDBC驱动的数据源(实际测试并未把所有数据源测试一遍)。我们对他的了解也更多地是在如何将它作为连接池应用在程序中。

SQL parser

而SQL parser是druid的重要组成部分,SQL parser在druid中承担着重要责任,如:SQL解析、防御SQL注入、格式化、分库分表等。

SQL parser wiki地址:https://github.com/alibaba/druid/wiki/SQL-Parser

 

SQL parser的结构

在说如何去使用SQL parser之前我们很有必要先来了解一下SQL parser的结构,它主要分为三个部分:

1、parser:SQL解析器

2、ast:抽象语法树

3、visitor:访问者

parser

parser是一个SQL解析器,它主要的作用就是将文本转换为ast。parser包含两个部分:

1、lexer:lexer做词法解析;

2、parser:parser做语法解析。

 举个例子:你看到一句英文She is a girl,那么你首先要做词法解析获得She,is,a,girl这个四个单词,然后做主谓宾的语法解析,然后你知道了它表达的意思。

解析SQL也是差不多的,你需要通过lexer知道是有哪些词,然后这些次构成了什么语法。而经过词法、语法解析以后输出的结果就是抽象语法树。

ast

ast全称是abstract syntax tree,中文直译抽象语法树,ast是parser的输出结果,所以我们很有必要知道ast是什么样的,也从而知道了parser做了一堆解析式为了得到什么。

具体参考官方文档druid_sql_ast:https://github.com/alibaba/druid/wiki/Druid_SQL_AST

visitor

SQLparser采用了访问者模式,如果你了解访问者模式那么应该比较轻易能理解visitor的作用,它的作用就是对外提供访问ast的接口,通过实现不同的visitor可以根据不同的需求来提供不同的访问接口。

druid内置的访问接口有如下几种:

1、OutputVisitor:用来把ast输出为字符串;

2、WallVisitor:分析SQL语义,防止SQL注入;

3、ParameterizedOutputVisitor:合并未参数化的SQL进行统计;

4、EvalVisitor:对SQL表达式进行求值;

5、ExportParameterVisitor:提取SQL中的变量参数;

6、SchemaStatVisitor:用来统计SQL中使用的表、字段、过滤条件、排序表达式、分组表达式;

7、SQL格式化:druid内置了基于语义的格式化功能。

当然,除了内置的操作,你也可以自定义visitor。

 

druid SQL parser入门

标签:http   数据   lex   应用   visitor   需求   wal   rtp   你知道   

原文地址:https://www.cnblogs.com/lay2017/p/9840394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!