#6808 closed defect (fixed)
Exception: column name is not unique
Reported by: | Owned by: | Eli Carter | |
---|---|---|---|
Priority: | high | Milestone: | 0.11 |
Component: | admin/web | Version: | devel |
Severity: | normal | Keywords: | exception column name not unique |
Cc: | Branch: | ||
Release Notes: | |||
API Changes: | |||
Internal Changes: |
Description (last modified by )
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 (0)
Change History (8)
follow-up: 2 comment:1 by , 17 years ago
Milestone: | 0.10.5 → 0.11.1 |
---|---|
Version: | 0.10.4 → devel |
comment:2 by , 17 years ago
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 by , 17 years ago
Milestone: | 0.11.1 → 0.12 |
---|---|
Priority: | low → high |
follow-up: 6 comment:5 by , 17 years ago
comment:6 by , 16 years ago
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 by , 16 years ago
Milestone: | 0.13 → 0.11 |
---|---|
Resolution: | → fixed |
Status: | new → closed |
comment:8 by , 16 years ago
Owner: | changed from | to
---|
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 (classVersion
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__()
- soself._old_value
will not get set:trac/ticket/admin.py
However, doing that it seems that
__init__()
does not have a fallback ofNone
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:
model.Version(self.env, name=req.args.get('name'))
in all trac-admin and webadmin code.__init__()
in the various model classes to have a fallback if there is no actual existing instance of that name. Why would we want to raise aTracError
in the__init__()
code?the_version.exists
property after object creation.