Fixed issue where :meth:`_schema.MetaData.reflect` did not forward
dialect-specific keyword arguments to the :class:`_engine.Inspector`
methods, causing options like ``oracle_resolve_synonyms`` to be ignored
during reflection. The method now ensures that all extra kwargs passed to
:meth:`_schema.MetaData.reflect` are forwarded to
:meth:`_engine.Inspector.get_table_names` and related reflection methods.
Pull request courtesy Lukáš Kožušník.
Fixes: #12884
Closes: #12885
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12885
Pull-request-sha:
9436812223600a2459461744fe20648639afc07d
Change-Id: Idb1ca0bc624df8e175cbfa979a8f31e62de185fe
--- /dev/null
+.. change::
+ :tags: bug, schema
+ :tickets: 12884
+
+ Fixed issue where :meth:`_schema.MetaData.reflect` did not forward
+ dialect-specific keyword arguments to the :class:`_engine.Inspector`
+ methods, causing options like ``oracle_resolve_synonyms`` to be ignored
+ during reflection. The method now ensures that all extra kwargs passed to
+ :meth:`_schema.MetaData.reflect` are forwarded to
+ :meth:`_engine.Inspector.get_table_names` and related reflection methods.
+ Pull request courtesy Lukáš Kožušník.
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
- available.update(insp.get_view_names(schema))
+ available.update(insp.get_view_names(schema, **dialect_kwargs))
try:
- available.update(insp.get_materialized_view_names(schema))
+ available.update(
+ insp.get_materialized_view_names(
+ schema, **dialect_kwargs
+ )
+ )
except NotImplementedError:
pass
t2 = meta2.tables["t2"]
is_true(t1.c.t2id.references(t2.c.id))
+ @testing.combinations(
+ "get_table_names",
+ "get_view_names",
+ "get_materialized_view_names",
+ argnames="method",
+ )
+ def test_reflect_forwards_multiple_kwargs(
+ self, connection, metadata, method
+ ):
+ with mock.patch(
+ f"sqlalchemy.engine.reflection.Inspector.{method}",
+ return_value=set(),
+ ) as mocked_method:
+ metadata.reflect(
+ bind=connection, flag1=True, flag2=123, flag3="abc", views=True
+ )
+
+ mocked_method.assert_called_once_with(
+ None, flag1=True, flag2=123, flag3="abc"
+ )
+
def test_nonexistent(self, connection):
meta = MetaData()
assert_raises(