Beispiel #1
0
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
}