From 64d92c836ce029e33b57bcabd4ca76944549e022 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 2 Jul 2010 12:57:15 -0400 Subject: [PATCH] - 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] --- CHANGES | 7 +++++++ lib/sqlalchemy/dialects/mssql/base.py | 10 ++++++++++ test/dialect/test_mssql.py | 10 +++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index a20ff1584d..22badc790f 100644 --- a/CHANGES +++ b/CHANGES @@ -148,6 +148,13 @@ CHANGES 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 diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index 066ab8d04a..24067f1191 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -1015,6 +1015,16 @@ class MSDialect(default.DefaultDialect): 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 diff --git a/test/dialect/test_mssql.py b/test/dialect/test_mssql.py index 21395bd366..65066be74d 100644 --- a/test/dialect/test_mssql.py +++ b/test/dialect/test_mssql.py @@ -9,7 +9,7 @@ from sqlalchemy.databases import mssql 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): @@ -751,6 +751,14 @@ class ParseConnectTest(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' -- 2.47.2