MCPcopy Create free account
hub / github.com/sqlalchemy/sqlalchemy / splice_joins

Function splice_joins

lib/sqlalchemy/sql/util.py:843–869  ·  view source on GitHub ↗
(
    left: Optional[FromClause],
    right: Optional[FromClause],
    stop_on: Optional[FromClause] = None,
)

Source from the content-addressed store, hash-verified

841
842
843def splice_joins(
844 left: Optional[FromClause],
845 right: Optional[FromClause],
846 stop_on: Optional[FromClause] = None,
847) -> Optional[FromClause]:
848 if left is None:
849 return right
850
851 stack: List[Tuple[Optional[FromClause], Optional[Join]]] = [(right, None)]
852
853 adapter = ClauseAdapter(left)
854 ret = None
855 while stack:
856 right, prevright = stack.pop()
857 if isinstance(right, Join) and right is not stop_on:
858 right = right._clone()
859 right.onclause = adapter.traverse(right.onclause)
860 stack.append((right.left, right))
861 else:
862 right = adapter.traverse(right)
863 if prevright is not None:
864 assert right is not None
865 prevright.left = right
866 if ret is None:
867 ret = right
868
869 return ret
870
871
872@overload

Callers

nothing calls this directly

Calls 5

traverseMethod · 0.95
ClauseAdapterClass · 0.85
popMethod · 0.45
_cloneMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected