我可以使用JOOQ作为SQL解析器吗?

问题描述 投票:7回答:2

我正在尝试用Java解析SELECT语句。我对JOOQ很熟悉,并希望能够使用它。我知道它没有明确地设计为SQL解析器 - 它实际上远远不止于此,所以我想可能有一种方法可以使用它的内部解析器来解析SELECT查询。

我看到了一些有关如何使用访问者模式访问JOOQ内部部件的信息,但我需要使用类似树的结构在查询内部导航,该结构将允许单独访问查询的每个部分。我不想对所有用例使用访问者模式。

这可能吗?我该怎么做呢?

java jooq
2个回答
0
投票

从jOOQ 3.11开始,虽然您确实可以使用VisitListener提取表达式树并对内部进行一些调整(主要取决于通过反射的内部类型),但您目前无法做到。将来可以解决这个问题,因为表达式树可以通过公共API访问(并且与SQL生成逻辑完全分离),但还没有任何承诺。


2
投票

A full-fledged SQL parser is available from DSLContext.parser() and from DSLContext.parsingConnection() (see the manual's section about parsing connections for the latter).

SQL Parsing API页面给出了这个简单的例子:

ResultQuery<?> query = 
DSL.using(configuration)
   .parser()
   .parseResultQuery("SELECT * FROM (VALUES (1, 'a'), (2, 'b')) t(a, b)");

parseResultQuery是单个SELECT查询所需的方法,如果您有多个查询,请使用parse(String)

© www.soinside.com 2019 - 2024. All rights reserved.