Opened 17 years ago
Closed 17 years ago
#11051 closed (fixed)
Oracle backend fails null_fk regression tests
| Reported by: | Matt Boersma | Owned by: | nobody |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | dev |
| Severity: | Keywords: | Oracle oracle | |
| Cc: | Erin Kelly, Jirka Vejrazka | Triage Stage: | Unreviewed |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
These must be due to Oracle's nonstandard handling of NULL vs. empty string for VARCHAR columns.
C:\projects\django-trunk\tests>runtests.py --settings=testsettings.oracle null_fk
======================================================================
FAIL: Doctest: regressiontests.null_fk.models.__test__.API_TESTS
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\projects\django-trunk\django\test\_doctest.py", line 2180, in runTest
raise self.failureException(self.format_failure(new.getvalue()))
AssertionError: Failed doctest test for regressiontests.null_fk.models.__test__.API_TESTS
File "C:\projects\django-trunk\tests\regressiontests\null_fk\models.py", line unknown line number, in API_TESTS
----------------------------------------------------------------------
File "C:\projects\django-trunk\tests\regressiontests\null_fk\models.py", line ?, in regressiontests.null_fk.models.__test__.API_TESTS
Failed example:
[(c.id, c.comment_text, c.post) for c in comments]
Exception raised:
Traceback (most recent call last):
File "C:\projects\django-trunk\django\test\_doctest.py", line 1267, in __run
compileflags, 1) in test.globs
File "<doctest regressiontests.null_fk.models.__test__.API_TESTS[10]>", line 1, in <module>
[(c.id, c.comment_text, c.post) for c in comments]
File "C:\projects\django-trunk\django\db\models\base.py", line 325, in __repr__
u = unicode(self)
TypeError: coercing to Unicode: need string or buffer, NoneType found
----------------------------------------------------------------------
File "C:\projects\django-trunk\tests\regressiontests\null_fk\models.py", line ?, in regressiontests.null_fk.models.__test__.API_TESTS
Failed example:
Comment.objects.select_related('post').filter(post__isnull=True)[0].post is None
Expected:
True
Got:
False
This happens in the pre-1.1 trunk as of revision [10723]. It hasn't caused real-world problems as far as I know, but I've entered it here as a bug so we don't lose track of it.
Attachments (1)
Change History (4)
by , 17 years ago
| Attachment: | oracle_null_fk_fix.diff added |
|---|
comment:1 by , 17 years ago
| Cc: | added |
|---|---|
| Has patch: | set |
| Resolution: | → fixed |
| Status: | new → closed |
comment:2 by , 17 years ago
| Resolution: | fixed |
|---|---|
| Status: | closed → reopened |
Ehm, I guess I should leave this open until someone confirms :)
comment:3 by , 17 years ago
| Resolution: | → fixed |
|---|---|
| Status: | reopened → closed |
Note:
See TracTickets
for help on using tickets.
I tried to track down this bug during the EuroDjangoCon sprint. Took a bit longer than expected (newbie tax :), but I found out that it only happened when specific fields were passed to select_related(). It was caused by Oracle backend's [browser:/django/trunk/django/db/backends/oracle/query.py?rev=10049#L41 resolve_columns()] returning fields as list, while this is expected to be a tuple later in [browser:/django/trunk/django/db/models/query.py?rev=10648#L952 get_cached_row()]
A simple modification to resolve_columns() fixed the problem, patch attached