Ticket #6808 (closed defect: fixed)
Opened 4 years ago
Last modified 3 years ago
Exception: column name is not unique
| Reported by: | geert@… | Owned by: | ecarter |
|---|---|---|---|
| Priority: | high | Milestone: | 0.11 |
| Component: | admin/web | Version: | devel |
| Severity: | normal | Keywords: | exception column name not unique |
| Cc: | |||
| Release Notes: | |||
| API Changes: | |||
Description (last modified by cboos) (diff)
In the admin section, add a version that already exists.
Python Traceback
Traceback (most recent call last):
File "/usr/local/lib/python2.4/site-packages/trac/web/main.py", line 406, in dispatch_request
dispatcher.dispatch(req)
File "/usr/local/lib/python2.4/site-packages/trac/web/main.py", line 237, in dispatch
resp = chosen_handler.process_request(req)
File "/usr/local/lib/python2.4/site-packages/TracWebAdmin-0.1.2-py2.4.egg/webadmin/web_ui.py", line 109, in process_request
path_info)
File "/usr/local/lib/python2.4/site-packages/TracWebAdmin-0.1.2-py2.4.egg/webadmin/ticket.py", line 244, in process_admin_request
ver.insert()
File "/usr/local/lib/python2.4/site-packages/trac/ticket/model.py", line 723, in insert
(self.name, self.time, self.description))
File "/usr/local/lib/python2.4/site-packages/trac/db/util.py", line 50, in execute
return self.cursor.execute(sql_escape_percent(sql), args)
File "/usr/local/lib/python2.4/site-packages/trac/db/sqlite_backend.py", line 56, in execute
args or [])
File "/usr/local/lib/python2.4/site-packages/trac/db/sqlite_backend.py", line 48, in _rollback_on_error
return function(self, *args, **kwargs)
IntegrityError: column name is not unique
Attachments
Change History
comment:1 follow-up: ↓ 2 Changed 4 years ago by osimons
- Milestone changed from 0.10.5 to 0.11.1
- Version changed from 0.10.4 to devel
comment:2 in reply to: ↑ 1 Changed 4 years ago by cboos
Replying to osimons:
trying to add a new valid version gives Trac Error:
Version 3.0 does not exist.
That's the usual Trac approach for handling the data model objects: when the constructor gets an identifier, it expects to be able to fetch an existing instance for that identifier. If not, it will raise a TracError. Some have already pointed out the trouble with this approach, see #4130.
comment:3 Changed 4 years ago by cboos
- Milestone changed from 0.11.1 to 0.12
- Priority changed from low to high
comment:4 Changed 4 years ago by cboos
- Description modified (diff)
comment:5 follow-up: ↓ 6 Changed 4 years ago by ecarter
comment:6 in reply to: ↑ 5 Changed 4 years ago by osimons
Replying to ecarter:
The reported error is now fixed in trunk [6772], with testcases in sandbox/testing [6773] [6775]. There may be a better implementation, but I suggest we close this one.
+1. Let's use #6348 to note the various duplicates and variations of this error - and to hopefully solve it for all.
comment:7 Changed 3 years ago by cboos
- Milestone changed from 0.13 to 0.11
- Resolution set to fixed
- Status changed from new to closed
comment:8 Changed 3 years ago by cboos
- Owner changed from cmlenz to ecarter



It exists in trunk as well, and is the same for other enums as well. It also happens from both webadmin and trac-admin.
2 alternatives:
Regarding 2, here is what I see in the current trunk trac.ticket.model code (class Version is identical in implementation):
Just did a quick check in trac.ticket.admin.py code for adding versions, and the reason why this does not trigger is that we do not instantiate by passing the name to __init__() - so self._old_value will not get set:
trac/ticket/admin.py
However, doing that it seems that __init__() does not have a fallback of None if it does not exist (no row fetched from datababase), so trying to add a new valid version gives Trac Error:
Catch-22 it seems… I think we should: