summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-10-06 18:23:42 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-10-06 18:23:42 -0400
commit119674dd250d7da8be92a262ad53396c2fac4e0f (patch)
treedf9b6877d6cbe101f0469eb30bd95dbacae54e54
parentc4dee4cbb7aa1a5486a90d3c48ffd8500d3a6dd2 (diff)
downloadsqlalchemy-119674dd250d7da8be92a262ad53396c2fac4e0f.tar.gz
- The execution options passed to an :class:`.Engine` either via
:paramref:`.create_engine.execution_options` or :meth:`.Engine.update_execution_options` are not passed to the special :class:`.Connection` used to initialize the dialect within the "first connect" event; dialects will usually perform their own queries in this phase, and none of the current available options should be applied here. In particular, the "autocommit" option was causing an attempt to autocommit within this initial connect which would fail with an AttributeError due to the non-standard state of the :class:`.Connection`. fixes #3200
-rw-r--r--doc/build/changelog/changelog_09.rst17
-rw-r--r--lib/sqlalchemy/engine/strategies.py1
-rw-r--r--test/engine/test_execute.py8
3 files changed, 26 insertions, 0 deletions
diff --git a/doc/build/changelog/changelog_09.rst b/doc/build/changelog/changelog_09.rst
index e3d9175cb..7dd50739e 100644
--- a/doc/build/changelog/changelog_09.rst
+++ b/doc/build/changelog/changelog_09.rst
@@ -14,6 +14,23 @@
:version: 0.9.8
.. change::
+ :tags: bug, engine
+ :versions: 1.0.0
+ :tickets: 3200
+
+ The execution options passed to an :class:`.Engine` either via
+ :paramref:`.create_engine.execution_options` or
+ :meth:`.Engine.update_execution_options` are not passed to the
+ special :class:`.Connection` used to initialize the dialect
+ within the "first connect" event; dialects will usually
+ perform their own queries in this phase, and none of the
+ current available options should be applied here. In
+ particular, the "autocommit" option was causing an attempt to
+ autocommit within this initial connect which would fail with
+ an AttributeError due to the non-standard state of the
+ :class:`.Connection`.
+
+ .. change::
:tags: bug, sqlite
:versions: 1.0.0
:tickets: 3211
diff --git a/lib/sqlalchemy/engine/strategies.py b/lib/sqlalchemy/engine/strategies.py
index 38206be89..49438372b 100644
--- a/lib/sqlalchemy/engine/strategies.py
+++ b/lib/sqlalchemy/engine/strategies.py
@@ -162,6 +162,7 @@ class DefaultEngineStrategy(EngineStrategy):
def first_connect(dbapi_connection, connection_record):
c = base.Connection(engine, connection=dbapi_connection,
_has_events=False)
+ c._execution_options = {}
dialect.initialize(c)
event.listen(pool, 'first_connect', first_connect, once=True)
diff --git a/test/engine/test_execute.py b/test/engine/test_execute.py
index 219a145c6..a80d157ed 100644
--- a/test/engine/test_execute.py
+++ b/test/engine/test_execute.py
@@ -479,6 +479,14 @@ class ExecuteTest(fixtures.TestBase):
eq_(canary, ["l1", "l2", "l3", "l1", "l2"])
@testing.requires.ad_hoc_engines
+ def test_autocommit_option_no_issue_first_connect(self):
+ eng = create_engine(testing.db.url)
+ eng.update_execution_options(autocommit=True)
+ conn = eng.connect()
+ eq_(conn._execution_options, {"autocommit": True})
+ conn.close()
+
+ @testing.requires.ad_hoc_engines
def test_generative_engine_event_dispatch_hasevents(self):
def l1(*arg, **kw):
pass