func (tl *Tasklist) GetStatistic(tag string) *Statistic { var stmt *sqlite.Stmt var err error if tag == "" { stmt, err = tl.conn.Prepare("SELECT priority, count(priority) FROM tasks GROUP BY priority") } else { stmt, err = tl.conn.Prepare("SELECT priority, count(priority) FROM tasks WHERE id IN (SELECT id FROM columns WHERE name = ?) GROUP BY priority") } Must(err) defer stmt.Finalize() if tag == "" { Must(stmt.Exec()) } else { Must(stmt.Exec(tag)) } name := "#" + tag link := name if tag == "" { name = "Any" link = "" } r := &Statistic{name, link, 0, 0, 0, 0, 0, 0, 0} for stmt.Next() { var priority, count int stmt.Scan(&priority, &count) switch Priority(priority) { case STICKY: r.Sticky += count case NOTES: r.Notes += count case NOW: r.Now += count case LATER: r.Later += count case DONE: r.Done += count case TIMED: r.Timed += count default: r.Total += count } } r.Total += r.Sticky + r.Notes + r.Now + r.Later + r.Done + r.Timed return r }