0

我想扩展 JSQLParser 以便它接受IIForacle 的命令。以下 stmt 产生异常,因为该函数使用表达式:

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

你介意给我提示如何更改 jj 文件吗?

变化

IIF替换为LNNVL. LNNVL仅在 WHERE 条件下有效,但不会引发异常。

4

1 回答 1

0

在 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

于 2016-05-26T05:46:26.997 回答