在方解石中如何用另一个sqlNode修改生成的SQLNode?

in calcite how to modify the generated SQLNode with another sqlNode?

如果我有一个从 sql

解析的 SqlNode node
select id, age from student where id > 5

,我还有另一个 SqlNode subNode 从另一个子条件

解析
id < 20

然后,如何合并这两个以便我可以得到一个从 sql

解析出相同结果的 SqlNode
select id, age from student where id > 5 and id < 20

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

对于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)

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

创建一个class extends SqlBasicVisitor,覆盖visit方法来做这个,主要是visit(SqlCall call)visit(SqlNodeList nodeList)的部分应该被覆盖。