Получить метаданные таблицы / столбца из результата парсера JOOQ - PullRequest
0 голосов
/ 09 декабря 2018

Используя API синтаксического анализатора JOOQ, я могу проанализировать следующий запрос и получить карту параметров из результирующего объекта Query.Исходя из этого, я могу сказать, что есть один параметр, и он называется «что-то».

Однако я не смог выяснить, как определить, что параметр «что-то» назначенстолбец с именем «BAZ», и этот столбец является частью таблицы «BAR».

Есть ли у API синтаксического анализатора способ получить метаданные таблицы / столбца, связанные с каждым параметром?

String sql = "SELECT A.FOO FROM BAR A WHERE A.BAZ = :something";

DSLContext context = DSL.using...
Parser parser = context.parser();
Query query = parser.parseQuery(sql);


Map<String, Param<?>> params = query.getParams();

1 Ответ

0 голосов
/ 10 декабря 2018

Начиная с jOOQ 3.11, SPI, который можно использовать для доступа к внутреннему дереву выражений, - это VisitListener SPI, который необходимо прикрепить к context.configuration() перед анализом.Затем он будет вызываться всякий раз, когда вы пересекаете это дерево выражений, например, по вашему вызову query.getParams().

Однако, есть немало ручного слежения, которое необходимо выполнить.Например, VisitListener будет видеть только A.BAZ как ссылку на столбец, не зная непосредственно, что A является переименованной таблицей BAR.Вам придется следить за таким переименованием самостоятельно, когда вы посещаете выражение BAR A.

...