java jsqlparse_SQL解析器 JSqlParser

Published: 2019-05-25 21:18:00

tags: Flink

语法分析生成器

-- JavaCC

介绍:JavaCC是一个词法分析生成器和语法分析生成器

TOP-DOWN:JavaCC产生自顶向下的语法分析器,而YACC等工具则产生的是自底向上的语法分析器。做词法分析

输入文件是一个词法和语法的规范文件.jj,文件中词法和语法规则都写在其中

在PARSER_BEGIN和PARSER_END之间定义语法解析器的主类,这是整个解析程序的入口,

里面主要有一些引用的包和类以及一个main方法(其他的方法由JavaCC生成

Apache Calcite是一个动态数据管理框架,它具备很多典型数据库管理系统的功能,比如SQL 解析、SQL校验、SQL查询优化、SQL生成以及数据连接查询等,基于JavaCC。

-- ANTLR(ANother Tool for Language Recognition)

两种遍历树的机制:

监听器 Listener extends BaseErrorListener extends SqlBaseBaseListener

访问器 Vistor pattern

SQL解析器

01.JSqlParser It is built using JavaCC

net.sf.jsqlparser.parser.CCJSqlParserUtil

The method CCJSqlParserManager.parse returns a class implementing Statement

which can be used to navigate the structure representing the SQL statement

Jsqlparser对SQL的遍历采用了 VISITOR 模式, 遍历SQL语句比较方便

应用场景: 状态过滤、权限过滤,表和字段血缘管理

02. Apache Calcite是一个动态数据管理框架,它具备很多典型数据库管理系统的功能,比如SQL 解析、SQL校验、SQL查询优化、SQL生成以及数据连接查询等,基于JavaCC。

3. fdb-sql-parser

4. 正则匹配的方法

开发

01.Maven依赖

com.github.jsqlparser

jsqlparser

1.2

02.源码

文件: JSqlParserCC.jjt

/**

* It represents an expression like "(" expression ")"

*/

public class Parenthesis implements Expression {}

public interface Expression {void accept(ExpressionVisitor expressionVisitor);}

/**

* The core of a "SELECT" statement (no UNION, no ORDER BY)

*/

public class PlainSelect implements SelectBody {

public Expression getWhere() {return where;}

……}

public interface SelectBody {void accept(SelectVisitor selectVisitor);}

public class Select implements Statement {}

public interface Statement {void accept(StatementVisitor statementVisitor);}

03.具体概念

Statement SQL语句

Select,Create,Drop,Insert,Delete等,它们作为Statement实现类,均实现accept方法

Expression

ExpressionVisitor

Visitor有StatementVisitor,SelectVisitor,ExpressionVisitor,SelectItemVisitor,FromItemVisitor

CNFConverter :This class handles the conversion from a normal expression tree into the CNF form.

SelectDeParser :

A class to de-parse (that is, tranform from JSqlParser hierarchy into a string)

// de为英语前缀,前缀de-来自拉丁语,意为"away from",de-还表示"除去"、"取消"以及"否定"、"非"、"相反"的意思

其他

Trie树,又叫做前缀树或者是字典树,是一种有序的树

Observer - 观察者模式

Listener - 监听模式

Visitor - 访问者

访问操作独立出来变成一个新的类,当我们需要增加访问操作的时候,直接增加新的类,原来的代码不需要任何的改变。

把结构和数据分开,编写一个访问者,去访问数据结构中的元素,然后把对各元素的处理全部交给访问者类

Visitor 声明visit() ConcreteVisitor 实现visit()

Element 声明accept() ConcreteElement accept方法的实现

ObjectStructure

参考

https://www.programcreek.com/java-api-examples/?class=net.sf.jsqlparser.statement.select.PlainSelect&method=getGroupByColumnReferences

JSqlParser使用示例 https://zacard.net/2016/05/10/JSqlParser-examples/

https://www.programcreek.com/java-api-examples/index.php?api=net.sf.jsqlparser.parser.CCJSqlParserUtil

SQL解析(Jsqlparser) http://itsolife.com/2014/02/02/2014-02-02-JavaJ2EE-SQL_Java--SQL%E8%A7%A3%E6%9E%90Jsqlparser/

jsqlParse分析SQL https://www.jianshu.com/p/988229bb82b7

使用Jsqlparser从复杂SQL语句中提取表名 http://www.findsrc.com/java/detail/8640

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值