Как получить иерархическую структуру и положение токенов SQL-запросов с помощью JSqlparser?

avatar
sswns
9 августа 2021 в 02:25
43
0
0

Я хочу, чтобы любой запрос SQL анализировался иерархически, как это делает CCJSqlParserUtil.parseAST. Но если я не ошибаюсь, эта функция поддерживает только несколько видов SQL-запросов, таких как запрос на выборку. Когда я применил его для запросов на обновление, это не сработало.

Я думаю, что другие способы анализа в JSqlparser не могут помочь, потому что мне также нужно знать позиции всех токенов.

Это фрагмент, который может показать, что я хочу сделать с этим синтаксическим анализатором:

String sql ="UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'\n"
            + "WHERE LastName = 'Wilson';"; // even nicer if multiple queries can be parsed without being splitted
final StringBuilder b = new StringBuilder(sql);
SimpleNode node = (SimpleNode) CCJSqlParserUtil.parseAST(sql);
node.dump("*");

node.jjtAccept(
    new CCJSqlParserDefaultVisitor() {
      @Override
      public Object visit(SimpleNode node, Object data) {
        logger.info(
            node.jjtGetValue()
                + ","
                + node.jjtGetFirstToken().beginLine
                + ","
                + (node.jjtGetFirstToken().beginColumn - 1));
        logger.info(
            node.jjtGetValue()
                + ","
                + node.jjtGetLastToken().endLine
                + ","
                + (node.jjtGetLastToken().endColumn - 1));
        return super.visit(node, data);
      }
    },
    null);
Источник
wumpz
9 августа 2021 в 12:04
0

Просто задайте вопрос на github, какой токен также требует подключения AST. Мы обсудим это улучшение там.

Ответы (0)