From 7e5e40ff849c92e4c062bad28848b5bdbb8bdd80 Mon Sep 17 00:00:00 2001 From: Kai Mueller <15907922+kasium@users.noreply.github.com> Date: Thu, 24 Jun 2021 11:57:20 -0400 Subject: [PATCH] Fix missing None handling of Table.prefixes Fixed issue where passing ``None`` for the value of :paramref:`_schema.Table.prefixes` would not store an empty list, but rather the constant ``None``, which may be unexpected by third party dialects. The issue is revealed by a usage in recent versions of Alembic that are passing ``None`` for this value. Pull request courtesy Kai Mueller. Fixes: #6685 Closes: #6672 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/6672 Pull-request-sha: b79aca0ee4011b244978b35fed4c687ffbe56dc9 Change-Id: I758641c6fbde6f2607d074fecea7efa6728aeea0 --- doc/build/changelog/unreleased_14/6685.rst | 10 ++++++++++ lib/sqlalchemy/sql/schema.py | 2 +- test/sql/test_metadata.py | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 doc/build/changelog/unreleased_14/6685.rst diff --git a/doc/build/changelog/unreleased_14/6685.rst b/doc/build/changelog/unreleased_14/6685.rst new file mode 100644 index 0000000000..dcac516910 --- /dev/null +++ b/doc/build/changelog/unreleased_14/6685.rst @@ -0,0 +1,10 @@ +.. change:: + :tags: bug, schema + :tickets: 6685 + + Fixed issue where passing ``None`` for the value of + :paramref:`_schema.Table.prefixes` would not store an empty list, but + rather the constant ``None``, which may be unexpected by third party + dialects. The issue is revealed by a usage in recent versions of Alembic + that are passing ``None`` for this value. Pull request courtesy Kai + Mueller. diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index 484cdddc88..a8870f7f1e 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -660,7 +660,7 @@ class Table(DialectKWArgs, SchemaItem, TableClause): for evt, fn in listeners: event.listen(self, evt, fn) - self._prefixes = kwargs.pop("prefixes", []) + self._prefixes = kwargs.pop("prefixes", None) or [] self._extra_kwargs(**kwargs) diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index 9e02530525..08502b8bbe 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -1622,6 +1622,12 @@ class TableTest(fixtures.TestBase, AssertsCompiledSQL): "CREATE VIRTUAL TABLE temporary_table_2 (col1 INTEGER)", ) + @testing.combinations((None, []), ((), []), ([], []), (["foo"], ["foo"])) + def test_prefixes_parameter_parsing(self, arg, expected): + """test #6685""" + table = Table("foo", MetaData(), Column("bar", Integer), prefixes=arg) + eq_(table._prefixes, expected) + def test_table_info(self): metadata = MetaData() t1 = Table("foo", metadata, info={"x": "y"}) -- 2.47.2