// 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": // []mproto.QueryResult 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([]mproto.QueryResult, 0, 8) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { bson.SkipIndex(buf) var _v1 mproto.QueryResult _v1.UnmarshalBson(buf, kind) queryResultList.List = append(queryResultList.List, _v1) } } default: bson.Skip(buf, kind) } } }
func appendResult(qr, innerqr *mproto.QueryResult) { 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...) }
func testStreamExecuteKeyspaceIds(t *testing.T, conn *vtgateconn.VTGateConn) { ctx := context.Background() execCase := execMap["request1"] packets, errFunc := conn.StreamExecuteKeyspaceIds(ctx, execCase.keyspaceIdQuery.Sql, execCase.keyspaceIdQuery.Keyspace, execCase.keyspaceIdQuery.KeyspaceIds, execCase.keyspaceIdQuery.BindVariables, execCase.keyspaceIdQuery.TabletType) var qr mproto.QueryResult for packet := range packets { if len(packet.Fields) != 0 { qr.Fields = packet.Fields } if len(packet.Rows) != 0 { qr.Rows = append(qr.Rows, packet.Rows...) } } wantResult := *execCase.reply.Result wantResult.RowsAffected = 0 wantResult.InsertId = 0 if !reflect.DeepEqual(qr, wantResult) { t.Errorf("Unexpected result from Execute: got %+v want %+v", qr, wantResult) } err := errFunc() if err != nil { t.Error(err) } packets, errFunc = conn.StreamExecuteKeyspaceIds(ctx, "none", "", []key.KeyspaceId{}, nil, "") for packet := range packets { t.Errorf("packet: %+v, want none", packet) } err = errFunc() want := "no match for: none" if err == nil || !strings.Contains(err.Error(), want) { t.Errorf("none request: %v, want %v", err, want) } execCase = execMap["errorRequst"] packets, errFunc = conn.StreamExecuteKeyspaceIds(ctx, execCase.keyspaceIdQuery.Sql, execCase.keyspaceIdQuery.Keyspace, execCase.keyspaceIdQuery.KeyspaceIds, execCase.keyspaceIdQuery.BindVariables, execCase.keyspaceIdQuery.TabletType) for packet := range packets { t.Errorf("packet: %+v, want none", packet) } err = errFunc() want = "app error" if err == nil || !strings.Contains(err.Error(), want) { t.Errorf("errorRequst: %v, want %v", err, want) } }
func DecodeResultsBson(buf *bytes.Buffer, kind byte) (results []mproto.QueryResult) { switch kind { case bson.Array: // valid case bson.Null: return nil default: panic(bson.NewBsonError("Unexpected data type %v for Queries", kind)) } bson.Next(buf, 4) results = make([]mproto.QueryResult, 0, 8) kind = bson.NextByte(buf) var result mproto.QueryResult for i := 0; kind != bson.EOO; i++ { bson.ExpectIndex(buf, i) result.UnmarshalBson(buf) results = append(results, result) kind = bson.NextByte(buf) } return results }
// AddTabletErrorToQueryResult will mutate a QueryResult struct to fill in the Err // field with details from the TabletError. func AddTabletErrorToQueryResult(err error, reply *mproto.QueryResult) { if err == nil { return } reply.Err = rpcErrFromTabletError(err) }