2012-02-23 5 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(); 

    } 

}