diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-12-13 21:06:38 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-12-13 21:06:38 +0000 |
commit | e1a52eb7dfb19edf3baeff6d2878b6b0afb9a04d (patch) | |
tree | c85e9a9fa87166b08f8ab12dbcfd107c48b78220 | |
parent | 8061aaaed94924067122dc7568e8cb0e55eda329 (diff) | |
download | sqlalchemy-e1a52eb7dfb19edf3baeff6d2878b6b0afb9a04d.tar.gz |
- patch that makes MySQL rowcount work correctly! [ticket:396]
-rw-r--r-- | CHANGES | 1 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/mysql.py | 8 | ||||
-rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 2 | ||||
-rw-r--r-- | test/orm/unitofwork.py | 2 |
4 files changed, 10 insertions, 3 deletions
@@ -5,6 +5,7 @@ - fixed QueuePool bug whereby its better able to reconnect to a database that was not reachable (thanks to Sébastien Lelong), also fixed dispose() method +- patch that makes MySQL rowcount work correctly! [ticket:396] 0.3.2 - major connection pool bug fixed. fixes MySQL out of sync diff --git a/lib/sqlalchemy/databases/mysql.py b/lib/sqlalchemy/databases/mysql.py index c795ae7d4..19dedd826 100644 --- a/lib/sqlalchemy/databases/mysql.py +++ b/lib/sqlalchemy/databases/mysql.py @@ -13,6 +13,7 @@ import sqlalchemy.exceptions as exceptions try: import MySQLdb as mysql + import MySQLdb.constants.CLIENT as CLIENT_FLAGS except: mysql = None @@ -270,6 +271,11 @@ class MySQLDialect(ansisql.ANSIDialect): coercetype('use_unicode', bool) # this could break SA Unicode type coercetype('charset', str) # this could break SA Unicode type # TODO: what about options like "ssl", "cursorclass" and "conv" ? + + client_flag = opts.get('client_flag', 0) + client_flag |= CLIENT_FLAGS.FOUND_ROWS + opts['client_flag'] = client_flag + return [[], opts] def create_execution_context(self): @@ -279,7 +285,7 @@ class MySQLDialect(ansisql.ANSIDialect): return sqltypes.adapt_type(typeobj, colspecs) def supports_sane_rowcount(self): - return False + return True def compiler(self, statement, bindparams, **kwargs): return MySQLCompiler(self, statement, bindparams, **kwargs) diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index d7449c7ca..78fd3a1cc 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -960,7 +960,7 @@ class Mapper(object): mapper._postfetch(connection, table, obj, c, c.last_updated_params()) updated_objects.add(obj) - rows += c.cursor.rowcount + rows += c.rowcount if c.supports_sane_rowcount() and rows != len(update): raise exceptions.ConcurrentModificationError("Updated rowcount %d does not match number of objects updated %d" % (rows, len(update))) diff --git a/test/orm/unitofwork.py b/test/orm/unitofwork.py index 700597e08..ed3b9fca1 100644 --- a/test/orm/unitofwork.py +++ b/test/orm/unitofwork.py @@ -100,7 +100,7 @@ class VersioningTest(UnitOfWorkTest): version_table.delete().execute() UnitOfWorkTest.tearDown(self) - @testbase.unsupported('mysql', 'mssql') + @testbase.unsupported('mssql') def testbasic(self): s = create_session() class Foo(object):pass |