Opened 18 years ago
Closed 16 years ago
#5105 closed defect (duplicate)
Report 6 All Tickets By Milestone (Including closed): execute(sql_escape_percent(sql), args)
Reported by: | Owned by: | Matthew Good | |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | report system | Version: | devel |
Severity: | major | Keywords: | verify |
Cc: | lorne.wilson1@…, trac@…, liucougar@… | Branch: | |
Release Notes: | |||
API Changes: | |||
Internal Changes: |
Description
Running Trac 0.11 r5187 svn, Report 6: All Tickets By Milestone (Including closed) aborts with exception:
ProgrammingError: File "/software/svn/Trac/trac/db/util.py", line 50, in execute return self.cursor.execute(sql_escape_percent(sql), args)
http://localhost:8000/acme/report/6
Trac detected an internal error: ProgrammingError: current transaction is aborted, commands ignored until end of transaction block
Traceback short form
File "/software/svn/Trac/trac/web/main.py", line 429, in dispatch_request dispatcher.dispatch(req) File "/software/svn/Trac/trac/web/main.py", line 231, in dispatch content_type) File "/software/svn/Trac/trac/web/chrome.py", line 557, in render_template if not req.session or not int(req.session.get('accesskeys', 0)): File "/software/svn/Trac/trac/web/api.py", line 161, in __getattr__ value = self.callbacks[name](self) File "/software/svn/Trac/trac/web/main.py", line 271, in _get_session return Session(self.env, req) File "/software/svn/Trac/trac/web/session.py", line 53, in __init__ self.get_session(req.authname, authenticated=True) File "/software/svn/Trac/trac/web/session.py", line 74, in get_session (sid, int(authenticated))) File "/software/svn/Trac/trac/db/util.py", line 50, in execute return self.cursor.execute(sql_escape_percent(sql), args) File "/software/svn/Trac/trac/db/util.py", line 50, in execute return self.cursor.execute(sql_escape_percent(sql), args)
Traceback long form
Python Traceback Most recent call last: * File "/software/svn/Trac/trac/web/main.py", line 429, in dispatch_request Code fragment: 424. if not env and env_error: 425. raise HTTPInternalError(env_error.message) 426. try: 427. try: 428. dispatcher = RequestDispatcher(env) 429. dispatcher.dispatch(req) 430. except RequestDone: 431. pass 432. return req._response or [] 433. finally: 434. if not run_once: Local variables: Name Value after [' except RequestDone:', ' pass', ' ... before [' if not env and env_error:', ' raise ... dispatcher <trac.web.main.RequestDispatcher object at 0xb662760c> e <psycopg2.ProgrammingError instance at 0xb764382c> env <trac.env.Environment object at 0xb76f814c> env_error None env_name 'acme' env_parent_dir None env_path '/var/lib/trac/acme' env_paths ['/var/lib/trac/acme'] environ {'HTTP_AUTHORIZATION': 'Basic anRrOmE3YXd3d3Rm', 'HTTP_REFERER': ... exc_info (<class psycopg2.ProgrammingError at 0xb675126c>, ... filename '/software/svn/Trac/trac/web/main.py' frames [{'function': 'dispatch_request', 'lines_before': [' if not env and ... has_admin True line ' dispatcher.dispatch(req)' lineno 428 message u'ProgrammingError: current transaction is aborted, commands ignored until ... path_info ['report', '6'] req <Request "GET /report/6"> run_once False script_url None start_response <bound method WSGIServerGateway._start_response of ... tb <traceback object at 0x858c2d4> tb_hide None traceback 'Traceback (most recent call last):\n File ... * File "/software/svn/Trac/trac/web/main.py", line 231, in dispatch Code fragment: 226. req.display(template, content_type or 'text/html') 227. else: # Genshi 228. template, data, content_type = \ 229. self._post_process_request(req, *resp) 230. output = chrome.render_template(req, template, data, 231. content_type) 232. # Give the session a chance to persist changes 233. if req.session: 234. req.session.save() 235. 236. if 'hdfdump' in req.args: Local variables: Name Value chosen_handler <trac.ticket.report.ReportModule object at 0xb6627a4c> chrome <trac.web.chrome.Chrome object at 0xb671cd4c> content_type None data {'dateinfo': <function dateinfo at 0xb5d38764>, 'context': <Context ... err (<class psycopg2.ProgrammingError at 0xb675126c>, ... handler <trac.ticket.report.ReportModule object at 0xb6627a4c> req <Request "GET /report/6"> resp ('report_view.html', {'dateinfo': <function dateinfo at 0xb5d38764>, ... self <trac.web.main.RequestDispatcher object at 0xb662760c> template 'report_view.html' * File "/software/svn/Trac/trac/web/chrome.py", line 557, in render_template Code fragment: 552. 553. doctype = {'text/html': DocType.XHTML_STRICT}.get(content_type) 554. if doctype: 555. if req.form_token: 556. stream |= self._add_form_token(req.form_token) 557. if not req.session or not int(req.session.get('accesskeys', 0)): 558. stream |= self._strip_accesskeys 559. 560. req.chrome['links'] = {} 561. req.chrome['scripts'] = [] 562. data.setdefault('chrome', {}).update({ Local variables: Name Value content_type 'text/html' data {'all': <function all at 0xb7a3c454>, 'req': <Request "GET /report/6">, ... doctype ('html', '-//W3C//DTD XHTML 1.0 Strict//EN', ... filename 'report_view.html' fragment False method 'xhtml' req <Request "GET /report/6"> self <trac.web.chrome.Chrome object at 0xb671cd4c> stream <genshi.core.Stream object at 0xb5d4665c> template <MarkupTemplate "report_view.html"> * File "/software/svn/Trac/trac/web/api.py", line 161, in __getattr__ Code fragment: 156. 157. def __getattr__(self, name): 158. """Performs lazy attribute lookup by delegating to the functions in the 159. callbacks dictionary.""" 160. if name in self.callbacks: 161. value = self.callbacks[name](self) 162. setattr(self, name, value) 163. return value 164. raise AttributeError(name) 165. 166. def __repr__(self): Local variables: Name Value name 'session' self <Request "GET /report/6"> * File "/software/svn/Trac/trac/web/main.py", line 271, in _get_session Code fragment: 266. def _get_perm(self, req): 267. perms = PermissionSystem(self.env).get_user_permissions(req.authname) 268. return PermissionCache(perms) 269. 270. def _get_session(self, req): 271. return Session(self.env, req) 272. 273. def _get_timezone(self, req): 274. try: 275. return timezone(req.session.get('tz', self.default_timezone 276. or 'missing')) Local variables: Name Value req <Request "GET /report/6"> self <trac.web.main.RequestDispatcher object at 0xb662760c> * File "/software/svn/Trac/trac/web/session.py", line 53, in __init__ Code fragment: 48. self.get_session(sid) 49. else: 50. if req.incookie.has_key(COOKIE_KEY): 51. sid = req.incookie[COOKIE_KEY].value 52. self.promote_session(sid) 53. self.get_session(req.authname, authenticated=True) 54. 55. def bake_cookie(self, expires=PURGE_AGE): 56. assert self.sid, 'Session ID not set' 57. self.req.outcookie[COOKIE_KEY] = self.sid 58. self.req.outcookie[COOKIE_KEY]['path'] = self.req.base_path Local variables: Name Value env <trac.env.Environment object at 0xb76f814c> req <Request "GET /report/6"> self {} * File "/software/svn/Trac/trac/web/session.py", line 74, in get_session Code fragment: 69. refresh_cookie = True 70. self.sid = sid 71. 72. cursor.execute("SELECT last_visit FROM session " 73. "WHERE sid=%s AND authenticated=%s", 74. (sid, int(authenticated))) 75. row = cursor.fetchone() 76. if not row: 77. return 78. self._new = False 79. self.last_visit = int(row[0]) Local variables: Name Value authenticated True cursor <trac.db.util.IterableCursor object at 0xb5d46c14> db <trac.db.pool.PooledConnection object at 0xb7643aac> refresh_cookie False self {} sid u'myuser' * File "/software/svn/Trac/trac/db/util.py", line 50, in execute Code fragment: 45. def execute(self, sql, args=None): 46. # -- In case of SQL errors, uncomment the following 'print' statements 47. # print 'execute', repr(sql) 48. if args: 49. # print repr(args) 50. return self.cursor.execute(sql_escape_percent(sql), args) 51. return self.cursor.execute(sql) 52. 53. def executemany(self, sql, args=None): 54. # print 'executemany', repr(sql) 55. if args: Local variables: Name Value args (u'myuser', 1) self <trac.db.util.IterableCursor object at 0xb5d46c14> sql 'SELECT last_visit FROM session WHERE sid=%s AND authenticated=%s' * File "/software/svn/Trac/trac/db/util.py", line 50, in execute
Config info
Trac: 0.11dev-r5182 Python: 2.4.4 (#1, Dec 22 2006, 19:27:50) [GCC 4.1.1 (Gentoo 4.1.1-r3)] setuptools: 0.6c5 psycopg2: 2.0.5.1 Genshi: 0.4dev-r527 Pygments: 0.8dev-r3299 Subversion: 1.4.3 (r23084) Running with tracd: # tracd --port 8000 --basic-auth acme,/var/lib/svn/acme/conf/svnusers,laptop /var/lib/trac/acme
SQL statement obtained by edit action on report 6:
http://localhost:8000/acme/report/6?action=edit
All Tickets By Milestone (Including closed)
SELECT p.value AS __color__, t.milestone AS __group__, (CASE status WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;' ELSE (CASE owner WHEN $USER THEN 'font-weight: bold' END) END) AS __style__, id AS ticket, summary, component, status, resolution,version, t.type AS type, priority, owner, changetime AS modified, time AS _time,reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' ORDER BY (milestone IS NULL), milestone DESC, (status = 'closed'), (CASE status WHEN 'closed' THEN modified ELSE (-1)*p.value END) DESC
Attachments (0)
Change History (7)
comment:1 by , 18 years ago
Cc: | added |
---|
comment:2 by , 18 years ago
Cc: | added |
---|---|
Severity: | normal → major |
comment:3 by , 18 years ago
I am seeing the same issue in 0.11dev-r5694
I played around with the SQL a little and found out that it is the CASE statement in the ORDER BY clause that it is complaining about.
I replaced the report with the following SQL and it seems to work fine:
SELECT p.value AS __color__, t.milestone AS __group__, (CASE status WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;' ELSE (CASE owner WHEN $USER THEN 'font-weight: bold' END) END) AS __style__, id AS ticket, summary, component, status, resolution,version, t.type AS type, priority, owner, changetime AS modified, time AS _time,reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' ORDER BY (milestone IS NULL), milestone DESC, (status = 'closed') DESC
comment:4 by , 18 years ago
Cc: | added |
---|
follow-up: 7 comment:5 by , 17 years ago
Problem is still present in r7198. But the workaround from comment 3 works for me, too.
comment:6 by , 17 years ago
Keywords: | verify added |
---|---|
Milestone: | 0.11.2 → 0.11.1 |
comment:7 by , 16 years ago
Milestone: | 0.11.1 |
---|---|
Resolution: | → duplicate |
Status: | new → closed |
This is actually a duplicate of #5543.
Replying to olistudent:
Problem is still present in r7198.
Sure, we only fix the default reports in the code, so already installed reports won't get updated, as most of the time they're already customized, copied, etc.
But the workaround from comment 3 works for me, too.
Right, you need to fix the existing reports manually.
I got the same error with r5198