MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / splice_joins

Function splice_joins

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

Source from the content-addressed store, hash-verified

853
854
855def splice_joins(
856 left: Optional[FromClause],
857 right: Optional[FromClause],
858 stop_on: Optional[FromClause] = None,
859) -> Optional[FromClause]:
860 if left is None:
861 return right
862
863 stack: List[Tuple[Optional[FromClause], Optional[Join]]] = [(right, None)]
864
865 adapter = ClauseAdapter(left)
866 ret = None
867 while stack:
868 right, prevright = stack.pop()
869 if isinstance(right, Join) and right is not stop_on:
870 right = right._clone()
871 right.onclause = adapter.traverse(right.onclause)
872 stack.append((right.left, right))
873 else:
874 right = adapter.traverse(right)
875 if prevright is not None:
876 assert right is not None
877 prevright.left = right
878 if ret is None:
879 ret = right
880
881 return ret
882
883
884@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