summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Rice <github@oliverrice.com>2021-02-13 14:21:55 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2021-02-15 13:25:43 -0500
commit120347aad15fac4a54e16aa60e0e5b3b6b3995c4 (patch)
tree079b796a3a6ec3d0851bd4215a1edaac118b7357
parent996a8ca9bbf0cb9c9caea7926bc160d0c1fd7648 (diff)
downloadsqlalchemy-120347aad15fac4a54e16aa60e0e5b3b6b3995c4.tar.gz
Support legacy select(<iterable>) in addition to select(<list>) in v1.4
Fixed regression where use of an arbitrary iterable with the :func:`_sql.select` function was not working, outside of plain lists. The forwards/backwards compatibility logic here now checks for a wider range of incoming "iterable" types including that a ``.c`` collection from a selectable can be passed directly. Pull request compliments of Oliver Rice. Fixes: #5935 Closes: #5936 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5936 Pull-request-sha: 575ab3e7df30fc8da03752d102c8eeb6cb3a3e3d Change-Id: Icd972f1078d9ea96c47a64133079f00d9b0a66f3
-rw-r--r--doc/build/changelog/unreleased_14/5935.rst9
-rw-r--r--lib/sqlalchemy/sql/selectable.py6
-rw-r--r--test/sql/test_deprecations.py10
3 files changed, 24 insertions, 1 deletions
diff --git a/doc/build/changelog/unreleased_14/5935.rst b/doc/build/changelog/unreleased_14/5935.rst
new file mode 100644
index 000000000..f7d06301a
--- /dev/null
+++ b/doc/build/changelog/unreleased_14/5935.rst
@@ -0,0 +1,9 @@
+.. change::
+ :tags: bug, sql
+ :tickets: 5935
+
+ Fixed regression where use of an arbitrary iterable with the
+ :func:`_sql.select` function was not working, outside of plain lists. The
+ forwards/backwards compatibility logic here now checks for a wider range of
+ incoming "iterable" types including that a ``.c`` collection from a
+ selectable can be passed directly. Pull request compliments of Oliver Rice.
diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py
index 23fdf7e12..ee2c4dafc 100644
--- a/lib/sqlalchemy/sql/selectable.py
+++ b/lib/sqlalchemy/sql/selectable.py
@@ -4861,7 +4861,11 @@ class Select(
constructs as given, as well as ORM-mapped classes.
"""
- if (args and isinstance(args[0], list)) or kw:
+ if (
+ args
+ and hasattr(args[0], "__iter__")
+ and not isinstance(args[0], util.string_types + (ClauseElement,))
+ ) or kw:
return cls.create_legacy_select(*args, **kw)
else:
return cls._create_future_select(*args)
diff --git a/test/sql/test_deprecations.py b/test/sql/test_deprecations.py
index 35633a1a3..1e5b1b995 100644
--- a/test/sql/test_deprecations.py
+++ b/test/sql/test_deprecations.py
@@ -437,6 +437,16 @@ class SelectableTest(fixtures.TestBase, AssertsCompiledSQL):
stmt = select([column("q")])
self.assert_compile(stmt, "SELECT q")
+ def test_select_column_collection_argument(self):
+ t1 = table("t1", column("q"))
+
+ with testing.expect_deprecated_20(
+ r"The legacy calling style of select\(\) is deprecated "
+ "and will be removed in SQLAlchemy 2.0"
+ ):
+ stmt = select(t1.c)
+ self.assert_compile(stmt, "SELECT t1.q FROM t1")
+
def test_select_kw_argument(self):
with testing.expect_deprecated_20(