Ticket #23 (closed defect: fixed)

Opened 3 years ago

Last modified 2 months ago

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

comment:1 Changed 23 months ago by lele

 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)

comment:2 Changed 2 months ago by lele

  • Status changed from new to closed
  • Resolution set to fixed

This has been fixed by r229

Note: See TracTickets for help on using tickets.