docs: public boolean isSameAs( PlanNode other ) {
          if (other == null) return false;
          if (this.getType() != other.getType()) return false;
          if (!ObjectUtil.isEqualWithNulls(this.nodeProperties, other.nodeProperties)) return false;
          if (!this.getSelectors().equals(other.getSelectors())) return false;
          if (this.getChildCount() != other.getChildCount()) return false;
          Iterator<PlanNode> thisChildren = this.getChildren().iterator();
          Iterator<PlanNode> thatChildren = other.getChildren().iterator();
          while (thisChildren.hasNext() && thatChildren.hasNext()) {
              if (!thisChildren.next().isSameAs(thatChildren.next())) return false;
          }
          return true;
      }