﻿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
9814	Python 2.6's sqlite refuses 8-bit SafeStrings	Karen Tracey	nobody	"r9467/r9469 modified a test in modeltests/field_defaults to set a field value to a utf-8 encoded !SafeString.  This test now fails on Python 2.6 when using sqlite as the backend:

{{{
======================================================================
FAIL: Doctest: modeltests.field_defaults.models.__test__.API_TESTS
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""d:\u\kmt\django\trunk\django\test\_doctest.py"", line 2180, in runTest
    raise self.failureException(self.format_failure(new.getvalue()))
AssertionError: Failed doctest test for modeltests.field_defaults.models.__test__.API_TESTS
  File ""D:\u\kmt\django\trunk\tests\modeltests\field_defaults\models.py"", line unknown line number, in API_TESTS

----------------------------------------------------------------------
File ""D:\u\kmt\django\trunk\tests\modeltests\field_defaults\models.py"", line ?, in modeltests.field_defaults.models.__test__.API_TESTS
Failed example:
    a.save()
Exception raised:
    Traceback (most recent call last):
      File ""d:\u\kmt\django\trunk\django\test\_doctest.py"", line 1267, in __run
        compileflags, 1) in test.globs
      File ""<doctest modeltests.field_defaults.models.__test__.API_TESTS[13]>"", line 1, in <module>
        a.save()
      File ""d:\u\kmt\django\trunk\django\db\models\base.py"", line 328, in save
        self.save_base(force_insert=force_insert, force_update=force_update)
      File ""d:\u\kmt\django\trunk\django\db\models\base.py"", line 379, in save_base
        rows = manager.filter(pk=pk_val)._update(values)
      File ""d:\u\kmt\django\trunk\django\db\models\query.py"", line 435, in _update
        return query.execute_sql(None)
      File ""d:\u\kmt\django\trunk\django\db\models\sql\subqueries.py"", line 117, in execute_sql
        cursor = super(UpdateQuery, self).execute_sql(result_type)
      File ""d:\u\kmt\django\trunk\django\db\models\sql\query.py"", line 1756, in execute_sql
        cursor.execute(sql, params)
      File ""d:\u\kmt\django\trunk\django\db\backends\sqlite3\base.py"", line 169, in execute
        return Database.Cursor.execute(self, query, params)
    ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.

----------------------------------------------------------------------
Ran 1 test in 0.030s

FAILED (failures=1)
}}}

This can be fixed as regular `str` was fixed for Python 2.6 (r8276) by adding `Database.register_adapter(SafeString, lambda s:s.decode('utf-8'))` to the appropriate spot in django/db/sqlite3/base.py.  That seems correct but just in case I'm missing something I figured I'd check first before just doing it.  (I'm not entirely sure when app code would be sending !SafeStrings to the DB, but I suppose it can happen and should be supported?) Feedback?
"		closed	Database layer (models, ORM)	1.0		fixed			Unreviewed	0	0	0	0	0	0
