diff options
| -rw-r--r-- | lib/sqlalchemy/connectors/mxodbc.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/connectors/pyodbc.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mssql/mxodbc.py | 19 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mssql/pyodbc.py | 2 | ||||
| -rw-r--r-- | test/orm/test_naturalpks.py | 4 |
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 |
