]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- fix to bind param processing such that "False" values (like blank strings)
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 16 Aug 2007 18:25:11 +0000 (18:25 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 16 Aug 2007 18:25:11 +0000 (18:25 +0000)
  still get processed/encoded

CHANGES
lib/sqlalchemy/sql.py
test/sql/testtypes.py

diff --git a/CHANGES b/CHANGES
index bfc55282f4619143fae6ef57f7253c96874aa280..1dcf0c42ba3107d9106c0c8a03a661cc433ddfd0 100644 (file)
--- 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
index 7d4bbcc7855fb4f31022763e7d10d26878924ddd..bad60bb3c014f58525169eebd4edf3310ac86372 100644 (file)
@@ -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()
             ])
index fcec3d9c4e6ddbec3c2921c77a8c643176ec8df7..47f6129d54630ec23b4124159aeef53842970f02 100644 (file)
@@ -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