#10398: It may cause error in django.db.backends.last_executed_query.
----------------------------------------+-----------------------------------
 Reporter:  bear330                     |       Owner:  nobody    
   Status:  new                         |   Milestone:            
Component:  Uncategorized               |     Version:  1.0       
 Keywords:  unicode pickle db backends  |       Stage:  Unreviewed
Has_patch:  0                           |  
----------------------------------------+-----------------------------------
 In CursorDebugWrapper.execute:

 {{{
         start = time()
         try:
             return self.cursor.execute(sql, params)
         finally:
             stop = time()
             sql = self.db.ops.last_executed_query(self.cursor, sql,
 params)
             self.db.queries.append({
                 'sql': sql,
                 'time': "%.3f" % (stop - start),
             })
 }}}

 Line: sql = self.db.ops.last_executed_query(self.cursor, sql, params)
 Might cause error if params can't be convert to unicode.
 In last_executed_query:

 {{{
         to_unicode = lambda s: force_unicode(s, strings_only=True)
         if isinstance(params, (list, tuple)):
             u_params = tuple([to_unicode(val) for val in params])
         else:
             u_params = dict([(to_unicode(k), to_unicode(v)) for k, v in
 params.items()])
 }}}

 This will fail if params contains '''pickled object''' in some situation.

 It should be wrapped by try ... except block.
 =>

 {{{
     def last_executed_query(self, cursor, sql, params):
         from django.utils.encoding import smart_unicode, force_unicode

         # Convert params to contain Unicode values.
         to_unicode = lambda s: force_unicode(s, strings_only=True)
         try:
             if isinstance(params, (list, tuple)):
                 u_params = tuple([to_unicode(val) for val in params])
             else:
                 u_params = dict([(to_unicode(k), to_unicode(v)) for k, v
 in params.items()])

             return smart_unicode(sql) % u_params
         except:
             return smart_unicode(sql)
 }}}

 Thanks.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/10398>
Django <http://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to