0

我试图找到从用 JSQLParser 解析的查询中删除表达式(例如,条件)的最简单方法。

假设我有以下查询(这里没有真正的逻辑):

select a,b,c from table where a > 1 and c > 4 and a = b

假设,我想删除其中一个条件,比如“a = b”,最好的方法是什么?

我使用以下代码来追踪在“EqualTo”表达式中有两列的条件,但现在我手头有表达式对象,我不确定从 where 子句中删除它的最佳方法是什么。

subselect.getWhere().accept(new ExpressionVisitorAdapter() {
      @Override
      public void visit(EqualsTo expr) {
           if (expr.getLeftExpression() instanceof Column && expr.getRightExpression() instanceof Column &&
                  ((Column)expr.getLeftExpression()).getTable() != ((Column)expr.getRightExpression()).getTable()) {
               // Now what?
           }
      }
});
4

1 回答 1

1

最简单的可能性是,如果您已经实现了一个访问者来将此表达式设置为

1 = 1

这将通过类似的东西来完成

expr.setLeftExpression(new LongValue(1));
expr.setRightExpression(new LongValue(1));

如果你想从你的 sql 中完全删除它,你必须实现某种堆栈来跟踪你的 sql 以前访问过的部分,以获取那些你有你的表达式要从中删除的对象。但是,如果您考虑括号、计算等,这并非微不足道。

恕我直言,保持简单并尝试简单的替换。

于 2017-09-28T10:55:03.693 回答