func decodeFieldsBson(buf *bytes.Buffer, kind byte) []Field { switch kind { case bson.Array: // valid case bson.Null: return nil default: panic(bson.NewBsonError("Unexpected data type %v for Query.Fields", kind)) } bson.Next(buf, 4) fields := make([]Field, 0, 8) kind = bson.NextByte(buf) for i := 0; kind != bson.EOO; i++ { if kind != bson.Object { panic(bson.NewBsonError("Unexpected data type %v for Query.Field", kind)) } bson.ExpectIndex(buf, i) var field Field UnmarshalFieldBson(&field, buf) fields = append(fields, field) kind = bson.NextByte(buf) } return fields }
func (qrl *QueryResultList) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "List": qrl.List = DecodeResultsBson(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s", key)) } kind = bson.NextByte(buf) } }
func UnmarshalFieldBson(field *Field, buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "Name": field.Name = bson.DecodeString(buf, kind) case "Type": field.Type = bson.DecodeInt64(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s", key)) } kind = bson.NextByte(buf) } }
func (kr *KeyRange) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "Start": kr.Start = KeyspaceId(bson.DecodeString(buf, kind)) case "End": kr.End = KeyspaceId(bson.DecodeString(buf, kind)) default: panic(bson.NewBsonError("Unrecognized tag %s", key)) } kind = bson.NextByte(buf) } }
func (req *RequestBson) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "ServiceMethod": req.ServiceMethod = bson.DecodeString(buf, kind) case "Seq": req.Seq = bson.DecodeUint64(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s", key)) } kind = bson.NextByte(buf) } }
func (bdq *BoundQuery) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "Sql": bdq.Sql = bson.DecodeString(buf, kind) case "BindVariables": bdq.BindVariables = DecodeBindVariablesBson(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s", key)) } kind = bson.NextByte(buf) } }
func DecodeBindVariablesBson(buf *bytes.Buffer, kind byte) (bindVars map[string]interface{}) { switch kind { case bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("Unexpected data type %v for Query.BindVariables", kind)) } bson.Next(buf, 4) bindVars = make(map[string]interface{}) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { key := bson.ReadCString(buf) switch kind { case bson.Number: ui64 := bson.Pack.Uint64(buf.Next(8)) bindVars[key] = math.Float64frombits(ui64) case bson.String: l := int(bson.Pack.Uint32(buf.Next(4))) bindVars[key] = buf.Next(l - 1) buf.ReadByte() case bson.Binary: l := int(bson.Pack.Uint32(buf.Next(4))) buf.ReadByte() bindVars[key] = buf.Next(l) case bson.Int: bindVars[key] = int32(bson.Pack.Uint32(buf.Next(4))) case bson.Long: bindVars[key] = int64(bson.Pack.Uint64(buf.Next(8))) case bson.Ulong: bindVars[key] = bson.Pack.Uint64(buf.Next(8)) case bson.Datetime: i64 := int64(bson.Pack.Uint64(buf.Next(8))) // micro->nano->UTC bindVars[key] = time.Unix(0, i64*1e6).UTC() case bson.Null: bindVars[key] = nil default: panic(bson.NewBsonError("don't know how to handle kind %v yet", kind)) } } return }
func (session *Session) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "TransactionId": session.TransactionId = bson.DecodeInt64(buf, kind) case "ConnectionId": session.ConnectionId = bson.DecodeInt64(buf, kind) case "SessionId": session.SessionId = bson.DecodeInt64(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s", key)) } kind = bson.NextByte(buf) } }
func decodeRowsBson(buf *bytes.Buffer, kind byte) [][]sqltypes.Value { switch kind { case bson.Array: // valid case bson.Null: return nil default: panic(bson.NewBsonError("Unexpected data type %v for Query.Rows", kind)) } bson.Next(buf, 4) rows := make([][]sqltypes.Value, 0, 8) kind = bson.NextByte(buf) for i := 0; kind != bson.EOO; i++ { bson.ExpectIndex(buf, i) rows = append(rows, decodeRowBson(buf, kind)) kind = bson.NextByte(buf) } return rows }
func (qr *QueryResult) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "Fields": qr.Fields = decodeFieldsBson(buf, kind) case "RowsAffected": qr.RowsAffected = bson.DecodeUint64(buf, kind) case "InsertId": qr.InsertId = bson.DecodeUint64(buf, kind) case "Rows": qr.Rows = decodeRowsBson(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s", key)) } kind = bson.NextByte(buf) } }
func DecodeResultsBson(buf *bytes.Buffer, kind byte) (results []eproto.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([]eproto.QueryResult, 0, 8) kind = bson.NextByte(buf) var result eproto.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 }
func DecodeQueriesBson(buf *bytes.Buffer, kind byte) (queries []BoundQuery) { 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) queries = make([]BoundQuery, 0, 8) kind = bson.NextByte(buf) var bdq BoundQuery for i := 0; kind != bson.EOO; i++ { bson.ExpectIndex(buf, i) bdq.UnmarshalBson(buf) queries = append(queries, bdq) kind = bson.NextByte(buf) } return queries }
func (query *Query) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "Sql": query.Sql = bson.DecodeString(buf, kind) case "BindVariables": query.BindVariables = DecodeBindVariablesBson(buf, kind) case "TransactionId": query.TransactionId = bson.DecodeInt64(buf, kind) case "ConnectionId": query.ConnectionId = bson.DecodeInt64(buf, kind) case "SessionId": query.SessionId = bson.DecodeInt64(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s", key)) } kind = bson.NextByte(buf) } }
func decodeRowBson(buf *bytes.Buffer, kind byte) []sqltypes.Value { switch kind { case bson.Array: // valid case bson.Null: return nil default: panic(bson.NewBsonError("Unexpected data type %v for Query.Row", kind)) } bson.Next(buf, 4) row := make([]sqltypes.Value, 0, 8) kind = bson.NextByte(buf) for i := 0; kind != bson.EOO; i++ { bson.ExpectIndex(buf, i) if kind != bson.Null { row = append(row, sqltypes.MakeString(bson.DecodeBytes(buf, kind))) } else { row = append(row, sqltypes.Value{}) } kind = bson.NextByte(buf) } return row }