]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commit
Use separate label generator for column_label naming convention
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 14 Oct 2019 00:33:24 +0000 (20:33 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 14 Oct 2019 16:51:14 +0000 (12:51 -0400)
commit41dc71ad2fc1963a44e5f308f53aed6b8d7d662a
treefb678b21f16469e591326511530bb1cec6e57772
parent8a55fb6017b01c5b7503be2bedfa82b9663f8a94
Use separate label generator for column_label naming convention

Fixed bug where a table that would have a column label overlap with a plain
column name, such as "foo.id AS foo_id" vs. "foo.foo_id", would prematurely
generate the ``._label`` attribute for a column before this overlap could
be detected due to the use of the ``index=True`` or ``unique=True`` flag on
the column in conjunction with the default naming convention of
``"column_0_label"``.  This would then lead to failures when ``._label``
were used later to generate a bound parameter name, in particular those
used by the ORM when generating the WHERE clause for an UPDATE statement.
The issue has been fixed by using an alternate ``._label`` accessor for DDL
generation that does not affect the state of the :class:`.Column`.   The
accessor also bypasses the key-deduplication step as it is not necessary
for DDL, the naming is now consistently ``"<tablename>_<columnname>"``
without any subsequent numeric symbols when used in DDL.

Fixes: #4911
Change-Id: Iabf5fd3250738d800d6e41a2a3a27a7ce2405e7d
doc/build/changelog/unreleased_13/4911.rst [new file with mode: 0644]
lib/sqlalchemy/dialects/mssql/base.py
lib/sqlalchemy/sql/compiler.py
lib/sqlalchemy/sql/elements.py
lib/sqlalchemy/sql/naming.py
lib/sqlalchemy/sql/schema.py
test/sql/test_metadata.py
test/sql/test_update.py