public LogicalPlan resolveOperators(PartialFunction<LogicalPlan, LogicalPlan> rule) {
        if (!_analyzed) {
            LogicalPlan afterRuleOnChildren = transformChildren(rule, LogicalPlan::resolveOperators);
            if (this.fastEquals(afterRuleOnChildren)) {
                return rule.applyOrElse(this, identity());
            } else {
                return rule.applyOrElse(afterRuleOnChildren, identity());
            }
        } else {
            return this;
        }
    }
Returns a copy of this node where `rule` has been recursively applied first to all of its
children and then itself (post-order). When `rule` does not apply to a given node, it is left
unchanged.  This function is similar to `transformUp`, but skips sub-trees that have already
been marked as analyzed.

@param rule the function use to transform this nodes children
indexr-query-opt/src/main/java/io/indexr/query/plan/logical/LogicalPlan.java