func (b *PopulatedMessageStream) populate(rvMsg *message.Message) { curLoc, lrl, waits := b.waitForLogToCatchUp(rvMsg) rvMsg.PopulateWait = waits rvMsg.PopulateLag = lrl - curLoc if rvMsg.Type == message.InsertMessage || rvMsg.Type == message.UpdateMessage || rvMsg.Type == message.DeleteMessage { rvMsg.DatabaseName = b.SchemaReader.GetDatabaseName(rvMsg.DatabaseID) rvMsg.Namespace, rvMsg.Relation = b.SchemaReader.GetNamespaceAndTable(rvMsg.DatabaseID, rvMsg.RelationID) } if rvMsg.Type == message.InsertMessage || rvMsg.Type == message.UpdateMessage { vs, err := b.SchemaReader.GetFieldValues(rvMsg.DatabaseID, rvMsg.RelationID, rvMsg.Block, rvMsg.Offset) if err != nil { rvMsg.PopulationError = fmt.Sprintf("%v - (%v, %v, %v)", err.Error(), curLoc, lrl, waits) } else if vs == nil { rvMsg.PopulationError = fmt.Sprintf("Message skipped for no fields.") } else { for f, v := range vs { if !b.Filters.FilterColumn(rvMsg.RelFullName(), f.Column) { rvMsg.AppendField(f.Column, f.String(), v) } } } } }