0

如果我有一个从 sql 解析的 SqlNode节点

select id, age from student where id > 5

,并且我还有另一个从另一个子条件解析的SqlNode 子节点

id < 20

然后,如何合并这两个,以便我可以得到一个 SqlNode 具有从 sql 解析的相同结果

select id, age from student where id > 5 and id < 20

我可以将 subNode 附加到 node 中 SqlSelect 的where属性吗?可能我一开始可以附加子条件,但在更复杂的情况下,使用正则表达式将非常困难。

4

2 回答 2

0

对于AND运算符,您可以使用SqlUtil.andExpressions组合两个条件,如下所示:

SqlUtil.andExpressions(con1, con2);

此外,您可以使用SqlStdOperatorTable.AND来构建AND表达式:

// list contains the operators, such as id > 5 and id < 20
SqlStdOperatorTable.AND.createCall(SqlParserPos.ZERO, list)
于 2018-09-14T01:04:24.577 回答
0

对于简单的情况,它很好地解决了。但是,对于更复杂的情况,如果有嵌套查询并且条件应该放在正确的位置,我们应该遍历基本SqlNode并将额外的条件附加到正确的位置。

创建一个类 extends SqlBasicVisitor,重写visit方法来做到这一点,主要是应该重写的visit(SqlCall call)部分visit(SqlNodeList nodeList)

于 2018-09-14T08:54:09.630 回答