--- /dev/null
+.. change::
+ :tags: bug, orm, engine
+ :tickets: 4406
+
+ Added accessors for execution options to Core and ORM, via
+ :meth:`.Query.get_execution_options`,
+ :meth:`.Connection.get_execution_options`,
+ :meth:`.Engine.get_execution_options`, and
+ :meth:`.Executable.get_execution_options`. PR courtesy Daniel Lister.
:ref:`schema_translating`
+ .. seealso::
+
+ :meth:`.Engine.execution_options`
+
+ :meth:`.Executable.execution_options`
+
+ :meth:`.Connection.get_execution_options`
+
+
""" # noqa
c = self._clone()
c._execution_options = c._execution_options.union(opt)
self.dialect.set_connection_execution_options(c, opt)
return c
+ def get_execution_options(self):
+ """ Get the non-SQL options which will take effect during execution.
+
+ .. versionadded:: 1.3
+
+ .. seealso::
+
+ :meth:`.Connection.execution_options`
+ """
+ return self._execution_options
+
@property
def closed(self):
"""Return True if this connection is closed."""
:meth:`.Engine.update_execution_options` - update the execution
options for a given :class:`.Engine` in place.
+ :meth:`.Engine.get_execution_options`
+
+
"""
return OptionEngine(self, opt)
+ def get_execution_options(self):
+ """ Get the non-SQL options which will take effect during execution.
+
+ .. versionadded: 1.3
+
+ .. seealso::
+
+ :meth:`.Engine.execution_options`
+ """
+ return self._execution_options
+
@property
def name(self):
"""String name of the :class:`~sqlalchemy.engine.interfaces.Dialect`
"""
return self.with_hint(None, text, dialect_name)
+ def get_execution_options(self):
+ """ Get the non-SQL options which will take effect during execution.
+
+ .. versionadded:: 1.3
+
+ .. seealso::
+
+ :meth:`.Query.execution_options`
+ """
+ return self._execution_options
+
@_generative()
def execution_options(self, **kwargs):
""" Set non-SQL options which take effect during execution.
automatically if the :meth:`~sqlalchemy.orm.query.Query.yield_per()`
method is used.
+ .. seealso::
+
+ :meth:`.Query.get_execution_options`
+
"""
self._execution_options = self._execution_options.union(kwargs)
.. seealso::
- :meth:`.Connection.execution_options()`
+ :meth:`.Connection.execution_options`
- :meth:`.Query.execution_options()`
+ :meth:`.Query.execution_options`
+
+ :meth:`.Executable.get_execution_options`
"""
if "isolation_level" in kw:
)
self._execution_options = self._execution_options.union(kw)
+ def get_execution_options(self):
+ """ Get the non-SQL options which will take effect during execution.
+
+ .. versionadded:: 1.3
+
+ .. seealso::
+
+ :meth:`.Executable.execution_options`
+ """
+ return self._execution_options
+
def execute(self, *multiparams, **params):
"""Compile and execute this :class:`.Executable`."""
e = self.bind
c2_branch = c2.connect()
eq_(c2_branch._execution_options, {"foo": "bar"})
+ def test_get_engine_execution_options(self):
+ engine = testing_engine("sqlite://")
+ engine.dialect = Mock()
+ e2 = engine.execution_options(foo="bar")
+
+ eq_(e2.get_execution_options(), {"foo": "bar"})
+
+ def test_get_connection_execution_options(self):
+ engine = testing_engine("sqlite://", options=dict(_initialize=False))
+ engine.dialect = Mock()
+ conn = engine.connect()
+ c = conn.execution_options(foo="bar")
+
+ eq_(c.get_execution_options(), {"foo": "bar"})
+
class EngineEventsTest(fixtures.TestBase):
__requires__ = ("ad_hoc_engines",)
sess = create_session(bind=testing.db, autocommit=False)
q1 = sess.query(User)
- assert q1._execution_options == dict()
+ eq_(q1._execution_options, dict())
q2 = q1.execution_options(foo="bar", stream_results=True)
# q1's options should be unchanged.
- assert q1._execution_options == dict()
+ eq_(q1._execution_options, dict())
# q2 should have them set.
- assert q2._execution_options == dict(foo="bar", stream_results=True)
+ eq_(q2._execution_options, dict(foo="bar", stream_results=True))
q3 = q2.execution_options(foo="not bar", answer=42)
- assert q2._execution_options == dict(foo="bar", stream_results=True)
+ eq_(q2._execution_options, dict(foo="bar", stream_results=True))
q3_options = dict(foo="not bar", stream_results=True, answer=42)
- assert q3._execution_options == q3_options
+ eq_(q3._execution_options, q3_options)
+
+ def test_get_options(self):
+ User = self.classes.User
+
+ sess = create_session(bind=testing.db, autocommit=False)
+
+ q = sess.query(User).execution_options(foo="bar", stream_results=True)
+ eq_(q.get_execution_options(), dict(foo="bar", stream_results=True))
def test_options_in_connection(self):
User = self.classes.User
s2 = s.execution_options(bar="baz")
s3 = s.execution_options(foo="not bar")
# The original select should not be modified.
- assert s._execution_options == dict(foo="bar")
+ eq_(s.get_execution_options(), dict(foo="bar"))
# s2 should have its execution_options based on s, though.
- assert s2._execution_options == dict(foo="bar", bar="baz")
- assert s3._execution_options == dict(foo="not bar")
+ eq_(s2.get_execution_options(), dict(foo="bar", bar="baz"))
+ eq_(s3.get_execution_options(), dict(foo="not bar"))
def test_invalid_options(self):
assert_raises(