then converted, if requested, into Integer
or Float, or otherwise kept as the lossless
Decimal [ticket:1840].
+
+- mssql
+ - If server_version_info is outside the usual
+ range of (8, ), (9, ), (10, ), a warning is emitted
+ which suggests checking that the FreeTDS version
+ configuration is using 7.0 or 8.0, not 4.2.
+ [ticket:1825]
- firebird
- Fixed incorrect signature in do_execute(), error
def initialize(self, connection):
super(MSDialect, self).initialize(connection)
+ if self.server_version_info[0] not in range(8, 17):
+ # FreeTDS with version 4.2 seems to report here
+ # a number like "95.10.255". Don't know what
+ # that is. So emit warning.
+ util.warn(
+ "Unrecognized server version info '%s'. Version specific "
+ "behaviors may not function properly. If using ODBC "
+ "with FreeTDS, ensure server version 7.0 or 8.0, not 4.2, "
+ "is configured in the FreeTDS configuration." %
+ ".".join(str(x) for x in self.server_version_info) )
if self.server_version_info >= MS_2005_VERSION and \
'implicit_returning' not in self.__dict__:
self.implicit_returning = True
from sqlalchemy.dialects.mssql import pyodbc, mxodbc
from sqlalchemy.engine import url
from sqlalchemy.test import *
-from sqlalchemy.test.testing import eq_, emits_warning_on
+from sqlalchemy.test.testing import eq_, emits_warning_on, assert_raises_message
class CompileTest(TestBase, AssertsCompiledSQL):
connection = dialect.create_connect_args(u)
eq_([['DRIVER={SQL Server};Server=hostspec;Database=database;UID=username;PWD=password'], {}], connection)
+ def test_bad_freetds_warning(self):
+ engine = engines.testing_engine()
+ def _bad_version(connection):
+ return (95, 10, 255)
+ engine.dialect._get_server_version_info = _bad_version
+ assert_raises_message(
+ exc.SAWarning, "Unrecognized server version info", engine.connect
+ )
class TypesTest(TestBase, AssertsExecutionResults, ComparesTables):
__only_on__ = 'mssql'