- Timestamp:
- Apr 2, 2008, 8:05:41 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/trac/ticket/query.py
r6748 r6792 26 26 from trac.db import get_column_names 27 27 from trac.mimeview.api import Mimeview, IContentConverter, Context 28 from trac.perm import IPermissionRequestor29 28 from trac.resource import Resource 30 29 from trac.ticket.api import TicketSystem 31 from trac.ticket.model import Ticket32 30 from trac.util import Ranges 33 from trac.util.compat import groupby , sorted31 from trac.util.compat import groupby 34 32 from trac.util.datefmt import to_timestamp, utc 35 from trac.util.html import escape, unescape 36 from trac.util.text import shorten_line, CRLF 33 from trac.util.text import shorten_line 37 34 from trac.util.translation import _ 38 35 from trac.web import IRequestHandler … … 190 187 return cols 191 188 192 def execute(self, req, db=None ):189 def execute(self, req, db=None, cached_ids=None): 193 190 if not self.cols: 194 191 self.get_columns() 195 192 196 sql, args = self.get_sql(req )193 sql, args = self.get_sql(req, cached_ids) 197 194 self.env.log.debug("Query SQL: " + sql % tuple([repr(a) for a in args])) 198 195 … … 274 271 return 'query:?' + query_string.replace('&', '\n&\n') 275 272 276 def get_sql(self, req=None ):273 def get_sql(self, req=None, cached_ids=None): 277 274 """Return a (sql, params) tuple for the query.""" 278 275 if not self.cols: … … 407 404 408 405 clauses = filter(None, clauses) 406 if clauses or cached_ids: 407 sql.append("\nWHERE ") 409 408 if clauses: 410 sql.append("\nWHERE " + " AND ".join(clauses)) 411 409 sql.append(" AND ".join(clauses)) 410 if cached_ids: 411 if clauses: 412 sql.append(" OR ") 413 sql.append("id in (%s)" % (','.join( 414 [str(id) for id in cached_ids]))) 415 412 416 sql.append("\nORDER BY ") 413 417 order_cols = [(self.order, self.desc)] … … 531 535 if not groupsequence or group_key not in groupsequence: 532 536 groupsequence.append(group_key) 533 groupsequence = sorted(groupsequence, reverse=self.groupdesc)534 537 groupsequence = [(value, groups[value]) for value in groupsequence] 535 538 … … 701 704 def display_html(self, req, query): 702 705 db = self.env.get_db_cnx() 703 tickets = query.execute(req, db)704 706 705 707 # The most recent query is stored in the user session; 706 orig_list = rest_list =None708 orig_list = None 707 709 orig_time = datetime.now(utc) 708 710 query_time = int(req.session.get('query_time', 0)) … … 711 713 if query_constraints != req.session.get('query_constraints') \ 712 714 or query_time < orig_time - timedelta(hours=1): 715 tickets = query.execute(req, db) 713 716 # New or outdated query, (re-)initialize session vars 714 717 req.session['query_constraints'] = query_constraints … … 718 721 orig_list = [int(id) for id 719 722 in req.session.get('query_tickets', '').split()] 720 rest_list = orig_list[:]723 tickets = query.execute(req, db, orig_list) 721 724 orig_time = query_time 722 723 # Find out which tickets originally in the query results no longer724 # match the constraints725 if rest_list:726 for tid in [t['id'] for t in tickets if t['id'] in rest_list]:727 rest_list.remove(tid)728 for rest_id in rest_list:729 try:730 ticket = Ticket(self.env, int(rest_id), db=db)731 data = {'id': ticket.id, 'time': ticket.time_created,732 'changetime': ticket.time_changed, 'removed': True,733 'href': req.href.ticket(ticket.id)}734 data.update(ticket.values)735 tickets.insert(orig_list.index(rest_id), data)736 except TracError, e:737 pass738 725 739 726 context = Context.from_request(req, 'query')
Note:
See TracChangeset
for help on using the changeset viewer.