diff --git a/main.go b/main.go index c11fd2a..5426790 100644 --- a/main.go +++ b/main.go @@ -33,24 +33,39 @@ func formula(p float64) int64 { return int64(yearsAgo * 31556926) } -func (db *TimelineDB) closestEvent(t int64) (EventsRow, error) { +func (db *TimelineDB) closestEvents(t int64, n int) ([]EventsRow, error) { query := ` select description, timestamp, yearknown, monthknown, dayknown, hourknown, minuteknown, secondknown from events where timestamp is not null order by abs(? - timestamp) asc - limit 1 + limit ? ` - var event EventsRow + events := make([]EventsRow, n) stmt, err := db.Prepare(query) if err != nil { - return event, err + return events, err } defer stmt.Close() - err = stmt.QueryRow(t).Scan(&event.description, &event.timestamp, &event.yearknown, &event.monthknown, &event.dayknown, &event.hourknown, &event.minuteknown, &event.secondknown) - return event, err + rows, err := stmt.Query(t, n) + if err != nil { + return events, err + } + defer rows.Close() + + for i := 0; rows.Next(); i++ { + var event EventsRow + err = rows.Scan(&event.description, &event.timestamp, &event.yearknown, &event.monthknown, &event.dayknown, &event.hourknown, &event.minuteknown, &event.secondknown) + if err != nil { + return events, err + } + + events[i] = event + } + + return events, err } func (event *EventsRow) Output() (int64, string, string, error) { @@ -83,6 +98,7 @@ func (event *EventsRow) Output() (int64, string, string, error) { func main() { percent := flag.Float64("p", -1, "percentage") + nevents := flag.Int("n", 1, "number of events") flag.Parse() if *percent < 0 || *percent > 1 { @@ -99,15 +115,17 @@ func main() { } defer db.Close() - event, err := db.closestEvent(t) + events, err := db.closestEvents(t, *nevents) if err != nil { log.Fatal(err) } - timestamp, date, desc, err := event.Output() - if err != nil { - log.Fatal(err) - } + for _, event := range events { + timestamp, date, desc, err := event.Output() + if err != nil { + log.Fatal(err) + } - fmt.Printf("%v\t%v\t%v\n", timestamp, date, desc) + fmt.Printf("%v\t%v\t%v\n", timestamp, date, desc) + } }