summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/base.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-12-03 09:11:14 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2022-12-04 10:45:35 -0500
commit1284fa377e53f03cec061d7af16f269ad73fa7b9 (patch)
tree40e421506cd20f3cf8c12cba834062cd1bb0505c /lib/sqlalchemy/sql/base.py
parent96db7cdd53ee9004be66545989b4ac5632bb7ccf (diff)
downloadsqlalchemy-1284fa377e53f03cec061d7af16f269ad73fa7b9.tar.gz
disallow same-named columns, unchecked replacement in Table
Fixed issue where table reflection using :paramref:`.Table.extend_existing` would fail to deduplicate a same-named column if the existing :class:`.Table` used a separate key. The :paramref:`.Table.autoload_replace` parameter would allow the column to be skipped but under no circumstances should a :class:`.Table` ever have the same-named column twice. Additionally, changed deprecation warnings to exceptions as were implemented in I1d58c8ebe081079cb669e7ead60886ffc1b1a7f5 . Fixes: #8925 Change-Id: I83d0f8658177a7ffbb06e01dbca91377d1a98d49
Diffstat (limited to 'lib/sqlalchemy/sql/base.py')
-rw-r--r--lib/sqlalchemy/sql/base.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/sqlalchemy/sql/base.py b/lib/sqlalchemy/sql/base.py
index fc80334e8..0b96e5bbf 100644
--- a/lib/sqlalchemy/sql/base.py
+++ b/lib/sqlalchemy/sql/base.py
@@ -1969,7 +1969,11 @@ class DedupeColumnCollection(ColumnCollection[str, _NAMEDCOL]):
# delete higher index
del self._index[len(self._collection)]
- def replace(self, column: _NAMEDCOL) -> None:
+ def replace(
+ self,
+ column: _NAMEDCOL,
+ extra_remove: Optional[Iterable[_NAMEDCOL]] = None,
+ ) -> None:
"""add the given column to this collection, removing unaliased
versions of this column as well as existing columns with the
same key.
@@ -1986,7 +1990,10 @@ class DedupeColumnCollection(ColumnCollection[str, _NAMEDCOL]):
"""
- remove_col = set()
+ if extra_remove:
+ remove_col = set(extra_remove)
+ else:
+ remove_col = set()
# remove up to two columns based on matches of name as well as key
if column.name in self._index and column.key != column.name:
other = self._index[column.name][1]