示例#1
0
func (self *mysqlMessageCache) retrieveOnce(service, username string, since time.Time) (msgs []*rpc.MessageContainer, err error) {
	self.lock.RLock()
	defer self.lock.RUnlock()
	rows, err := self.getMultiMsgStmt.Query(service, username, since.Unix(), time.Now().Unix())
	if err != nil {
		err = fmt.Errorf("Data base error: %v; query multi-msg error", err)
		return
	}
	defer rows.Close()

	msgs = make([]*rpc.MessageContainer, 0, 128)
	for rows.Next() {
		mc := new(rpc.MessageContainer)
		var data []byte
		var createTime int64
		err = rows.Scan(&mc.Id, &mc.SenderService, &mc.Sender, &createTime, &data)
		if err != nil {
			return
		}
		mc.Message = new(rpc.Message)
		err = json.Unmarshal(data, mc.Message)
		if err != nil {
			return
		}
		mc.Birthday = time.Unix(createTime, 0)
		msgs = append(msgs, mc)
	}
	return
}