2017-06-12 86 views
0

我有,我想知道哪些已经在SQL string.For实例被选择的列的使用情况下,如果SQL是这样的:
SELECT name, age*5 as intelligence FROM bla WHERE bla=bla
然后,解析上面的字符串后,我只想输出为:name, intelligence
首先,有没有可能通过方解石?
任何其他选项也欢迎。阿帕奇方解石查找选定列在SQL字符串

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

回答

2

这是方解石肯定是可行的。您将要创建的SqlParser实例,并解析查询开始:

SqlParser parser = SqlParser.create(query) 
SqlNode parsed = parser.parseQuery() 

从那里,你可能拥有的最成功实施SqlVisitor接口。您需要先找到一个SqlSelect实例,然后通过调用getSelectList的每个元素上的访问来访问每个正在选择的表达式。

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

+0

可你刚才分析SQL表达式的一部分?例如解析'SUM(金额)/ Count(id)'。我可以制作虚拟的sql,但它会很好,只要能够解析由sql函数构成的有效sql表达式即可。 – nir

+1

对于这种情况,您应该可以使用'SqlParser'的'parseExpression'方法。 –