Opened 13 years ago
Closed 12 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 , 13 years ago
Description: | modified (diff) |
---|
comment:2 by , 13 years ago
by , 13 years ago
Attachment: | 17932.patch added |
---|
comment:3 by , 13 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 , 13 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 , 13 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 , 13 years ago
Actually this idea is part of the validation improvements GSoC proposal:
https://code.djangoproject.com/wiki/SummerOfCode2012#Validationfunctionalityrevamping
comment:9 by , 12 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, even though the offending column name doesn't appear in the trigger definition. Adding "db_column='event_date'" to the relevant model definition caused the failure to disappear.
I've added a pull request for this: https://github.com/django/django/pull/102
comment:10 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
We've hit this before (r12358) -- Oracle doesn't like columns named "number".