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

Java 在方解石中,如何使用另一个SQLNode修改生成的SQLNode?,java,sql,apache-calcite,Java,Sql,Apache Calcite,如果我从sql中解析了一个SqlNode节点 select id, age from student where id > 5 select id, age from student where id > 5 and id < 20 ,我还从另一个子条件解析了另一个SqlNode子节点 id < 20 id5且id5和id

如果我从sql中解析了一个SqlNode节点

select id, age from student where id > 5
select id, age from student where id > 5 and id < 20
,我还从另一个子条件解析了另一个SqlNode子节点

id < 20
id<20
然后,如何合并这两个,这样我就可以得到一个SqlNode,并从sql中解析出相同的结果

select id, age from student where id > 5
select id, age from student where id > 5 and id < 20
从id>5且id<20的学生中选择id、年龄

我可以将子节点附加到节点中SqlSelect的where属性吗?也许我可以先附加subcondition,但在更复杂的情况下,使用regex将非常困难

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

SqlUtil.andExpressions(con1, con2);
此外,您还可以使用
SqlStdOperatorTable.和
来构建
表达式:

// list contains the operators, such as id > 5 and id < 20
SqlStdOperatorTable.AND.createCall(SqlParserPos.ZERO, list)
//列表包含运算符,如id>5和id<20
SqlStdOperatorTable.AND.createCall(sqlparserps.ZERO,列表)

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

创建一个扩展类,重写
visit
方法来完成此操作,主要是
visit(SqlCall调用)
visit(SqlNodeList nodeList)
的部分应该被重写