func appendResult(qr, innerqr *sqltypes.Result) { if innerqr.RowsAffected == 0 && len(innerqr.Fields) == 0 { return } if qr.Fields == nil { qr.Fields = innerqr.Fields } qr.RowsAffected += innerqr.RowsAffected if innerqr.InsertID != 0 { qr.InsertID = innerqr.InsertID } qr.Rows = append(qr.Rows, innerqr.Rows...) }
// UnmarshalBson bson-decodes into QueryResultList. func (queryResultList *QueryResultList) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for QueryResultList", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "List": // []sqltypes.Result if kind != bson.Null { if kind != bson.Array { panic(bson.NewBsonError("unexpected kind %v for queryResultList.List", kind)) } bson.Next(buf, 4) queryResultList.List = make([]sqltypes.Result, 0, 8) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { bson.SkipIndex(buf) var _v1 sqltypes.Result _v1.UnmarshalBson(buf, kind) queryResultList.List = append(queryResultList.List, _v1) } } case "Err": // *mproto.RPCError if kind != bson.Null { queryResultList.Err = new(mproto.RPCError) (*queryResultList.Err).UnmarshalBson(buf, kind) } default: bson.Skip(buf, kind) } } }
func appendResult(qr, innerqr *sqltypes.Result) { if innerqr.RowsAffected == 0 && len(innerqr.Fields) == 0 { return } if qr.Fields == nil { qr.Fields = innerqr.Fields } qr.RowsAffected += innerqr.RowsAffected if innerqr.InsertID != 0 { qr.InsertID = innerqr.InsertID } if len(qr.Rows) == 0 { // we haven't gotten any result yet, just save the new extras. qr.Extras = innerqr.Extras } else { // Merge the EventTokens / Fresher flags within Extras. if innerqr.Extras == nil { // We didn't get any from innerq. Have to clear any // we'd have gotten already. if qr.Extras != nil { qr.Extras.EventToken = nil qr.Extras.Fresher = false } } else { // We may have gotten an EventToken from // innerqr. If we also got one earlier, merge // it. If we didn't get one earlier, we // discard the new one. if qr.Extras != nil { // Note if any of the two is nil, we get nil. qr.Extras.EventToken = eventtoken.Minimum(qr.Extras.EventToken, innerqr.Extras.EventToken) qr.Extras.Fresher = qr.Extras.Fresher && innerqr.Extras.Fresher } } } qr.Rows = append(qr.Rows, innerqr.Rows...) }