2

How can I distinguish function calls and field names using JSQLParser?

For example, the query SELECT COUNT(*) FROM db.table parses COUNT(*) as a field name and not a function call.

What do I need to do to change the SQL parsing to show COUNT(*) as a function call?

Thanks,

Max

Shiva
  • 6,677
  • 4
  • 36
  • 61
max
  • 2,346
  • 4
  • 26
  • 34

1 Answers1

6

You do not have sample code, so the code below is based on my guessing that you want to show that the count(*) is actually a function call only.

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();

    }

}
Jasonw
  • 5,054
  • 7
  • 43
  • 48