docs: def _need_subquery(arg, attributes, named_attributes):
          """
          Decide whether the projection argument needs to be wrapped in a subquery
          """
          if arg.heading.expressions or arg.distinct:  # argument has any renamed (computed) attributes
              return True
          restricting_attributes = arg.attributes_in_restriction()
          return (not restricting_attributes.issubset(attributes) or  # if any restricting attribute is projected out or
                  any(v.strip() in restricting_attributes for v in named_attributes.values()))