Распознавание вызовов функций в SQL с JSQLParser - PullRequest
1 голос
/ 24 февраля 2012

Как отличить вызовы функций и имена полей с помощью JSQLParser?

Например, запрос SELECT COUNT(*) FROM db.table анализирует COUNT(*) как имя поля, а не вызов функции.

Чтомне нужно сделать, чтобы изменить синтаксический анализ SQL, чтобы показать COUNT(*) как вызов функции?

Спасибо,

Макс

1 Ответ

6 голосов
/ 24 февраля 2012

У вас нет примера кода, поэтому приведенный ниже код основан на моем предположении, что вы хотите показать, что count (*) на самом деле является только вызовом функции.

import java.io.StringReader;

import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.Function;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import net.sf.jsqlparser.statement.select.PlainSelect;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.select.SelectExpressionItem;

public class MySQLParser
{
    CCJSqlParserManager parserManager = new CCJSqlParserManager();

    public MySQLParser() throws JSQLParserException
    {
        String statement = "SELECT COUNT(*) FROM db.table1";
        PlainSelect plainSelect = (PlainSelect) ((Select) parserManager.parse(new StringReader(statement))).getSelectBody();        
        System.out.format("%s is function call? %s",
                plainSelect.getSelectItems().get(0),
                ((Function)((SelectExpressionItem) plainSelect.getSelectItems().get(0)).getExpression()).isAllColumns());
    }
    public static void main(String[] args) throws JSQLParserException
    {

        new MySQLParser();

    }

}
...