From 82070dd0c719f7683e47c3983f949c64a46b92f9 Mon Sep 17 00:00:00 2001 From: Federico Caselli Date: Tue, 16 Mar 2021 23:56:28 +0100 Subject: [PATCH] Added back ``items`` and ``values`` to ``ColumnCollection`` class. Fixes: #6068 Change-Id: Idb42c864e17c02d7b89cffa667dcf853ec93e5c2 --- doc/build/changelog/unreleased_14/6068.rst | 8 ++++++ lib/sqlalchemy/sql/base.py | 6 +++++ test/base/test_utils.py | 30 +++++++++++++++++++++- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 doc/build/changelog/unreleased_14/6068.rst diff --git a/doc/build/changelog/unreleased_14/6068.rst b/doc/build/changelog/unreleased_14/6068.rst new file mode 100644 index 0000000000..240254fb1c --- /dev/null +++ b/doc/build/changelog/unreleased_14/6068.rst @@ -0,0 +1,8 @@ +.. change:: + :tags: bug, regression + :tickets: 6068 + + Added back ``items`` and ``values`` to ``ColumnCollection`` class. + The regression was introduced while adding support for duplicate + columns in from clauses and selectable in ticket #4753. + diff --git a/lib/sqlalchemy/sql/base.py b/lib/sqlalchemy/sql/base.py index c76c9ae148..726800717c 100644 --- a/lib/sqlalchemy/sql/base.py +++ b/lib/sqlalchemy/sql/base.py @@ -1126,6 +1126,12 @@ class ColumnCollection(object): def keys(self): return [k for (k, col) in self._collection] + def values(self): + return [col for (k, col) in self._collection] + + def items(self): + return list(self._collection) + def __bool__(self): return bool(self._collection) diff --git a/test/base/test_utils.py b/test/base/test_utils.py index a00fbd0186..b602811ab0 100644 --- a/test/base/test_utils.py +++ b/test/base/test_utils.py @@ -464,11 +464,39 @@ class ColumnCollectionCommon(testing.AssertsCompiledSQL): cc = self._column_collection( columns=[("c1", c1), ("foo", c2), ("c3", c3)] ) - eq_(cc.keys(), ["c1", "foo", "c3"]) + keys = cc.keys() + eq_(keys, ["c1", "foo", "c3"]) + ne_(id(keys), id(cc.keys())) ci = cc.as_immutable() eq_(ci.keys(), ["c1", "foo", "c3"]) + def test_values(self): + c1, c2, c3 = sql.column("c1"), sql.column("c2"), sql.column("c3") + c2.key = "foo" + cc = self._column_collection( + columns=[("c1", c1), ("foo", c2), ("c3", c3)] + ) + val = cc.values() + eq_(val, [c1, c2, c3]) + ne_(id(val), id(cc.values())) + + ci = cc.as_immutable() + eq_(ci.values(), [c1, c2, c3]) + + def test_items(self): + c1, c2, c3 = sql.column("c1"), sql.column("c2"), sql.column("c3") + c2.key = "foo" + cc = self._column_collection( + columns=[("c1", c1), ("foo", c2), ("c3", c3)] + ) + items = cc.items() + eq_(items, [("c1", c1), ("foo", c2), ("c3", c3)]) + ne_(id(items), id(cc.items())) + + ci = cc.as_immutable() + eq_(ci.items(), [("c1", c1), ("foo", c2), ("c3", c3)]) + def test_key_index_error(self): cc = self._column_collection( columns=[ -- 2.47.2