''This will make the query module the default handler for the “View Tickets” navigation item. We encourage you to try this configuration and report back what kind of features of reports you are missing, if any.''

* '''`__style__`''' — A custom CSS style expression to use for the current row.

195

* '''`__style__`''' — A custom CSS style expression to use on the `<tr>` element of the current row.

196

* '''`__class__`''' — Zero or more space-separated CSS class names to be set on the `<tr>` element of the current row. These classes are added to the class name derived from `__color__` and the odd / even indicator.

If you have tickets in the database ''before'' you declare the extra fields in trac.ini, there will be no associated data in the ticket_custom table. To get around this, use SQL's "LEFT OUTER JOIN" clauses. See [trac:TracIniReportCustomFieldSample TracIniReportCustomFieldSample] for some examples.

250

250

251

'''Note that you need to set up permissions in order to see the buttons for adding or editing reports.'''

251

=== A note about SQL rewriting #rewriting

252

253

Beyond the relatively trivial replacement of dynamic variables, the SQL query is also altered in order to support two features of the reports:

254

1. [#sort-order changing the sort order]

255

2. pagination support (limitation of the number of result rows displayed on each page)

256

In order to support the first feature, the sort column is inserted in the `ORDER BY` clause in the first position or in the second position if a `__group__` column is specified (an `ORDER BY` clause is created if needed). In order to support pagination, a `LIMIT ... OFFSET ...` clause is appended.

257

The query might be too complex for the automatic rewrite to work correctly, resulting in an erroneous query. In this case you still have the possibility to control exactly how the rewrite is done by manually inserting the following tokens:

258

- `@SORT_COLUMN@`, the place where the name of the selected sort column will be inserted,

259

- `@LIMIT_OFFSET@`, the place where the pagination support clause will be added

260

Note that if you write them after an SQL comment, `--`, you'll effectively disable rewriting if this is what you want!

261

262

Let's take an example, consider the following SQL query:

263

{{{

264

-- ## 4: Assigned, Active Tickets by Owner ## --

265

266

--

267

-- List assigned tickets, group by ticket owner, sorted by priority.

268

--

269

270

SELECT p.value AS __color__,

271

owner AS __group__,

272

id AS ticket, summary, component, milestone, t.type AS type, severity, time AS created,

273

changetime AS _changetime, description AS _description,

274

reporter AS _reporter

275

FROM ticket t,enum p

276

WHERE status = 'assigned'

277

AND p.name=t.priority AND p.type='priority'

278

ORDER BY __group__, p.value, severity, time

279

}}}

280

281

The automatic rewrite will be the following (4 rows per page, page 2, sorted by `component`):

282

{{{

283

SELECT p.value AS __color__,

284

owner AS __group__,

285

id AS ticket, summary, component, milestone, t.type AS type, severity, time AS created,

286

changetime AS _changetime, description AS _description,

287

reporter AS _reporter

288

FROM ticket t,enum p

289

WHERE status = 'assigned'

290

AND p.name=t.priority AND p.type='priority'

291

ORDER BY __group__ ASC, `component` ASC, __group__, p.value, severity, time

292

LIMIT 4 OFFSET 4

293

}}}

294

295

The equivalent SQL query with the rewrite tokens would have been:

296

{{{

297

SELECT p.value AS __color__,

298

owner AS __group__,

299

id AS ticket, summary, component, milestone, t.type AS type, severity, time AS created,

300

changetime AS _changetime, description AS _description,

301

reporter AS _reporter

302

FROM ticket t,enum p

303

WHERE status = 'assigned'

304

AND p.name=t.priority AND p.type='priority'

305

ORDER BY __group__, @SORT_COLUMN@, p.value, severity, time

306

@LIMIT_OFFSET@

307

}}}

308

309

If you want to always sort first by priority and only then by the user selected sort column, simply use the following `ORDER BY` clause: