]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
mxodbc supports rowcount, just have to snag before the cursor is closed.
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 28 Feb 2010 22:05:39 +0000 (22:05 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 28 Feb 2010 22:05:39 +0000 (22:05 +0000)
lib/sqlalchemy/connectors/mxodbc.py
lib/sqlalchemy/connectors/pyodbc.py
lib/sqlalchemy/dialects/mssql/mxodbc.py
lib/sqlalchemy/dialects/mssql/pyodbc.py
test/orm/test_naturalpks.py

index ef7852f61bc0e09045144cd6324823b55f0d1f9b..49c5a732937721769048640996895d11028093db 100644 (file)
@@ -6,7 +6,7 @@ from sqlalchemy.connectors import Connector
 
 class MxODBCConnector(Connector):
     driver='mxodbc'
-    supports_sane_rowcount = False
+    
     supports_sane_multi_rowcount = False
     supports_unicode_statements = False
     supports_unicode_binds = False
index 6abdbf0ddc11726aa2904cd8e5537c7242ef2e64..ce8e84c33cb5c9f39e6856789854d50c01713091 100644 (file)
@@ -7,7 +7,7 @@ import urllib
 
 class PyODBCConnector(Connector):
     driver='pyodbc'
-    supports_sane_rowcount = False
+
     supports_sane_multi_rowcount = False
     # PyODBC unicode is broken on UCS-4 builds
     supports_unicode = sys.maxunicode == 65535
index 38d559e2ba819e90f4d5df36ef19e5212db36790..73cf1346e02082e5f11e9946e85cfa8c094ade87 100644 (file)
@@ -7,12 +7,23 @@ from sqlalchemy.dialects.mssql.base import MSDialect
 from sqlalchemy.dialects.mssql.pyodbc import MSExecutionContext_pyodbc
 
 # The pyodbc execution context seems to work for mxODBC; reuse it here
-MSExecutionContext_mxodbc = MSExecutionContext_pyodbc
+
+class MSExecutionContext_mxodbc(MSExecutionContext_pyodbc):
+    
+    def post_exec(self):
+        # snag rowcount before the cursor is closed
+        if not self.cursor.description:
+            self._rowcount = self.cursor.rowcount
+        super(MSExecutionContext_mxodbc, self).post_exec()
+        
+    @property
+    def rowcount(self):
+        if hasattr(self, '_rowcount'):
+            return self._rowcount
+        else:
+            return self.cursor.rowcount
 
 class MSDialect_mxodbc(MxODBCConnector, MSDialect):
-    # FIXME: yikes, plain rowcount doesn't work ?
-    supports_sane_rowcount = False #True
-    supports_sane_multi_rowcount = False
 
     execution_ctx_cls = MSExecutionContext_mxodbc
 
index 23ab0320cb0d8bd06943073c7a3673eb8458e4f2..a4c7d4bfcf7e6dd155a529b2d020111238e9ce1e 100644 (file)
@@ -50,8 +50,6 @@ class MSExecutionContext_pyodbc(MSExecutionContext):
 
 
 class MSDialect_pyodbc(PyODBCConnector, MSDialect):
-    supports_sane_rowcount = True
-    supports_sane_multi_rowcount = False
 
     execution_ctx_cls = MSExecutionContext_pyodbc
 
index b4f1bba8055c8d5ac16aab6141b5d8423c3e3540..b061766bf3b151df0a25521397e0425f93b6edb6 100644 (file)
@@ -5,7 +5,7 @@ Primary key changing capabilities and passive/non-passive cascading updates.
 from sqlalchemy.test.testing import eq_, assert_raises, assert_raises_message
 import sqlalchemy as sa
 from sqlalchemy.test import testing
-from sqlalchemy import Integer, String, ForeignKey
+from sqlalchemy import Integer, String, ForeignKey, Unicode
 from sqlalchemy.test.schema import Table, Column
 from sqlalchemy.orm import mapper, relation, create_session
 from sqlalchemy.test.testing import eq_
@@ -375,7 +375,7 @@ class ReversePKsTest(_base.MappedTest):
             'user', metadata,
             Column('code', Integer, primary_key=True),
             Column('status', Integer, primary_key=True),
-            Column('username', String(50), nullable=False),
+            Column('username', Unicode(50), nullable=False),
             )
     
     @classmethod