@Override
    public Expression visitLikePredicate(LikePredicate node, Context<C> context) {
      if (!context.isDefaultRewrite()) {
        Expression result =
            rewriter.rewriteLikePredicate(node, context.get(), ExpressionTreeRewriter.this);
        if (result != null) {
          return result;
        }
      }

      Expression value = rewrite(node.getValue(), context.get());
      Expression pattern = rewrite(node.getPattern(), context.get());
      Optional<Expression> rewrittenEscape =
          node.getEscape().map(escape -> rewrite(escape, context.get()));

      if (value != node.getValue()
          || pattern != node.getPattern()
          || !sameElements(node.getEscape(), rewrittenEscape)) {
        return rewrittenEscape
            .map(expression -> new LikePredicate(value, pattern, expression))
            .orElseGet(() -> new LikePredicate(value, pattern));
      }

      return node;
    }
Invoke the default rewrite logic explicitly. Specifically, it skips the invocation of the
expression rewriter for the provided node.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/ExpressionTreeRewriter.java