JSQLParser гель все выбранные элементы из запроса и подзапроса - PullRequest
0 голосов
/ 15 апреля 2020

Я хочу получить все выбранные элементы из запроса и подзапроса

по этой ссылке, { ссылка } Я могу получить выбранные элементы из основного запроса.

Для подобного подзапроса - "SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500) ", мне придется перейти к selectbody -> where -> rightItemList -> again selectbody -> finally items.

Кроме того, может быть больше вложенных выборок. Как мне добиться этого как с подзапросом / подзапросами, так и без подзапроса

1 Ответ

1 голос
/ 22 апреля 2020

Это простое расширение указанной вами ссылки.

Для обхода дерева разбора JSqlParser предоставляет шаблон посетителя . Здесь я повторно использую TablesNamesFinder , который использует для ваших целей полную реализацию посещения всех узлов. Теперь не важно насколько глубоко ваши sqls вложены. За каждый вызов перезаписанного метода вы получаете основной SQL или суб-выбор вашего SQL.

public static void main(String args[]) throws JSQLParserException {
    String sql = "SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)";

    Select select = (Select) CCJSqlParserUtil.parse(sql);

    TablesNamesFinder tablesNamesFinder = new TablesNamesFinder() {
        @Override
        public void visit(PlainSelect plainSelect) {
            System.out.println("plainselect -> " + plainSelect.toString());
            for (SelectItem item : plainSelect.getSelectItems()) {
                System.out.println(item.toString());
            }
            super.visit(plainSelect);
        }
    };

    tablesNamesFinder.getTableList(select);
}
...