func fetchLatestMessage(msg *pandora.Message, db querier, inbox string, now time.Time, dur time.Duration) error { err := reEnqueueMessages(db, now) if err != nil { return err } inboxId, err := findInbox(db, inbox, false) if err != nil { return err } var buf []byte var id int64 err = db.QueryRow(`select id, mid, status, receivedat, sendwhen, deliverycount from pgstore_messages where receiverid = $1 and lid is null and sendwhen <= $2 and status <> $3 order by sendwhen asc limit 1`, inboxId, now, pandora.StatusConfirmed).Scan(&id, &buf, &msg.Status, &msg.ReceivedAt, &msg.SendWhen, &msg.DeliveryCount) if err == sql.ErrNoRows { return pandora.ErrNoMessages } if err != nil { return err } msg.Mid = &pandora.SHA1Key{} copy(msg.Mid.Bytes(), buf) msg.CalcualteLeaseFor(now, dur) _, err = db.Exec("update pgstore_messages set lid = $1, deliverycount = deliverycount + 1, leaseuntil = $2 where id = $3", msg.Lid.Bytes(), msg.LeasedUntil, id) return err }