我想扩展 JSQLParser 以便它接受IIF
oracle 的命令。以下 stmt 产生异常,因为该函数使用表达式:
SELECT LNNVL(A > 10, 1, 0) FROM TBL_NAME;
你介意给我提示如何更改 jj 文件吗?
变化
IIF
替换为LNNVL
. LNNVL
仅在 WHERE 条件下有效,但不会引发异常。
我想扩展 JSQLParser 以便它接受IIF
oracle 的命令。以下 stmt 产生异常,因为该函数使用表达式:
SELECT LNNVL(A > 10, 1, 0) FROM TBL_NAME;
你介意给我提示如何更改 jj 文件吗?
变化
IIF
替换为LNNVL
. LNNVL
仅在 WHERE 条件下有效,但不会引发异常。
在 github 上使用JSqlParser你的开始将是生产
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