druid.sql设计理念
SQL解析可以分为三层:语句解析->表达式解析->词法解析。对应的主要类分别是
Lexer:用来解析出每个词的词义
SQLExprParser:用来解析出不同表达式的含义
SQLStatementParser:多个表达式和词组成完整的语句
SQLStatement表示一条SQL语句,我们知道常见的SQL语句有CRUD四种操作,所以SQLStatement会有四种主要实现类
SQLSelectStatement
SQLUpdateStatement
SQLDeleteStatement
SQLInsertStatement
SQLStatement.java :
exprParser:表达式解析类
SQLCreateTableParser:建表语句解析类,因为建表语句比较复杂,所以单拿出来。其他DDL语句都在本类SQLStatement中解析
parseValuesSize:记录解析结果集大小
keepComments:是否保留注释
parseCompleteValues:是否全部解析完成
sql.ast.statement中 SQLSelect 和SQLSelectQueryBlock 区别:
SQLSelect是树形结构,对于程序来说不好解读这种结构。
SQLSelectQueryBlock是结构化的数据,里面的成员都是数组和列表,程序更好解读这种结构。
一般select语法解析时先把数据解析到SQLSelectQueryBlock中。再装入树形结构SQLSelect。