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