From c5676edd5e7c7d8ea540249e57735c8b4d9cb518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Tue, 3 Oct 2017 14:34:40 -0500 Subject: [PATCH] Updated Druid_SQL_AST (markdown) --- Druid_SQL_AST.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Druid_SQL_AST.md b/Druid_SQL_AST.md index def5d9b..88bbee0 100644 --- a/Druid_SQL_AST.md +++ b/Druid_SQL_AST.md @@ -15,7 +15,7 @@ class SQLSelect extends SQLObject {} class SQLSelectQueryBlock extends SQLObject {} ``` -## 2.1 常用的SQLExpr有哪些 +## 2.1. 常用的SQLExpr有哪些 ```java package com.alibaba.druid.sql.ast.expr; @@ -40,7 +40,7 @@ class SQLBinaryOpExpr implements SQLExpr { } ``` -## 2.2 常用的SQLStatemment +## 2.2. 常用的SQLStatemment 最常用的Statement当然是SELECT/UPDATE/DELETE/INSERT,他们分别是 ```java package com.alibaba.druid.sql.ast.statement; @@ -64,24 +64,32 @@ class SQLInsertStatement implements SQLStatement { } ``` -## 2.3 SQLTableSource +## 2.3. SQLTableSource ```java class SQLTableSourceImpl extends SQLObjectImpl implements SQLTableSource { String alias; } -// select * from emp where i = 3,这里的from emp是一个SQLExprTableSource +// 例如 select * from emp where i = 3,这里的from emp是一个SQLExprTableSource // 其中expr是一个name=emp的SQLIdentifierExpr class SQLExprTableSource extends SQLTableSourceImpl { SQLExpr expr; } +// 例如 select * from emp e inner join org o on e.org_id = o.id +// 其中left 'emp e' 是一个SQLExprTableSource,right 'org o'也是一个SQLExprTableSource +// condition 'e.org_id = o.id'是一个SQLBinaryOpExpr class SQLJoinTableSource extends SQLTableSourceImpl { SQLTableSource left; SQLTableSource right; JoinType joinType; // INNER_JOIN/CROSS_JOIN/LEFT_OUTER_JOIN/RIGHT_OUTER_JOIN/... SQLExpr condition; } + +// 例如 select * from (select * from temp) a,这里第一层from(...)是一个SQLSubqueryTableSource +SQLSubqueryTableSource extends SQLTableSourceImpl { + SQLSelect select; +} ```