PlainSelect и SetOperationList в анализаторе jsql

В чем разница между PlainSelect и SetOperationList в парсере jsql

2 ответа

PlainSelect представляет простой оператор выбора, например:

SELECT * FROM mytable

в то время как SetOperationList представляет операцию набора, используя несколько элементов PlainSelect( https://en.wikipedia.org/wiki/Set_operations_(SQL)).

SELECT a FROM mytable
UNION
SELECT b FROM mytable2

Понижение не в порядке, из-за пропущенных javadocs для этого класса.

По сути, при их анализе в JSQLParser следует помнить, что если это SetOperationList (т.е. с использованием UNION INTERSECT и т. д.), его нужно анализировать по-другому.

selectTableStatement.getSelectBody().getClass().getSimpleName().equals("PlainSelect")является ключевым

Ошибка, возникающая при анализе их как одинаковых,net.sf.jsqlparser.statement.select.SetOperationList cannot be cast to net.sf.jsqlparser.statement.select.PlainSelect

      private static List<String> extractSelectTableSelectItems(Select selectTableStatement){
    List<String> fields = new ArrayList<>();

    if(selectTableStatement.getSelectBody().getClass().getSimpleName().equals("PlainSelect")) {

        PlainSelect plainSelect = (PlainSelect) selectTableStatement.getSelectBody();
        List<SelectItem> selectItems = plainSelect.getSelectItems();
        for(SelectItem selectItem : selectItems) {
            fields.add(selectItem.toString());
        }
    } else if(selectTableStatement.getSelectBody().getClass().getSimpleName().equals("SetOperationList")) {
        
        SetOperationList setOperationList = (SetOperationList) selectTableStatement.getSelectBody();
        List<SelectBody> selectBodyList = setOperationList.getSelects();
        for(SelectBody selectBody: selectBodyList) {
            PlainSelect plainSelect = (PlainSelect) selectBody;
            List<SelectItem> selectItems = plainSelect.getSelectItems();
            for(SelectItem selectItem : selectItems) {
                fields.add(selectItem.toString());
            }
        }
    }
    
    return fields;
}
Другие вопросы по тегам