diff --git a/Druid_SQL_AST.md b/Druid_SQL_AST.md index 173a4ad..201e0a0 100644 --- a/Druid_SQL_AST.md +++ b/Druid_SQL_AST.md @@ -9,21 +9,13 @@ package com.alibaba.druid.sql.ast; interface SQLObject {} interface SQLExpr extends SQLObject {} interface SQLStatement extends SQLObject {} + +interface SQLTableSource extends SQLObject {} +class SQLSelect extends SQLObject {} +class SQLSelectQueryBlock extends SQLObject {} ``` -## 2.1 常用的SQLStatemment -最常用的Statement当然是SELECT/UPDATE/DELETE/INSERT,他们分别是 -```java -package com.alibaba.druid.sql.ast.statement; - -class SQLSelectStatement implements SQLStatement {} -class SQLUpdateStatement implements SQLStatement {} -class SQLDeleteStatement implements SQLStatement {} -class SQLInsertStatement implements SQLStatement {} -``` - - -## 2.2 常用的SQLExpr有哪些 +## 2.1 常用的SQLExpr有哪些 ```java package com.alibaba.druid.sql.ast.expr; @@ -33,7 +25,9 @@ class SQLIdentifierExpr implements SQLExpr {} // A.ID = 3 这里的A.ID是一个SQLPropertyExpr class SQLPropertyExpr implements SQLExpr {} -// 比如 ID = 3 这是一个SQLBinaryOpExpr,left是ID (SQLIdentifierExpr),right是3 (SQLIntegerExpr) +// 比如 ID = 3 这是一个SQLBinaryOpExpr +// left是ID (SQLIdentifierExpr) +// right是3 (SQLIntegerExpr) class SQLBinaryOpExpr implements SQLExpr { SQLExpr left; SQLExpr right; @@ -41,6 +35,31 @@ class SQLBinaryOpExpr implements SQLExpr { } ``` +## 2.2 常用的SQLStatemment +最常用的Statement当然是SELECT/UPDATE/DELETE/INSERT,他们分别是 +```java +package com.alibaba.druid.sql.ast.statement; + +class SQLSelectStatement implements SQLStatement { + SQLSelect select; +} +class SQLUpdateStatement implements SQLStatement { + SQLExprTableSource tableSource; + List items; + SQLExpr where; +} +class SQLDeleteStatement implements SQLStatement { + SQLTableSource tableSource; + SQLExpr where; +} +class SQLInsertStatement implements SQLStatement { + SQLExprTableSource tableSource; + List columns; + SQLSelect query; +} +``` + + # 3. 怎样产生AST ## 3.1 通过SQLUtils产生List<SQLStatement>