From e20c8ce904fd5aa22c7110c90ad14a8e5f624403 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 24 May 2015 17:08:02 -0400 Subject: [PATCH] - break out binary insert against None, disable for freetds for now (cherry picked from commit 0198d9aa5fee96c7523cc3e827baaba442c0ba02) - backport no freetds rule --- test/dialect/mssql/test_reflection.py | 4 +++ test/dialect/mssql/test_types.py | 49 ++++++++++++++++++++------- test/requirements.py | 13 ++++++- 3 files changed, 53 insertions(+), 13 deletions(-) diff --git a/test/dialect/mssql/test_reflection.py b/test/dialect/mssql/test_reflection.py index e93162a8e9..ff2f593260 100644 --- a/test/dialect/mssql/test_reflection.py +++ b/test/dialect/mssql/test_reflection.py @@ -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 diff --git a/test/dialect/mssql/test_types.py b/test/dialect/mssql/test_types.py index 24f0eb0be5..96c2376d1b 100644 --- a/test/dialect/mssql/test_types.py +++ b/test/dialect/mssql/test_types.py @@ -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') diff --git a/test/requirements.py b/test/requirements.py index 9f7fbab1c4..c975994e19 100644 --- a/test/requirements.py +++ b/test/requirements.py @@ -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) -- 2.47.3