從sql字符串中,您可以通過丟棄Statement
來獲得Query
(它擴展了Statement)。 Query.getQueryBody
返回QueryBody
,您可以將其轉換爲QuerySpecification
(它擴展QueryBody
)。從QuerySpecification
,你現在可以得到你要找的。這裏有一個簡單的例子:
public class PrestoParserTest {
public static void main(String[] args) {
SqlParser parser = new SqlParser();
String sql = "select * from xyz where x=y group by x order by y limit 10";
Query query = (Query)parser.createStatement(sql);
QuerySpecification body = (QuerySpecification)query.getQueryBody();
Select select = body.getSelect();
System.out.println("Columns = " + select.getSelectItems());
System.out.println("From = " + body.getFrom().get());
Optional<Expression> where = body.getWhere();
System.out.println("Where = " + where.get());
System.out.println("Group by = " + body.getGroupBy());
System.out.println("Order by = " + body.getOrderBy());
System.out.println("Limit = " + body.getLimit().get());
}
}
運行此返回:
Columns = [*]
From = Table{xyz}
Where = ("x" = "y")
Group by = ["x"]
Order by = [SortItem{sortKey="y", ordering=ASCENDING, nullOrdering=UNDEFINED}]
Limit = 10
約「UPDATE」語句,很快解析器似乎怎麼不支持呢? – xybrek 2015-04-06 08:07:29
通過代碼庫的粗略瀏覽,它看起來不受支持。這是可能的,因爲引擎並不是真的意味着這一點,但從完整性的角度來看,如果是這樣的話,我仍然會感到驚訝。 – 2015-04-06 22:22:15
根據[ANTLR定義文件]不支持'UPDATE'(https://github.com/facebook/presto/blob/master/presto-parser/src/main/antlr4/com/facebook/presto/sql/解析器/ SqlBase.g4)。 – 2016-03-16 20:46:44