summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/connectors/mxodbc.py2
-rw-r--r--lib/sqlalchemy/connectors/pyodbc.py2
-rw-r--r--lib/sqlalchemy/dialects/mssql/mxodbc.py19
-rw-r--r--lib/sqlalchemy/dialects/mssql/pyodbc.py2
-rw-r--r--test/orm/test_naturalpks.py4
5 files changed, 19 insertions, 10 deletions
diff --git a/lib/sqlalchemy/connectors/mxodbc.py b/lib/sqlalchemy/connectors/mxodbc.py
index ef7852f61..49c5a7329 100644
--- a/lib/sqlalchemy/connectors/mxodbc.py
+++ b/lib/sqlalchemy/connectors/mxodbc.py
@@ -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
diff --git a/lib/sqlalchemy/connectors/pyodbc.py b/lib/sqlalchemy/connectors/pyodbc.py
index 6abdbf0dd..ce8e84c33 100644
--- a/lib/sqlalchemy/connectors/pyodbc.py
+++ b/lib/sqlalchemy/connectors/pyodbc.py
@@ -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
diff --git a/lib/sqlalchemy/dialects/mssql/mxodbc.py b/lib/sqlalchemy/dialects/mssql/mxodbc.py
index 38d559e2b..73cf1346e 100644
--- a/lib/sqlalchemy/dialects/mssql/mxodbc.py
+++ b/lib/sqlalchemy/dialects/mssql/mxodbc.py
@@ -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
diff --git a/lib/sqlalchemy/dialects/mssql/pyodbc.py b/lib/sqlalchemy/dialects/mssql/pyodbc.py
index 23ab0320c..a4c7d4bfc 100644
--- a/lib/sqlalchemy/dialects/mssql/pyodbc.py
+++ b/lib/sqlalchemy/dialects/mssql/pyodbc.py
@@ -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
diff --git a/test/orm/test_naturalpks.py b/test/orm/test_naturalpks.py
index b4f1bba80..b061766bf 100644
--- a/test/orm/test_naturalpks.py
+++ b/test/orm/test_naturalpks.py
@@ -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