From: Mike Bayer Date: Thu, 16 Aug 2007 18:25:11 +0000 (+0000) Subject: - fix to bind param processing such that "False" values (like blank strings) X-Git-Tag: rel_0_4beta4~68 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13af7230dcb0bf720a7a46f701404fa16b298c13;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - fix to bind param processing such that "False" values (like blank strings) still get processed/encoded --- diff --git a/CHANGES b/CHANGES index bfc55282f4..1dcf0c42ba 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +0.4.0beta4 +- fix to bind param processing such that "False" values (like blank strings) + still get processed/encoded + 0.4.0beta3 - sql types optimization: - new performance tests show a combined mass-insert/mass-select test diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 7d4bbcc785..bad60bb3c0 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -862,23 +862,21 @@ class ClauseParameters(object): def get_original_dict(self): return dict([(name, value) for (b, name, value) in self.__binds.values()]) + def __get_processed(self, key, processors): + if key in processors: + return processors[key](self.__binds[key][2]) + else: + return self.__binds[key][2] + def get_raw_list(self, processors): -# (bind, name, value) = self.__binds[key] - return [ - (key in processors) and - processors[key](self.__binds[key][2]) or - self.__binds[key][2] - for key in self.positional - ] + return [self.__get_processed(key, processors) for key in self.positional] def get_raw_dict(self, processors, encode_keys=False): if encode_keys: return dict([ ( key.encode(self.dialect.encoding), - (key in processors) and - processors[key](self.__binds[key][2]) or - self.__binds[key][2] + self.__get_processed(key, processors) ) for key in self.keys() ]) @@ -886,9 +884,7 @@ class ClauseParameters(object): return dict([ ( key, - (key in processors) and - processors[key](self.__binds[key][2]) or - self.__binds[key][2] + self.__get_processed(key, processors) ) for key in self.keys() ]) diff --git a/test/sql/testtypes.py b/test/sql/testtypes.py index fcec3d9c4e..47f6129d54 100644 --- a/test/sql/testtypes.py +++ b/test/sql/testtypes.py @@ -184,7 +184,10 @@ class UnicodeTest(AssertMixin): unicode_table.create() def tearDownAll(self): unicode_table.drop() - + + def tearDown(self): + unicode_table.delete().execute() + def testbasic(self): assert unicode_table.c.unicode_varchar.type.length == 250 rawdata = 'Alors vous imaginez ma surprise, au lever du jour, quand une dr\xc3\xb4le de petit voix m\xe2\x80\x99a r\xc3\xa9veill\xc3\xa9. Elle disait: \xc2\xab S\xe2\x80\x99il vous pla\xc3\xaet\xe2\x80\xa6 dessine-moi un mouton! \xc2\xbb\n' @@ -206,6 +209,10 @@ class UnicodeTest(AssertMixin): else: self.assert_(not isinstance(x['plain_varchar'], unicode) and x['plain_varchar'] == rawdata) + def testblanks(self): + unicode_table.insert().execute(unicode_varchar=u'') + assert select([unicode_table.c.unicode_varchar]).scalar() == u'' + def testengineparam(self): """tests engine-wide unicode conversion""" prev_unicode = testbase.db.engine.dialect.convert_unicode