diff options
| -rw-r--r-- | doc/build/changelog/unreleased_14/6685.rst | 10 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/schema.py | 2 | ||||
| -rw-r--r-- | test/sql/test_metadata.py | 6 |
3 files changed, 17 insertions, 1 deletions
diff --git a/doc/build/changelog/unreleased_14/6685.rst b/doc/build/changelog/unreleased_14/6685.rst new file mode 100644 index 000000000..dcac51691 --- /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 484cdddc8..a8870f7f1 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 9e0253052..08502b8bb 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"}) |
