This is experimental functionality, and as such subject to change. Use at your own risk!
Listening Replacer
Supported by ❌ Open Source Edition ✅ Express Edition ✅ Professional Edition ✅ Enterprise Edition
This replacer doesn't replace anything on its own, but helps debug things from other replacers. For example, a Replacer that removes redundant NOT(NOT(x)) expressions:
// The input condition
Condition c = ctx.parser().parseCondition("not not not book.id != 1");
// The replacer doing the replacement
Replacer r = Replacer.of(q -> {
if (q instanceof QOM.Not n1 && n1.$arg1() instanceof QOM.Not n2)
return n2.$arg1();
else if (q instanceof QOM.Not n1 && n1.$arg1() instanceof QOM.Ne<?> n2)
return n2.$arg1().eq((Field) n2.$arg2());
else
return q;
});
// A proxy to the above replacer, doing some logging
r = Replacers.listening(r, (p1, p2) -> System.out.println("Replacing: " + p1 + " => " + p2));
// The application of the replacement
QueryPart result = c.$replace(r);
System.out.println("Result: " + result);
The above now prints each replacement that the depth first replacement algorithm applies to your expression tree, bottom-up:
Replacing: not (book.id <> 1) => book.id = 1 Replacing: not (not (book.id = 1)) => book.id = 1 Result: book.id = 1
Feedback
Do you have any feedback about this page? We'd love to hear it!