]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- break out binary insert against None, disable for freetds for now
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 24 May 2015 21:08:02 +0000 (17:08 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 24 May 2015 21:16:51 +0000 (17:16 -0400)
(cherry picked from commit 0198d9aa5fee96c7523cc3e827baaba442c0ba02)

- backport no freetds rule

test/dialect/mssql/test_reflection.py
test/dialect/mssql/test_types.py
test/requirements.py

index e93162a8e987e788cc419d4bb0f5ad579abb303b..ff2f593260f1d31ec63e751e938e8089a88b34ca 100644 (file)
@@ -204,6 +204,10 @@ class InfoCoerceUnicodeTest(fixtures.TestBase, AssertsCompiledSQL):
 class ReflectHugeViewTest(fixtures.TestBase):
     __only_on__ = 'mssql'
 
+    # crashes on freetds 0.91, not worth it
+    __requires__ = ('no_mssql_freetds',)
+
+    @testing.requires.no_mssql_freetds
     def setup(self):
         self.col_num = 150
 
index 24f0eb0be5d4f163cc7859b26bbe801eb40ec339..96c2376d1bc278646ffcdce40545c15af0896359 100644 (file)
@@ -719,18 +719,6 @@ class BinaryTest(fixtures.TestBase, AssertsExecutionResults):
             pickled=testobj2,
         )
 
-        # TODO: pyodbc does not seem to accept "None" for a VARBINARY
-        # column (data=None). error:  [Microsoft][ODBC SQL Server
-        # Driver][SQL Server]Implicit conversion from data type varchar
-        # to varbinary is not allowed. Use the CONVERT function to run
-        # this query. (257) binary_table.insert().execute(primary_id=3,
-        # misc='binary_data_two.dat', data=None, data_image=None,
-        # data_slice=stream2[0:99], pickled=None)
-
-        binary_table.insert().execute(
-            primary_id=3,
-            misc='binary_data_two.dat', data_image=None,
-            data_slice=stream2[0:99], pickled=None)
         for stmt in \
             binary_table.select(order_by=binary_table.c.primary_id), \
                 text(
@@ -754,6 +742,43 @@ class BinaryTest(fixtures.TestBase, AssertsExecutionResults):
             eq_(testobj3.moredata, l[0]['mypickle'].moredata)
             eq_(l[0]['mypickle'].stuff, 'this is the right stuff')
 
+    @testing.requires.no_mssql_freetds
+    def test_binary_none(self):
+        # TODO: pyodbc does not seem to accept "None" for a VARBINARY
+        # column (data=None). error:  [Microsoft][ODBC SQL Server
+        # Driver][SQL Server]Implicit conversion from data type varchar
+        # to varbinary is not allowed. Use the CONVERT function to run
+        # this query. (257) binary_table.insert().execute(primary_id=3,
+        # misc='binary_data_two.dat', data=None, data_image=None,
+        # data_slice=stream2[0:99], pickled=None)
+
+        stream2 = self.load_stream('binary_data_two.dat')
+
+        binary_table.insert().execute(
+            primary_id=3,
+            misc='binary_data_two.dat', data_image=None,
+            data_slice=stream2[0:99], pickled=None)
+        for stmt in \
+            binary_table.select(), \
+                text(
+                    'select * from binary_table',
+                    typemap=dict(
+                        data=mssql.MSVarBinary(8000),
+                        data_image=mssql.MSImage,
+                        data_slice=types.BINARY(100), pickled=PickleType,
+                        mypickle=MyPickleType),
+                    bind=testing.db):
+            row = stmt.execute().first()
+            eq_(
+                row['pickled'], None
+            )
+            eq_(
+                row['data_image'], None
+            )
+            eq_(
+                row['data_slice'], stream2[0:99]
+            )
+
     def load_stream(self, name, len=3000):
         fp = open(
             os.path.join(os.path.dirname(__file__), "..", "..", name), 'rb')
index 9f7fbab1c41e8fa0572310ab708079b81ebd1364..c975994e1915a6f26f169e999272b78d83050905 100644 (file)
@@ -763,12 +763,23 @@ class DefaultRequirements(SuiteRequirements):
                 "Stability issues with coverage + py3k"
             )
 
+    @property
+    def no_mssql_freetds(self):
+        return skip_if([
+            LambdaPredicate(
+                lambda config: (
+                    (against(config, 'mssql+pyodbc') and
+                     config.db.dialect.freetds)
+                    or against(config, 'mssql+pymssql')
+                )
+            )
+        ])
+
     @property
     def selectone(self):
         """target driver must support the literal statement 'select 1'"""
         return skip_if(["oracle", "firebird"], "non-standard SELECT scalar syntax")
 
-
     @property
     def mysql_fully_case_sensitive(self):
         return only_if(self._has_mysql_fully_case_sensitive)