Fixed bug where using reflection function such as :meth:`.MetaData.reflect`
with an :class:`.Engine` object that had execution options applied to it
would fail, as the resulting :class:`.OptionEngine` proxy object failed to
include a ``.engine`` attribute used within the reflection routines.
Fixes: #4754
Change-Id: I6c342af5c6db6fe362b9d25f3f26d6859f62f87a
(cherry picked from commit
3238d953b42f67761dc3019bd27f2960ae2e525f)
--- /dev/null
+.. change::
+ :tags: bug, engine
+ :tickets: 4754
+
+ Fixed bug where using reflection function such as :meth:`.MetaData.reflect`
+ with an :class:`.Engine` object that had execution options applied to it
+ would fail, as the resulting :class:`.OptionEngine` proxy object failed to
+ include a ``.engine`` attribute used within the reflection routines.
if logging_name:
self.logging_name = logging_name
self.echo = echo
- self.engine = self
log.instance_logger(self, echoflag=echo)
if proxy:
interfaces.ConnectionProxy._adapt_listener(self, proxy)
if execution_options:
self.update_execution_options(**execution_options)
+ @property
+ def engine(self):
+ return self
+
def update_execution_options(self, **opt):
r"""Update the default execution_options dictionary
of this :class:`.Engine`.
"""
+ engine = None
+ """The :class:`.Engine` instance referred to by this :class:`.Connectable`.
+
+ May be ``self`` if this is already an :class:`.Engine`.
+
+ """
+
@util.deprecated(
"1.3",
"The :meth:`.Engine.contextual_connect` and "
options={"execution_options": {"base": "x1"}}
)
+ is_(eng.engine, eng)
+
eng1 = eng.execution_options(foo="b1")
+ is_(eng1.engine, eng1)
eng2 = eng.execution_options(foo="b2")
eng1a = eng1.execution_options(bar="a1")
eng2a = eng2.execution_options(foo="b3", bar="a2")
+ is_(eng2a.engine, eng2a)
eq_(eng._execution_options, {"base": "x1"})
eq_(eng1._execution_options, {"base": "x1", "foo": "b1"})
def test_reflect_uses_bind_engine_reflect(self):
self._test_reflect_uses_bind(lambda e: MetaData().reflect(e))
+ def test_reflect_uses_bind_option_engine_reflect(self):
+ self._test_reflect_uses_bind(
+ lambda e: MetaData().reflect(e.execution_options(foo="bar"))
+ )
+
@testing.provide_metadata
def test_reflect_all(self):
existing = testing.db.table_names()