From: Mike Bayer Date: Fri, 12 May 2023 15:20:52 +0000 (-0400) Subject: substitute include_table param rather than adding X-Git-Tag: rel_2_0_14~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=169d6e6804c0e6bbb5f8b2fa4217e659b49a0d9f;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git substitute include_table param rather than adding Fixed issue in :func:`_sql.values` construct where an internal compilation error would occur if the construct were used inside of a scalar subquery. Fixes: #9772 Change-Id: I4b0f756977abafbd2aabaaa0064baa875249ebe1 --- diff --git a/doc/build/changelog/unreleased_20/9772.rst b/doc/build/changelog/unreleased_20/9772.rst new file mode 100644 index 0000000000..ff448fabdf --- /dev/null +++ b/doc/build/changelog/unreleased_20/9772.rst @@ -0,0 +1,6 @@ +.. change:: + :tags: bug, sql + :tickets: 9772 + + Fixed issue in :func:`_sql.values` construct where an internal compilation + error would occur if the construct were used inside of a scalar subquery. diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 619ff08488..ad686ce27e 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -4275,15 +4275,14 @@ class SQLCompiler(Compiled): ) if name: + kw["include_table"] = False v = "%s(%s)%s (%s)" % ( lateral, v, self.get_render_as_alias_suffix(self.preparer.quote(name)), ( ", ".join( - c._compiler_dispatch( - self, include_table=False, **kw - ) + c._compiler_dispatch(self, **kw) for c in element.columns ) ), diff --git a/test/sql/test_values.py b/test/sql/test_values.py index b943c4701d..62e1f1cb5b 100644 --- a/test/sql/test_values.py +++ b/test/sql/test_values.py @@ -10,6 +10,7 @@ from sqlalchemy import Table from sqlalchemy import testing from sqlalchemy import true from sqlalchemy.engine import default +from sqlalchemy.sql import func from sqlalchemy.sql import select from sqlalchemy.sql import Values from sqlalchemy.sql.compiler import FROM_LINTING @@ -85,6 +86,31 @@ class ValuesTest(fixtures.TablesTest, AssertsCompiledSQL): 'AS "Spaces and Cases" ("CaseSensitive", "has spaces", number)', ) + def test_values_in_scalar_subq(self): + """test #9772""" + + people = self.tables.people + table_value_constructor = Values( + Column("v1", Integer), name="tvc" + ).data( + [ + (people.c.people_id,), + (people.c.age,), + (people.c.name,), + ] + ) + + maximum = select(func.max(table_value_constructor.c.v1)) + maximum_subquery = maximum.scalar_subquery() + query = select(people.c.people_id, maximum_subquery) + self.assert_compile( + query, + "SELECT people.people_id, " + "(SELECT max(tvc.v1) AS max_1 FROM " + "(VALUES (people.people_id), (people.age), (people.name)) " + "AS tvc (v1)) AS anon_1 FROM people", + ) + def test_values_in_cte_params(self): cte1 = select( Values(