Skip to content

Druid_SQL_AST

高铁 edited this page Oct 3, 2017 · 26 revisions

1. 什么是AST

AST是abstract syntax tree的缩写,也就是抽象语法树。和所有的Parser一样,Druid Parser会生成一个抽象语法树。

2. 在Druid SQL Parser中有哪些AST节点类型

在Druid中,AST节点类型主要包括SQLObject、SQLExpr、SQLStatement三种抽象类型。

package com.alibaba.druid.sql.ast;

public interface SQLObject {}
public interface SQLExpr extends SQLObject {}
public interface SQLStatement {}

2.1 常用的SQLStatemment

最常用的Statement当然是SELECT/UPDATE/DELETE/INSERT,他们分别是

package com.alibaba.druid.sql.ast.statement;

public class SQLSelectStatement implements SQLStatement {}
public class SQLUpdateStatement implements SQLStatement {}
public class SQLDeleteStatement implements SQLStatement {}
public class SQLInsertStatement implements SQLStatement {}

3. 怎样产生AST

3.1 通过SQLUtils产生List<SQLStatement>

import com.alibaba.druid.util.JdbcConstants;

String dbType = JdbcConstants.MYSQL;
List<SQLStatement> statementList = SQLUtils.parseStatements(sql, dbType);

3.2 通过SQLUtils产生SQLExpr

String dbType = JdbcConstants.MYSQL;
SQLExpr expr = SQLUtils.toSQLExpr("id=3", dbType);
Clone this wiki locally