]> 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:53:48 +0000 (12:53 -0400)
commit53b7b8de6535f5bb6930bddf6a8fb87ba56bddfb
treefd568809698772d19e244183109b585d047fcc37
parentf3758feb76a2b77b7a4a11965b0a11db6d85ff33
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
(cherry picked from commit 41dc71ad2fc1963a44e5f308f53aed6b8d7d662a)
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