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

}