]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fix missing None handling of Table.prefixes
authorKai Mueller <15907922+kasium@users.noreply.github.com>
Thu, 24 Jun 2021 15:57:20 +0000 (11:57 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 28 Jun 2021 14:26:01 +0000 (10:26 -0400)
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 [new file with mode: 0644]
lib/sqlalchemy/sql/schema.py
test/sql/test_metadata.py

diff --git a/doc/build/changelog/unreleased_14/6685.rst b/doc/build/changelog/unreleased_14/6685.rst
new file mode 100644 (file)
index 0000000..dcac516
--- /dev/null
@@ -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.
index 484cdddc88446d688086ff57a8e9af31b8e4fc71..a8870f7f1e4114c00fa0f096918c6a010b2125f6 100644 (file)
@@ -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)
 
index 9e0253052511373ed3fc7020eff209e705f34af3..08502b8bbebbc4ffe3050466f39f2e675d045cbf 100644 (file)
@@ -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"})