Modify ↓
Opened 17 years ago
Closed 17 years ago
#5840 closed enhancement (duplicate)
Change to the ORDER BY clause in view ticket queries
Reported by: | Owned by: | Jonas Borgström | |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | ticket system | Version: | 0.10.4 |
Severity: | normal | Keywords: | |
Cc: | Branch: | ||
Release Notes: | |||
API Changes: | |||
Internal Changes: |
Description (last modified by )
The syntax used in ORDER BY
in the view ticket queries is not transportable to all DBMSs.
I propose to use a CASE WHEN
clause instead of ORDER BY (status = 'assigned')
→ ORDER BY (CASE WHEN status = 'assigned' THEN 1 ELSE 2 END) DESC
Here's a snippet for the new get_reports:
def get_reports(db): owner = db.concat('owner', "' *'") return ( ('Active Tickets', """ * List all active tickets by priority. * Color each row based on priority. * If a ticket has been accepted, a '*' is appended after the owner's name """, """ SELECT p.value AS __color__, id AS ticket, summary, component, version, milestone, t.type AS type, (CASE status WHEN 'assigned' THEN %s ELSE owner END) AS owner, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status IN ('new', 'assigned', 'reopened') ORDER BY p.value, milestone, t.type, time """ % owner), #---------------------------------------------------------------------------- ('Active Tickets by Version', """ This report shows how to color results by priority, while grouping results by version. Last modification time, description and reporter are included as hidden fields for useful RSS export. """, """ SELECT p.value AS __color__, version AS __group__, id AS ticket, summary, component, version, t.type AS type, (CASE status WHEN 'assigned' THEN %s ELSE owner END) AS owner, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status IN ('new', 'assigned', 'reopened') ORDER BY (CASE WHEN version IS NULL THEN 1 ELSE 2 END) DESC,version, p.value, t.type, time """ % owner), #---------------------------------------------------------------------------- ('Active Tickets by Milestone', """ This report shows how to color results by priority, while grouping results by milestone. Last modification time, description and reporter are included as hidden fields for useful RSS export. """, """ SELECT p.value AS __color__, %s AS __group__, id AS ticket, summary, component, version, t.type AS type, (CASE status WHEN 'assigned' THEN %s ELSE owner END) AS owner, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status IN ('new', 'assigned', 'reopened') ORDER BY (CASE WHEN milestone IS NULL THEN 1 ELSE 2 END) DESC,milestone, p.value, t.type, time """ % (db.concat('milestone', "' Release'"), owner)), #---------------------------------------------------------------------------- ('Assigned, Active Tickets by Owner', """ List assigned tickets, group by ticket owner, sorted by priority. """, """ SELECT p.value AS __color__, owner AS __group__, id AS ticket, summary, component, milestone, t.type AS type, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status = 'assigned' ORDER BY owner, p.value, t.type, time """), #---------------------------------------------------------------------------- ('Assigned, Active Tickets by Owner (Full Description)', """ List tickets assigned, group by ticket owner. This report demonstrates the use of full-row display. """, """ SELECT p.value AS __color__, owner AS __group__, id AS ticket, summary, component, milestone, t.type AS type, time AS created, description AS _description_, changetime AS _changetime, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status = 'assigned' ORDER BY owner, p.value, t.type, time """), #---------------------------------------------------------------------------- ('All Tickets By Milestone (Including closed)', """ A more complex example to show how to make advanced reports. """, """ 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 (CASE WHEN milestone IS NULL THEN 1 ELSE 2 END) DESC, milestone DESC, (CASE WHEN status = 'closed' THEN 1 ELSE 2 END) DESC, (CASE status WHEN 'closed' THEN modified ELSE (-1)*p.value END) DESC """), #---------------------------------------------------------------------------- ('My Tickets', """ This report demonstrates the use of the automatically set USER dynamic variable, replaced with the username of the logged in user when executed. """, """ SELECT p.value AS __color__, (CASE status WHEN 'assigned' THEN 'Assigned' ELSE 'Owned' END) AS __group__, id AS ticket, summary, component, version, milestone, t.type AS type, priority, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE t.status IN ('new', 'assigned', 'reopened') AND owner = $USER ORDER BY (CASE WHEN status = 'assigned' THEN 1 ELSE 2 END), p.value, milestone, t.type, time """), #---------------------------------------------------------------------------- ('Active Tickets, Mine first', """ * List all active tickets by priority. * Show all tickets owned by the logged in user in a group first. """, """ SELECT p.value AS __color__, (CASE owner WHEN $USER THEN 'My Tickets' ELSE 'Active Tickets' END) AS __group__, id AS ticket, summary, component, version, milestone, t.type AS type, (CASE status WHEN 'assigned' THEN %s ELSE owner END) AS owner, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status IN ('new', 'assigned', 'reopened') ORDER BY (CASE WHEN owner = $USER THEN 1 ELSE 2 END), p.value, milestone, t.type, time """ % owner))
Attachments (0)
Note:
See TracTickets
for help on using tickets.
It is worth noting that after some standards digging, I found that
SELECT ... ORDER BY ...
is not actually in any standard, though moving to thisCASE
based query is closer to the standard at least.