java - 使用 Facebook presto 解析器

标签 java facebook parsing

我正在尝试使用presto-parser 。我需要知道的是如何分析和提取创建的 Statement 的查询正文:

SqlParser SQL_PARSER = new SqlParser();
Statement statement = SQL_PARSER.createStatement(query);

似乎没有任何方法可以从 Statement getters/setters 中获取它。我调试了 Statement 对象,我可以从调试 View 中看到我需要获取的值。

参见:

enter image description here

我需要获取由 SqlParser 提取的 select、from、where、groupBy、orderBy 和 limit 值。

最佳答案

从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

关于java - 使用 Facebook presto 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449768/

相关文章:

java - 如何在 Java 中写入锁定文件?

android - Android中Facebook Graph Api Search的实现

java - 捕获 NumberFormatException 是一种不好的做法吗?

parsing - LALR(1) 解析器中的冲突解决

Javascript 获取两个日期之间的时差

java - 在正确的目录中执行java类

java - java中多线程的机制

android - 使用应用通知 facebook 为我的应用邀请新用户

java - 在方法体内抛出异常并在之后捕获它

javascript - 什么是 "Javascript Bootloader"?