Opened 14 years ago
Closed 13 years ago
#17932 closed Bug (fixed)
Test suite fails to run under Oracle
| Reported by: | Aymeric Augustin | Owned by: | nobody |
|---|---|---|---|
| Component: | contrib.admin | Version: | dev |
| Severity: | Release blocker | Keywords: | |
| Cc: | anssi.kaariainen@… | Triage Stage: | Accepted |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
For some reason I don't quite understand, starting with r17635, the test suite fails to run under Oracle:
Creating test database for alias 'default'...
Traceback (most recent call last):
File "runtests.py", line 323, in <module>
options.failfast, args)
File "runtests.py", line 166, in django_tests
failures = test_runner.run_tests(test_labels, extra_tests=extra_tests)
File "/var/lib/jenkins/jobs/Django + Oracle/workspace/django/test/simple.py", line 381, in run_tests
old_config = self.setup_databases()
File "/var/lib/jenkins/jobs/Django + Oracle/workspace/django/test/simple.py", line 317, in setup_databases
self.verbosity, autoclobber=not self.interactive)
File "/var/lib/jenkins/jobs/Django + Oracle/workspace/django/db/backends/creation.py", line 271, in create_test_db
load_initial_data=False)
File "/var/lib/jenkins/jobs/Django + Oracle/workspace/django/core/management/__init__.py", line 150, in call_command
return klass.execute(*args, **defaults)
File "/var/lib/jenkins/jobs/Django + Oracle/workspace/django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "/var/lib/jenkins/jobs/Django + Oracle/workspace/django/core/management/base.py", line 371, in handle
return self.handle_noargs(**options)
File "/var/lib/jenkins/jobs/Django + Oracle/workspace/django/core/management/commands/syncdb.py", line 102, in handle_noargs
cursor.execute(statement)
File "/var/lib/jenkins/jobs/Django + Oracle/workspace/django/db/backends/oracle/base.py", line 674, in execute
return self.cursor.execute(query, self._param_generator(params))
django.db.utils.DatabaseError: ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-320: the declaration of the type of this expression is incomplete or malformed
The problem is reproducible by running the admin_changelist tests in isolation.
Setting component to "admin" because the bug appears in the "admin" tests, but that may be totally wrong.
Attachments (1)
Change History (11)
comment:1 by , 14 years ago
| Description: | modified (diff) |
|---|
comment:2 by , 14 years ago
by , 14 years ago
| Attachment: | 17932.patch added |
|---|
comment:3 by , 14 years ago
| Has patch: | set |
|---|
I think I just about fell out of my chair when I read that.
I verified that this is the issue. The admin_changelist tests run just fine when the column is renamed.
comment:6 by , 14 years ago
| Cc: | added |
|---|
Not this tickets or todays problem, but would there be need for validation to complain on columns named "number" when running on Oracle? It seems this isn't the first time this has bitten us. If an user gets bitten by this, he will have even harder time solving the issue. Oracle's nice error message doesn't help much here.
I don't know how hard writing that validation is, but it might be worth it. Is there some precedence for doing/not doing this? I will open a ticket for this in a couple of days if there isn't complaints against doing this validation.
comment:7 by , 14 years ago
IIRC Django can do backend-specific checks. I just don't know how to extract the list of forbidden names.
Anyway, it's certainly worth a ticket.
comment:8 by , 14 years ago
Actually this idea is part of the validation improvements GSoC proposal:
https://code.djangoproject.com/wiki/SummerOfCode2012#Validationfunctionalityrevamping
comment:9 by , 13 years ago
| Has patch: | unset |
|---|---|
| Resolution: | fixed |
| Status: | closed → reopened |
Reopened, as the problem is still occurring. I'm getting an error when syncdb tries to execute the following SQL against Oracle 10g XE:
CREATE OR REPLACE TRIGGER "ADMIN_CHANGELIST_EVENT_TR"
BEFORE INSERT ON "ADMIN_CHANGELIST_EVENT"
FOR EACH ROW
WHEN (new."ID" IS NULL)
BEGIN
SELECT "ADMIN_CHANGELIST_EVENT_SQ".nextval
INTO :new."ID" FROM dual;
END;
The error is
django.db.utils.DatabaseError: ORA-06552: PL/SQL: Compilation unit
analysis terminated
ORA-06553: PLS-320: the declaration of the type of this expression is
incomplete or malformed
This time it's due to a column named 'date', and just to confuse things further, the column name is accepted for the table creation itself, but fails for the trigger creation. Adding "db_column='event_date'" to the relevant model definition caused the failure to disappear.
comment:10 by , 13 years ago
| Resolution: | → fixed |
|---|---|
| Status: | reopened → closed |
We've hit this before (r12358) -- Oracle doesn't like columns named "number".