diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-09-16 11:29:01 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-09-16 11:29:01 -0400 |
| commit | 90d4cdbac80f0f87f365efdf9b596eff77764bed (patch) | |
| tree | 98dacaa14d1aa9906546684af5f848f0a5c81e23 | |
| parent | b609030130eb4c415deee5516e2450ed660f2717 (diff) | |
| download | sqlalchemy-90d4cdbac80f0f87f365efdf9b596eff77764bed.tar.gz | |
- Fixed a regression in 0.6.4 whereby the change that
allowed cursor errors to be raised consistently broke
the result.lastrowid accessor. Test coverage has
been added for result.lastrowid. Note that lastrowid
is only supported by Pysqlite and some MySQL drivers,
so isn't super-useful in the general case.
| -rw-r--r-- | CHANGES | 11 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/base.py | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/test/requires.py | 6 | ||||
| -rw-r--r-- | test/sql/test_query.py | 10 |
4 files changed, 29 insertions, 4 deletions
@@ -83,7 +83,16 @@ CHANGES the "where type in (x, y, z)" is placed on the outside of the query only, instead of repeatedly. May make some more adjustments to this. - + +- engine + + - Fixed a regression in 0.6.4 whereby the change that + allowed cursor errors to be raised consistently broke + the result.lastrowid accessor. Test coverage has + been added for result.lastrowid. Note that lastrowid + is only supported by Pysqlite and some MySQL drivers, + so isn't super-useful in the general case. + 0.6.4 ===== - orm diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 79cadaea9..4d6912ce4 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -2249,7 +2249,7 @@ class ResultProxy(object): self.context = context self.dialect = context.dialect self.closed = False - self.cursor = context.cursor + self.cursor = self._saved_cursor = context.cursor self.connection = context.root_connection self._echo = self.connection._echo and \ context.engine._should_log_debug() @@ -2304,12 +2304,12 @@ class ResultProxy(object): regardless of database backend. """ - return self.cursor.lastrowid + return self._saved_cursor.lastrowid def _cursor_description(self): """May be overridden by subclasses.""" - return self.cursor.description + return self._saved_cursor.description def _autoclose(self): """called by the Connection to autoclose cursors that have no pending diff --git a/lib/sqlalchemy/test/requires.py b/lib/sqlalchemy/test/requires.py index 501f0e24d..dc0b29228 100644 --- a/lib/sqlalchemy/test/requires.py +++ b/lib/sqlalchemy/test/requires.py @@ -247,6 +247,12 @@ def sane_rowcount(fn): skip_if(lambda: not testing.db.dialect.supports_sane_rowcount) ) +def dbapi_lastrowid(fn): + return _chain_decorators_on( + fn, + fails_on_everything_except('mysql+mysqldb', 'sqlite+pysqlite') + ) + def sane_multi_rowcount(fn): return _chain_decorators_on( fn, diff --git a/test/sql/test_query.py b/test/sql/test_query.py index 2093e1f69..57f434a98 100644 --- a/test/sql/test_query.py +++ b/test/sql/test_query.py @@ -619,6 +619,16 @@ class QueryTest(TestBase): eq_(r[users.c.user_name], 'jack') eq_(r.user_name, 'jack') + @testing.requires.dbapi_lastrowid + def test_native_lastrowid(self): + r = testing.db.execute( + users.insert(), + {'user_id':1, 'user_name':'ed'} + ) + + eq_(r.lastrowid, 1) + + def test_graceful_fetch_on_non_rows(self): """test that calling fetchone() etc. on a result that doesn't return rows fails gracefully. |
