]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- If server_version_info is outside the usual
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 2 Jul 2010 16:57:15 +0000 (12:57 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 2 Jul 2010 16:57:15 +0000 (12:57 -0400)
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
lib/sqlalchemy/dialects/mssql/base.py
test/dialect/test_mssql.py

diff --git a/CHANGES b/CHANGES
index a20ff1584d5241c3f50115d05a544d4c4f8ae885..22badc790f30ce50d540753fed5c5f75900782d4 100644 (file)
--- 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 
index 066ab8d04a60e50a46efb7f36da1687827e7f99c..24067f1191ed2c775b27c39b29a16e4807bcaf95 100644 (file)
@@ -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
index 21395bd3666ccc5de29b9e3c7d0cae3917024fc4..65066be74d311a1116eb0a26386af94269d3b609 100644 (file)
@@ -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'