Ticket #2209: 2209-query-sort-milestone-r7439.patch
| File 2209-query-sort-milestone-r7439.patch, 2.7 KB (added by Remy Blank <remy.blank@…>, 5 months ago) |
|---|
-
trac/ticket/query.py
diff --git a/trac/ticket/query.py b/trac/ticket/query.py
a b 517 517 col = name + '.value' 518 518 else: 519 519 col = 't.' + name 520 desc = desc and ' DESC' or '' 520 521 # FIXME: This is a somewhat ugly hack. Can we also have the 521 522 # column type for this? If it's an integer, we do first 522 523 # one, if text, we do 'else' 523 524 if name in ('id', 'time', 'changetime'): 524 if desc: 525 sql.append("COALESCE(%s,0)=0 DESC," % col) 526 else: 527 sql.append("COALESCE(%s,0)=0," % col) 525 sql.append("COALESCE(%s,0)=0%s," % (col, desc)) 528 526 else: 529 if desc: 530 sql.append("COALESCE(%s,'')='' DESC," % col) 531 else: 532 sql.append("COALESCE(%s,'')=''," % col) 527 sql.append("COALESCE(%s,'')=''%s," % (col, desc)) 533 528 if name in enum_columns: 534 529 # These values must be compared as ints, not as strings 535 530 db = self.env.get_db_cnx() 536 if desc: 537 sql.append(db.cast(col, 'int') + ' DESC') 538 else: 539 sql.append(db.cast(col, 'int')) 540 elif name in ('milestone', 'version'): 541 if name == 'milestone': 542 time_col = 'milestone.due' 543 else: 544 time_col = 'version.time' 545 if desc: 546 sql.append("COALESCE(%s,0)=0 DESC,%s DESC,%s DESC" 547 % (time_col, time_col, col)) 548 else: 549 sql.append("COALESCE(%s,0)=0,%s,%s" 550 % (time_col, time_col, col)) 531 sql.append(db.cast(col, 'int') + desc) 532 elif name == 'milestone': 533 sql.append("COALESCE(milestone.completed,0)=0%s," 534 "milestone.completed%s," 535 "COALESCE(milestone.due,0)=0%s,milestone.due%s," 536 "%s%s" % (desc, desc, desc, desc, col, desc)) 537 elif name == 'version': 538 sql.append("COALESCE(version.time,0)=0%s,version.time%s,%s%s" 539 % (desc, desc, col, desc)) 551 540 else: 552 if desc: 553 sql.append("%s DESC" % col) 554 else: 555 sql.append("%s" % col) 541 sql.append("%s%s" % (col, desc)) 556 542 if name == self.group and not name == self.order: 557 543 sql.append(",") 558 544 if self.order != 'id':
