summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/build/changelog/unreleased_14/6685.rst10
-rw-r--r--lib/sqlalchemy/sql/schema.py2
-rw-r--r--test/sql/test_metadata.py6
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"})