77class Names :
88 """Investigate the names of database objects."""
99
10- def __init__ (self , left : set [str ], right : set [str ], ignore_casing : bool ):
10+ def __init__ (
11+ self ,
12+ left : set [str ],
13+ right : set [str ],
14+ name_mapping : dict [str , str ] | None ,
15+ ignore_casing : bool ,
16+ ):
1117 """
1218 Args:
1319 left: Names from the "left" database object.
1420 right: Names from the "right" database object.
21+ name_mapping: Mapping from the "left" to the "right" database object.
1522 ignore_casing: Whether to ignore casing for name equality.
1623 """
1724 if ignore_casing :
@@ -20,6 +27,10 @@ def __init__(self, left: set[str], right: set[str], ignore_casing: bool):
2027 else :
2128 self ._set_left = left
2229 self ._set_right = right
30+ self ._name_mapping = name_mapping
31+ self ._inverse_name_mapping = (
32+ {v : k for k , v in name_mapping .items ()} if name_mapping else {}
33+ )
2334
2435 @cached_property
2536 def left (self ) -> list [str ]:
@@ -39,12 +50,22 @@ def in_common(self) -> list[str]:
3950 @cached_property
4051 def missing_left (self ) -> list [str ]:
4152 """Ordered list of names provided only by the "right" database object."""
42- return sorted (self ._set_right - self ._set_left )
53+ if self ._name_mapping :
54+ right_renamed = {
55+ self ._inverse_name_mapping .get (k , k ) for k in self ._set_right
56+ }
57+ return sorted (right_renamed - self ._set_left )
58+ else :
59+ return sorted (self ._set_right - self ._set_left )
4360
4461 @cached_property
4562 def missing_right (self ) -> list [str ]:
4663 """Ordered list of names provided only by the "left" database object."""
47- return sorted (self ._set_left - self ._set_right )
64+ if self ._name_mapping :
65+ left_renamed = {self ._name_mapping .get (k , k ) for k in self ._set_left }
66+ return sorted (left_renamed - self ._set_right )
67+ else :
68+ return sorted (self ._set_left - self ._set_right )
4869
4970 @cached_property
5071 def equal (self ) -> bool :
0 commit comments