2017-06-12 82 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'方法。 –