Edgewall Software

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)

Patch against 0.11-stable fixing sorting by milestone in queries

  • trac/ticket/query.py

    diff --git a/trac/ticket/query.py b/trac/ticket/query.py
    a b  
    517517                col = name + '.value' 
    518518            else: 
    519519                col = 't.' + name 
     520            desc = desc and ' DESC' or '' 
    520521            # FIXME: This is a somewhat ugly hack.  Can we also have the 
    521522            #        column type for this?  If it's an integer, we do first 
    522523            #        one, if text, we do 'else' 
    523524            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)) 
    528526            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)) 
    533528            if name in enum_columns: 
    534529                # These values must be compared as ints, not as strings 
    535530                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)) 
    551540            else: 
    552                 if desc: 
    553                     sql.append("%s DESC" % col) 
    554                 else: 
    555                     sql.append("%s" % col) 
     541                sql.append("%s%s" % (col, desc)) 
    556542            if name == self.group and not name == self.order: 
    557543                sql.append(",") 
    558544        if self.order != 'id':