SQL Parser是Druid的一个重要组成部分,Druid内置使用SQL Parser来实现防御SQL注入(WallFilter)、合并统计没有参数化的SQL(StatFilter的mergeSql)、SQL格式化、分库分表。
1. 各种语法支持
Druid的sql parser是目前支持各种数据语法最完备的SQL Parser。目前对各种数据库的支持如下:
数据库 |
DML |
DDL |
odps |
完全支持 |
完全支持 |
mysql |
完全支持 |
完全支持 |
oracle |
大部分 |
支持大部分 |
postgresql |
完全支持 |
支持大部分 |
sql server |
支持常用的 |
支持常用的ddl |
db2 |
支持常用的 |
支持常用的ddl |
druid还缺省支持sql-92标准的语法,所以也部分支持其他数据库的sql语法。
2. 性能
Druid的SQL Parser是手工编写,性能是antlr、javacc之类工具生成的数倍甚至10倍以上。
SELECT ID, NAME, AGE FROM USER WHERE ID = ?
这样的SQL,druid parser处理大约是5us,也就是每秒中可以处理20万次。
测试代码看这里:
package com.alibaba.druid.benckmark.sql;
import java.util.List;
import junit.framework.TestCase;
import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import com.alibaba.druid.sql.test.TestUtils; import com.alibaba.druid.util.Utils;
public class MySqlPerfTest extends TestCase {
private String |