JSQLParser и Oracles LNNVL (сродни IIF)

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

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

Вы не против дать мне подсказку, как изменить jj-файл?

изменения

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

1 ответ

Используя JSqlParser на GitHub, вы начали бы производство

function()

Здесь вы должны изменить jjt- File, потому что эта версия 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

Другие вопросы по тегам