class MxODBCConnector(Connector):
driver='mxodbc'
- supports_sane_rowcount = False
+
supports_sane_multi_rowcount = False
supports_unicode_statements = False
supports_unicode_binds = False
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
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
class MSDialect_pyodbc(PyODBCConnector, MSDialect):
- supports_sane_rowcount = True
- supports_sane_multi_rowcount = False
execution_ctx_cls = MSExecutionContext_pyodbc
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_
'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