﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
10398	It may cause error in django.db.backends.last_executed_query.	bear330	nobody	"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."	Bug	closed	Database layer (models, ORM)	1.0	Normal	needsinfo	unicode pickle db backends		Accepted	0	0	0	0	0	0
