| 1656 | |
| 1657 | @util.preload_module("sqlalchemy.sql.util") |
| 1658 | def _anonymous_fromclause( |
| 1659 | self, name: Optional[str] = None, flat: bool = False |
| 1660 | ) -> TODO_Any: |
| 1661 | sqlutil = util.preloaded.sql_util |
| 1662 | if flat: |
| 1663 | if isinstance(self.left, (FromGrouping, Join)): |
| 1664 | left_name = name # will recurse |
| 1665 | else: |
| 1666 | if name and isinstance(self.left, NamedFromClause): |
| 1667 | left_name = f"{name}_{self.left.name}" |
| 1668 | else: |
| 1669 | left_name = name |
| 1670 | if isinstance(self.right, (FromGrouping, Join)): |
| 1671 | right_name = name # will recurse |
| 1672 | else: |
| 1673 | if name and isinstance(self.right, NamedFromClause): |
| 1674 | right_name = f"{name}_{self.right.name}" |
| 1675 | else: |
| 1676 | right_name = name |
| 1677 | left_a, right_a = ( |
| 1678 | self.left._anonymous_fromclause(name=left_name, flat=flat), |
| 1679 | self.right._anonymous_fromclause(name=right_name, flat=flat), |
| 1680 | ) |
| 1681 | adapter = sqlutil.ClauseAdapter(left_a).chain( |
| 1682 | sqlutil.ClauseAdapter(right_a) |
| 1683 | ) |
| 1684 | |
| 1685 | return left_a.join( |
| 1686 | right_a, |
| 1687 | adapter.traverse(self.onclause), |
| 1688 | isouter=self.isouter, |
| 1689 | full=self.full, |
| 1690 | ) |
| 1691 | else: |
| 1692 | return ( |
| 1693 | self.select() |
| 1694 | .set_label_style(LABEL_STYLE_TABLENAME_PLUS_COL) |
| 1695 | .correlate(None) |
| 1696 | .alias(name) |
| 1697 | ) |
| 1698 | |
| 1699 | @util.ro_non_memoized_property |
| 1700 | def _hide_froms(self) -> Iterable[FromClause]: |