删除 JSqlParser 中的表达式
Remove an expression in JSqlParser
我正在尝试找到从使用 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?
}
}
});
最简单的可能性是,如果您已经实现了访问者以将此表达式设置为
1 = 1
这将通过类似
的方式完成
expr.setLeftExpression(new LongValue(1));
expr.setRightExpression(new LongValue(1));
如果你想从你的 sql 中完全删除它,你必须实现某种堆栈来跟踪你的 sql 之前访问过的部分,以获取你拥有的那些对象要从中删除的表达式。但如果你考虑括号、计算等,这就不是微不足道的了。
恕我直言,保持简单并尝试简单的替换。
我正在尝试找到从使用 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?
}
}
});
最简单的可能性是,如果您已经实现了访问者以将此表达式设置为
1 = 1
这将通过类似
的方式完成expr.setLeftExpression(new LongValue(1));
expr.setRightExpression(new LongValue(1));
如果你想从你的 sql 中完全删除它,你必须实现某种堆栈来跟踪你的 sql 之前访问过的部分,以获取你拥有的那些对象要从中删除的表达式。但如果你考虑括号、计算等,这就不是微不足道的了。
恕我直言,保持简单并尝试简单的替换。