2016-05-24 2 views
0

Я хотел бы расширить JSQLParser так, чтобы он принял команду оракула IIF. Следующий STMT производит исключение, потому что функция использует выражение:JSQLParser и Oracles LNNVL (схожие с IIF)

SELECT LNNVL(A > 10, 1, 0) FROM TBL_NAME;

Вы не возражаете, давая мне намеки, как изменить JJ-файл?

Изменения

IIF заменен LNNVL. LNNVL действителен только в условиях WHERE, но не вызывает исключения.

+0

почему не использовать случай, вместо того, чтобы: 'выбрать случай, когда> 10, то 1 еще 0 конец от tbl_name;' не –

+0

нет 'iif' в Oracle –

+0

Существует' iif' function: https://docs.oracle.com/cd/E12032_01/doc/epm.921/html_techref/maxl/dml/funcs/iif.htm – Markus

ответ

0

Использование JSqlParser на GitHub ваш старт будет производство на

function() 

Здесь вы должны изменить JJT - файл, потому что эта версия JSqlParser делает какой-то ASTNode здания. jj - Файл получен.

В настоящее время существует SimpleExpressionList принял

"(" [ [<K_DISTINCT> { retval.setDistinct(true); } | <K_ALL> { retval.setAllColumns(true); }] (expressionList=SimpleExpressionList() | "*" { retval.setAllColumns(true); }) ] ")" 

Это принимает только выражение, но никаких условий. Вы могли бы сделать вариант из SimpleExpressionList (возможно SimpleExpressionOrConditionList) и

ExpressionList SimpleExpressionConditionList(): 
{ 
    ExpressionList retval = new ExpressionList(); 
    List<Expression> expressions = new ArrayList<Expression>(); 
    Expression expr = null; 
} 
{ 
    (expr=SimpleExpression() | expr=Condition()) 

    { expressions.add(expr); } ("," (expr=SimpleExpression() | expr=Condition()) { expressions.add(expr); })* 
    { 
     retval.setExpressions(expressions); 
     return retval; 
    } 
} 

Это не проверяется!

Но это должна быть возможность. Выдвижные запросы приветствуются: https://github.com/JSQLParser/JSqlParser

+0

Благодарим вас за ответ. Я посмотрю на предстоящую неделю. На данный момент это выглядит очень многообещающе. – Markus

+0

В 'test/resources/net/sf/jsqlparser/test/oracle-tests/function05.sql' есть sql-скрипт, содержащий' LNNVL', который также ожидает сравнения – Markus

+0

Существует много неудачных тестов с использованием этого набора Oracle oracle , На данный момент 135 успешно проанализированы. Но если кто-то будет реализовывать, как я предложил, этот тест должен преуспеть. – wumpz

Смежные вопросы