表情包制作网站,福安做网站最好,php软件安装,wordpress 打分一、sqlParse组成
Druid SQL Parser分三个模块#xff1a;
- Parser
- AST
- Visitor
1.1 Parser
parser是将输入文本转换为ast#xff08;抽象语法树#xff09;#xff0c;parser有包括两个部分#xff0c;Parser和Lexer#xff0c;其中Lexer实现词法分析#x…
一、sqlParse组成
Druid SQL Parser分三个模块
- Parser
- AST
- Visitor
1.1 Parser
parser是将输入文本转换为ast抽象语法树parser有包括两个部分Parser和Lexer其中Lexer实现词法分析Parser实现语法分析。
1.2 AST
AST是Abstract Syntax Tree的缩写也就是抽象语法树。AST是parser输出的结果。这也是语法树的精髓了sql解析本质上就是把sql转为 ast语法树拿到这个语法树后我们就能做很多事了遍历也好加点修改也好都可以在ast上完成。 二、java代码编写 /** * 根据sql由获取sql的表名 * param sql * param dbType 数据库类型 可以用JdbcConstants.MYSQL * return Map别名, 表名 */ public static MapString /* 别名 */, String /* 表名 */ getTables(String sql,DBType dbType) { ListSQLStatement stmtList SQLUtils.parseStatements(sql, dbType.name()) MapString, String tables new HashMapString, String(); for (SQLStatement stmt : stmtList) { SchemaStatVisitor visitor SQLUtils.createSchemaStatVisitor(dbType); stmt.accept(visitor); for (SQLName originalTable : visitor.getOriginalTables()) { if (originalTable instanceof SQLIdentifierExpr) { String tableName ((SQLIdentifierExpr) originalTable).getName(); SQLObject parent originalTable.getParent(); String alias null; if (parent instanceof SQLPropertyExpr) { alias ((SQLPropertyExpr) parent).getResolvedTableSource().getAlias(); } else if (parent instanceof SQLExprTableSource) { alias ((SQLExprTableSource) parent).getAlias(); } if (null alias) { alias tableName; } tables.put(alias, tableName); } } } return tables; } 三、调试结果 对于MLSQL JDBC的表列信息解析依赖于Druid因此语法支持受限于Druid目前Druid的支持如下
数据库DMLDDLodps完全支持完全支持mysql完全支持完全支持postgresql完全支持完全支持oracle支持大部分支持大部分sql server支持常用的支持常用的db2支持常用的支持常用的hive支持常用的支持常用的
四、源码支持DB类型
目前我用的Druid是1.2.18目前源码支持的dbType类型如下