trac.ticket.report

trac.ticket.report.cell_value(v)

Normalize a cell value for display. >>> (cell_value(None), cell_value(0), cell_value(1), cell_value(‘v’)) (‘’, ‘0’, u‘1’, u’v’)

trac.ticket.report.split_sql(sql, clause_re, skel=None)

Split an SQL query according to a toplevel clause regexp.

We assume there’s only one such clause present in the outer query.

>>> split_sql('''SELECT a FROM x  ORDER             BY u, v''', _order_by_re)
('SELECT a FROM x  ', ' u, v')
trac.ticket.report.sql_skeleton(sql)

Strip an SQL query to leave only its toplevel structure.

This is probably not 100% robust but should be enough for most needs.

>>> re.sub('\s+', lambda m: '<%d>' % len(m.group(0)), sql_skeleton(''' \n        SELECT a FROM (SELECT x FROM z ORDER BY COALESCE(u, ')/*(')) ORDER \n          /* SELECT a FROM (SELECT x /* FROM z                             \n                        ORDER BY */ COALESCE(u, '\)X(')) ORDER */          \n          BY c, (SELECT s FROM f WHERE v in ('ORDER BY', '(\')')          \n                 ORDER BY (1), '') -- LIMIT                                \n         '''))
'<10>SELECT<1>a<1>FROM<48>ORDER<164>BY<1>c,<144>'