Apache Calcite在SQL字符串中查找选定的列

Sau*_*abh 1 java sql-parser apache-calcite

我有一个用例,我想知道在SQL
SELECT name, age*5 as intelligence FROM bla WHERE bla=bla
字符串中选择的列,例如,如果SQL是这样的:那么在解析上面的String之后,我只希望输出是:name, intelligence
首先,是否可以通过方解石?
也欢迎任何其他选择。

PS:在实际在数据库上运行查询之前,我想知道这一点。

Mic*_*ior 5

方解石绝对可以做到这一点。您首先要创建一个实例SqlParser并解析查询:

SqlParser parser = SqlParser.create(query)
SqlNode parsed = parser.parseQuery()
Run Code Online (Sandbox Code Playgroud)

从那里,您可能会最成功地实现该SqlVisitor接口。您首先要找到一个SqlSelect实例,然后通过对的每个元素调用visit来访问被选择的每个表达式getSelectList

从那里开始,如何进行将取决于您要支持的表达式的复杂性。但是,递归访问所有SqlCall节点及其操作数,然后收集SqlIdentifier您看到的任何值,可能就足够了。

  • 对于这种情况,您应该能够使用SqlParser的parseExpression方法。 (2认同)