Ticket #23 (closed defect: fixed)
failure with postgres
| Reported by: | fx | Owned by: | lele |
|---|---|---|---|
| Priority: | major | Component: | darcs backend |
| Version: | Keywords: | ||
| Cc: |
Description
I tried to use postgres for the database and got the following. I suspect it's a problem elsewhere in the code (maybe just adding quotes?) but I don't have enough time×knowledge to try to fix it at present.
2010-10-21 10:57:15,001 Trac[web_ui] ERROR: Timeline event provider failed:
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/trac/timeline/web_ui.py", line 179, in process_request
filters) or []:
File "/usr/local/lib/python2.6/dist-packages/trac/versioncontrol/web_ui/changeset.py", line 927, in get_timeline_events
for event in generate_changesets(repos):
File "/usr/local/lib/python2.6/dist-packages/trac/versioncontrol/web_ui/changeset.py", line 900, in generate_changesets
key=collapse_changesets):
File "/usr/local/lib/python2.6/dist-packages/trac/versioncontrol/api.py", line 812, in get_changesets
chgset = self.get_changeset(rev)
File "/usr/local/lib/python2.6/dist-packages/TracDarcs-0.9-py2.6.egg/tracdarcs/repository.py", line 83, in get_changeset
return DarcsChangeset(self, rev)
File "/usr/local/lib/python2.6/dist-packages/TracDarcs-0.9-py2.6.egg/tracdarcs/repository.py", line 587, in __init__
(repo_id, rev))
File "/usr/local/lib/python2.6/dist-packages/TracDarcs-0.9-py2.6.egg/tracdarcs/dbutil.py", line 128, in execute
self.cursor.execute(stmt, *args)
File "/usr/local/lib/python2.6/dist-packages/trac/db/util.py", line 65, in execute
return self.cursor.execute(sql_escape_percent(sql), args)
ProgrammingError: operator does not exist: text = integer
LINE 1: ...E r.repos = 3 AND c.repo_id = r.repos AND r.rev = 3592 AND...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
ProgrammingError: operator does not exist: text = integer
LINE 1: ...E r.repos = 3 AND c.repo_id = r.repos AND r.rev = 3592 AND...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Change History
Note: See
TracTickets for help on using
tickets.
http://paste.e-shell.org/diff570419165
This patch fixes this bug in the trac+darcs plugin for trac: http://progetti.arstecnica.it/trac%2Bdarcs/ticket/23 (probably applying the patch will broke sqlite compatibility, there should be some way to check if the db is pgsql or not before using the cast to integer.
--- old-trac-darcs/tracdarcs/repository.py 2011-07-08 09:51:55.000000000 +0000 +++ new-trac-darcs/tracdarcs/repository.py 2011-07-08 09:51:55.000000000 +0000 @@ -590,13 +590,13 @@ c.execute('SELECT r.author,r.time,r.message,c.hash ' 'FROM revision as r, darcs_changesets as c ' 'WHERE r.repos = %s AND c.repo_id = r.repos ' - ' AND r.rev = %s AND c.rev = r.rev', + ' AND r.rev::integer = %s AND c.rev = r.rev::integer', (repo_id, rev)) else: c.execute('SELECT r.author,r.time,r.message,c.hash ' 'FROM revision as r, darcs_changesets as c ' - 'WHERE r.rev = %s ' - ' AND c.rev = r.rev AND c.repo_id = %s', (rev, 0)) + 'WHERE r.rev::integer = %s ' + ' AND c.rev = r.rev::integer AND c.repo_id = %s', (rev, 0)) row = c.fetchone() if row is None: raise NoSuchChangeset(rev)