func createMessage(entry *wal.Entry) *message.Message { msg := new(message.Message) msg.ParseTime = time.Unix(0, entry.ParseTime).UTC() msg.TimelineID = entry.TimelineID msg.LogID = entry.ReadFrom.LogID() msg.RecordOffset = entry.ReadFrom.RecordOffset() msg.Key = createKey(entry) msg.Prev = createPrev(entry) msg.TransactionID = entry.TransactionID msg.TablespaceID = entry.TablespaceID msg.DatabaseID = entry.DatabaseID msg.RelationID = entry.RelationID msg.Fields = make([]message.Field, 0) switch entry.Type { case wal.MultiInsert: fallthrough case wal.Insert: msg.Type = message.InsertMessage msg.Block = entry.ToBlock msg.Offset = entry.ToOffset case wal.Update: msg.Type = message.UpdateMessage msg.Block = entry.ToBlock msg.Offset = entry.ToOffset msg.PrevTupleID = message.NewTupleID(entry.FromBlock, entry.FromOffset) case wal.Delete: msg.Type = message.DeleteMessage msg.Block = entry.FromBlock msg.Offset = entry.FromOffset case wal.Commit: msg.Type = message.CommitMessage default: msg.Type = message.UnknownMessage } msg.TupleID = message.NewTupleID(msg.Block, msg.Offset) return msg }