2012-02-23 6 views
1

어떻게 JSQLParser를 사용하여 함수 호출과 필드 이름을 구별 할 수 있습니까?JSQLParser를 사용하여 SQL에서 함수 호출 인식

예를 들어 SELECT COUNT(*) FROM db.table 쿼리는 COUNT(*)을 함수 호출이 아닌 필드 이름으로 구문 분석합니다.

COUNT(*)을 함수 호출로 표시하도록 SQL 구문 분석을 변경하려면 어떻게해야합니까?

감사합니다,

최대

+0

지연된 답변 : 최신 버전 (0.9.4)에서는 기능이 올바르게 인식됩니다. – Markus

답변

5

아래 코드는 내 당신이 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(); 

    } 

}