Как изменить сгенерированный SQLNode с другим sqlNode? - PullRequest
0 голосов
/ 24 августа 2018

Если у меня есть узел SqlNode , проанализированный из sql

select id, age from student where id > 5

, и у меня также есть другой SqlNode subNode , проанализированный из другого подусловия

id < 20

Затем, как объединить эти два, чтобы я мог получить SqlNode, получить тот же результат, проанализированный из sql

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

Могу ли я добавить подузел к , где свойство SqlSelect в узле ?Может быть, я могу сначала добавить подусловие, но в более сложных обстоятельствах это будет очень сложно с помощью регулярных выражений.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Для простых случаев хорошо решается.Однако для более сложного случая, если есть вложенный запрос и условие должно быть размещено в правильной позиции, мы должны пройти базовый SqlNode и добавить дополнительное условие в правильное место.

Создать классрасширяет SqlBasicVisitor, для этого необходимо переопределить метод visit, в основном часть visit(SqlCall call) и visit(SqlNodeList nodeList) должна быть переопределена.

0 голосов
/ 14 сентября 2018

Для оператора 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)
...