Source code for pqg.merge
import typing as t
from dataclasses import dataclass
from .operation import Operation
[docs]
@t.runtime_checkable
class Query(t.Protocol):
entity: str
operations: t.List[Operation]
def __str__(self) -> str: ...
@property
def merge_entities(self) -> t.Set[str]: ...
[docs]
@dataclass
class Merge(Operation):
right: Query
left_on: str
right_on: str
[docs]
def apply(self, entity: str) -> str:
return f'.merge({self.right}, left_on={self.left_on}, right_on={self.right_on})'
@property
def entities(self) -> t.Set[str]:
"""
Get the set of all entities involved in the right side of this merge operation.
This property provides a complete view of all tables involved in the right-hand
side of the merge, including:
1. The immediate right entity being merged
2. Any entities that have been merged into the right entity through nested merges
The difference between this and Query.merge_entities is that this property only
tracks entities from the right side of the merge operation, while merge_entities
includes the base entity and all merged entities from both sides.
Returns:
Set[str]:
A set of entity names that are part of the right-hand side of
this merge operation's join graph.
"""
return {self.right.entity}.union(self.right.merge_entities)