]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
fix: pass dialect-specific kwargs to MetaData.reflect
authorLukáš Kožušník <lukinkozusnik@seznam.cz>
Fri, 26 Sep 2025 15:17:44 +0000 (17:17 +0200)
committerLukáš Kožušník <lukinkozusnik@seznam.cz>
Fri, 26 Sep 2025 15:17:44 +0000 (17:17 +0200)
Previously, MetaData.reflect did not forward dialect-specific keyword
arguments to the Inspector methods, causing options like
`oracle_resolve_synonyms` to be ignored during reflection.

This change ensures that all extra kwargs passed to MetaData.reflect
are forwarded to `Inspector.get_table_names` and related reflection
methods.

A new test `test_reflect_forwards_kwargs_to_get_table_names` has been
added to verify that arbitrary dialect kwargs are passed through.

Fixes #12884

Signed-off-by: Lukáš Kožušník <lukinkozusnik@seznam.cz>
lib/sqlalchemy/sql/schema.py
test/engine/test_reflection.py

index 4e640e2af40cd6ef20a4711cb74b378e435d2a70..3f249b64101e4a9bbd8abae5bbcf234cded5a1df 100644 (file)
@@ -5939,7 +5939,7 @@ class MetaData(HasSchemaAttr):
 
             kind = util.preloaded.engine_reflection.ObjectKind.TABLE
             available: util.OrderedSet[str] = util.OrderedSet(
-                insp.get_table_names(schema)
+                insp.get_table_names(schema, **dialect_kwargs)
             )
             if views:
                 kind = util.preloaded.engine_reflection.ObjectKind.ANY
index 6ba130add341816742f1f69a3845d8bdf123dac9..ec07e20ac3747b201a6ee2d8412386b2ddda9a89 100644 (file)
@@ -249,6 +249,19 @@ class ReflectionTest(fixtures.TestBase, ComparesTables):
         t2 = meta2.tables["t2"]
         is_true(t1.c.t2id.references(t2.c.id))
 
+    def test_reflect_forwards_multiple_kwargs(self, connection, metadata):
+        with mock.patch(
+            "sqlalchemy.engine.reflection.Inspector.get_table_names",
+            return_value=None,
+        ) as mocked:
+            metadata.reflect(
+                bind=connection, flag1=True, flag2=123, flag3="abc"
+            )
+
+            mocked.assert_called_once_with(
+                None, flag1=True, flag2=123, flag3="abc"
+            )
+
     def test_nonexistent(self, connection):
         meta = MetaData()
         assert_raises(