本文整理汇总了Golang中github.com/aerospike/aerospike-client-go/utils/buffer.BytesToUint32函数的典型用法代码示例。如果您正苦于以下问题:Golang BytesToUint32函数的具体用法?Golang BytesToUint32怎么用?Golang BytesToUint32使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了BytesToUint32函数的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: parseObject
func (cmd *readCommand) parseObject(
opCount int,
fieldCount int,
generation uint32,
expiration uint32,
) error {
receiveOffset := 0
// There can be fields in the response (setname etc).
// But for now, ignore them. Expose them to the API if needed in the future.
// Logger.Debug("field count: %d, databuffer: %v", fieldCount, cmd.dataBuffer)
if fieldCount > 0 {
// Just skip over all the fields
for i := 0; i < fieldCount; i++ {
// Logger.Debug("%d", receiveOffset)
fieldSize := int(Buffer.BytesToUint32(cmd.dataBuffer, receiveOffset))
receiveOffset += (4 + fieldSize)
}
}
var rv reflect.Value
if opCount > 0 {
rv = reflect.ValueOf(cmd.object)
if rv.Kind() != reflect.Ptr {
return errors.New("Invalid type for result object. It should be of type Struct Pointer.")
}
rv = rv.Elem()
if !rv.CanAddr() {
return errors.New("Invalid type for object. It should be addressable (a pointer)")
}
if rv.Kind() != reflect.Struct {
return errors.New("Invalid type for object. It should be a pointer to a struct.")
}
// map tags
cacheObjectTags(rv)
}
for i := 0; i < opCount; i++ {
opSize := int(Buffer.BytesToUint32(cmd.dataBuffer, receiveOffset))
particleType := int(cmd.dataBuffer[receiveOffset+5])
nameSize := int(cmd.dataBuffer[receiveOffset+7])
name := string(cmd.dataBuffer[receiveOffset+8 : receiveOffset+8+nameSize])
receiveOffset += 4 + 4 + nameSize
particleBytesSize := int(opSize - (4 + nameSize))
value, _ := bytesToParticle(particleType, cmd.dataBuffer, receiveOffset, particleBytesSize)
if err := setObjectField(rv, name, value); err != nil {
return err
}
receiveOffset += particleBytesSize
}
return nil
}
开发者ID:mantyr,项目名称:aerospike-client-go,代码行数:59,代码来源:read_command.go
示例2: parseRecord
func (cmd *readCommand) parseRecord(
opCount int,
fieldCount int,
generation uint32,
expiration uint32,
) (*Record, error) {
var bins BinMap
receiveOffset := 0
// There can be fields in the response (setname etc).
// But for now, ignore them. Expose them to the API if needed in the future.
// Logger.Debug("field count: %d, databuffer: %v", fieldCount, cmd.dataBuffer)
if fieldCount > 0 {
// Just skip over all the fields
for i := 0; i < fieldCount; i++ {
// Logger.Debug("%d", receiveOffset)
fieldSize := int(Buffer.BytesToUint32(cmd.dataBuffer, receiveOffset))
receiveOffset += (4 + fieldSize)
}
}
if opCount > 0 {
bins = make(BinMap, opCount)
}
for i := 0; i < opCount; i++ {
opSize := int(Buffer.BytesToUint32(cmd.dataBuffer, receiveOffset))
particleType := int(cmd.dataBuffer[receiveOffset+5])
nameSize := int(cmd.dataBuffer[receiveOffset+7])
name := string(cmd.dataBuffer[receiveOffset+8 : receiveOffset+8+nameSize])
receiveOffset += 4 + 4 + nameSize
particleBytesSize := int(opSize - (4 + nameSize))
value, _ := bytesToParticle(particleType, cmd.dataBuffer, receiveOffset, particleBytesSize)
receiveOffset += particleBytesSize
if bins == nil {
bins = make(BinMap, opCount)
}
// for operate list command results
if prev, exists := bins[name]; exists {
if res, ok := prev.([]interface{}); ok {
// List already exists. Add to it.
bins[name] = append(res, value)
} else {
// Make a list to store all values.
bins[name] = []interface{}{prev, value}
}
} else {
bins[name] = value
}
}
return newRecord(cmd.node, cmd.key, bins, generation, expiration), nil
}
开发者ID:mantyr,项目名称:aerospike-client-go,代码行数:56,代码来源:read_command.go
示例3: parseRecord
// Parses the given byte buffer and populate the result object.
// Returns the number of bytes that were parsed from the given buffer.
func (cmd *batchCommandGet) parseRecord(key *Key, opCount int, generation int, expiration int) (*Record, error) {
bins := make(map[string]interface{}, opCount)
for i := 0; i < opCount; i++ {
if err := cmd.readBytes(8); err != nil {
return nil, err
}
opSize := int(Buffer.BytesToUint32(cmd.dataBuffer, 0))
particleType := int(cmd.dataBuffer[5])
nameSize := int(cmd.dataBuffer[7])
if err := cmd.readBytes(nameSize); err != nil {
return nil, err
}
name := string(cmd.dataBuffer[:nameSize])
particleBytesSize := int(opSize - (4 + nameSize))
if err := cmd.readBytes(particleBytesSize); err != nil {
return nil, err
}
value, err := bytesToParticle(particleType, cmd.dataBuffer, 0, particleBytesSize)
if err != nil {
return nil, err
}
bins[name] = value
}
return newRecord(cmd.node, key, bins, generation, expiration), nil
}
开发者ID:Kavec,项目名称:aerospike-client-go,代码行数:32,代码来源:batch_command_get.go
示例4: parseRecordResults
// Parse all results in the batch. Add records to shared list.
// If the record was not found, the bins will be nil.
func (cmd *batchCommandGet) parseRecordResults(ifc command, receiveSize int) (bool, error) {
//Parse each message response and add it to the result array
cmd.dataOffset = 0
for cmd.dataOffset < receiveSize {
if err := cmd.readBytes(int(_MSG_REMAINING_HEADER_SIZE)); err != nil {
return false, err
}
resultCode := ResultCode(cmd.dataBuffer[5] & 0xFF)
// The only valid server return codes are "ok" and "not found".
// If other return codes are received, then abort the batch.
if resultCode != 0 && resultCode != KEY_NOT_FOUND_ERROR {
return false, NewAerospikeError(resultCode)
}
info3 := int(cmd.dataBuffer[3])
// If cmd is the end marker of the response, do not proceed further
if (info3 & _INFO3_LAST) == _INFO3_LAST {
return false, nil
}
generation := int(Buffer.BytesToUint32(cmd.dataBuffer, 6))
expiration := TTL(int(Buffer.BytesToUint32(cmd.dataBuffer, 10)))
fieldCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 18))
opCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 20))
key, err := cmd.parseKey(fieldCount)
if err != nil {
return false, err
}
offset := cmd.batchNamespace.offsets[cmd.index] //cmd.keyMap[string(key.digest)]
cmd.index++
if bytes.Equal(key.digest, cmd.keys[offset].digest) {
if resultCode == 0 {
if cmd.records[offset], err = cmd.parseRecord(key, opCount, generation, expiration); err != nil {
return false, err
}
}
} else {
Logger.Debug("Unexpected batch key returned: " + string(key.namespace) + "," + Buffer.BytesToHexString(key.digest))
}
}
return true, nil
}
开发者ID:Kavec,项目名称:aerospike-client-go,代码行数:49,代码来源:batch_command_get.go
示例5: parseObject
func (cmd *readCommand) parseObject(
opCount int,
fieldCount int,
generation int,
expiration int,
) error {
receiveOffset := 0
// There can be fields in the response (setname etc).
// But for now, ignore them. Expose them to the API if needed in the future.
// Logger.Debug("field count: %d, databuffer: %v", fieldCount, cmd.dataBuffer)
if fieldCount > 0 {
// Just skip over all the fields
for i := 0; i < fieldCount; i++ {
// Logger.Debug("%d", receiveOffset)
fieldSize := int(Buffer.BytesToUint32(cmd.dataBuffer, receiveOffset))
receiveOffset += (4 + fieldSize)
}
}
var rv reflect.Value
if opCount > 0 {
rv = reflect.ValueOf(cmd.object).Elem()
// map tags
cacheObjectTags(rv)
}
for i := 0; i < opCount; i++ {
opSize := int(Buffer.BytesToUint32(cmd.dataBuffer, receiveOffset))
particleType := int(cmd.dataBuffer[receiveOffset+5])
nameSize := int(cmd.dataBuffer[receiveOffset+7])
name := string(cmd.dataBuffer[receiveOffset+8 : receiveOffset+8+nameSize])
receiveOffset += 4 + 4 + nameSize
particleBytesSize := int(opSize - (4 + nameSize))
value, _ := bytesToParticle(particleType, cmd.dataBuffer, receiveOffset, particleBytesSize)
if err := cmd.setObjectField(rv, name, value); err != nil {
return err
}
receiveOffset += particleBytesSize
}
return nil
}
开发者ID:Kavec,项目名称:aerospike-client-go,代码行数:46,代码来源:read_command.go
示例6: parseRecord
func (cmd *readCommand) parseRecord(
opCount int,
fieldCount int,
generation int,
expiration int,
) (*Record, error) {
var bins BinMap
receiveOffset := 0
// There can be fields in the response (setname etc).
// But for now, ignore them. Expose them to the API if needed in the future.
// Logger.Debug("field count: %d, databuffer: %v", fieldCount, cmd.dataBuffer)
if fieldCount > 0 {
// Just skip over all the fields
for i := 0; i < fieldCount; i++ {
// Logger.Debug("%d", receiveOffset)
fieldSize := int(Buffer.BytesToUint32(cmd.dataBuffer, receiveOffset))
receiveOffset += (4 + fieldSize)
}
}
for i := 0; i < opCount; i++ {
opSize := int(Buffer.BytesToUint32(cmd.dataBuffer, receiveOffset))
particleType := int(cmd.dataBuffer[receiveOffset+5])
nameSize := int(cmd.dataBuffer[receiveOffset+7])
name := string(cmd.dataBuffer[receiveOffset+8 : receiveOffset+8+nameSize])
receiveOffset += 4 + 4 + nameSize
particleBytesSize := int(opSize - (4 + nameSize))
value, _ := bytesToParticle(particleType, cmd.dataBuffer, receiveOffset, particleBytesSize)
receiveOffset += particleBytesSize
if bins == nil {
bins = make(BinMap, opCount)
}
bins[name] = value
}
return newRecord(cmd.node, cmd.key, bins, generation, expiration), nil
}
开发者ID:Kavec,项目名称:aerospike-client-go,代码行数:40,代码来源:read_command.go
示例7: parseRecordResults
func (cmd *serverCommand) parseRecordResults(ifc command, receiveSize int) (bool, error) {
// Server commands (Query/Execute UDF) should only send back a return code.
// Keep parsing logic to empty socket buffer just in case server does
// send records back.
cmd.dataOffset = 0
for cmd.dataOffset < receiveSize {
if err := cmd.readBytes(int(_MSG_REMAINING_HEADER_SIZE)); err != nil {
return false, err
}
resultCode := ResultCode(cmd.dataBuffer[5] & 0xFF)
if resultCode != 0 {
if resultCode == KEY_NOT_FOUND_ERROR {
return false, nil
}
return false, NewAerospikeError(resultCode)
}
info3 := int(cmd.dataBuffer[3])
// If cmd is the end marker of the response, do not proceed further
if (info3 & _INFO3_LAST) == _INFO3_LAST {
return false, nil
}
fieldCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 18))
opCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 20))
if _, err := cmd.parseKey(fieldCount); err != nil {
return false, err
}
for i := 0; i < opCount; i++ {
if err := cmd.readBytes(8); err != nil {
return false, err
}
opSize := int(Buffer.BytesToUint32(cmd.dataBuffer, 0))
nameSize := int(cmd.dataBuffer[7])
if err := cmd.readBytes(nameSize); err != nil {
return false, err
}
particleBytesSize := int((opSize - (4 + nameSize)))
if err := cmd.readBytes(particleBytesSize); err != nil {
return false, err
}
}
}
return true, nil
}
开发者ID:mantyr,项目名称:aerospike-client-go,代码行数:52,代码来源:server_command.go
示例8: parseResult
func (cmd *readHeaderCommand) parseResult(ifc command, conn *Connection) error {
// Read header.
if _, err := conn.Read(cmd.dataBuffer, int(_MSG_TOTAL_HEADER_SIZE)); err != nil {
return err
}
resultCode := cmd.dataBuffer[13] & 0xFF
if resultCode == 0 {
generation := int(Buffer.BytesToUint32(cmd.dataBuffer, 14))
expiration := TTL(int(Buffer.BytesToUint32(cmd.dataBuffer, 18)))
cmd.record = newRecord(cmd.node, cmd.key, nil, generation, expiration)
} else {
if ResultCode(resultCode) == KEY_NOT_FOUND_ERROR {
cmd.record = nil
} else {
return NewAerospikeError(ResultCode(resultCode))
}
}
if err := cmd.emptySocket(conn); err != nil {
return err
}
return nil
}
开发者ID:Kavec,项目名称:aerospike-client-go,代码行数:24,代码来源:read_header_command.go
示例9: parseObject
func (cmd *baseMultiCommand) parseObject(
obj reflect.Value,
opCount int,
fieldCount int,
generation uint32,
expiration uint32,
) error {
for i := 0; i < opCount; i++ {
if err := cmd.readBytes(8); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return err
}
opSize := int(Buffer.BytesToUint32(cmd.dataBuffer, 0))
particleType := int(cmd.dataBuffer[5])
nameSize := int(cmd.dataBuffer[7])
if err := cmd.readBytes(nameSize); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return err
}
name := string(cmd.dataBuffer[:nameSize])
particleBytesSize := int((opSize - (4 + nameSize)))
if err := cmd.readBytes(particleBytesSize); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return err
}
value, err := bytesToParticle(particleType, cmd.dataBuffer, 0, particleBytesSize)
if err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return err
}
iobj := reflect.Indirect(obj)
for iobj.Kind() == reflect.Ptr {
iobj = reflect.Indirect(iobj)
}
if err := setObjectField(cmd.resObjMappings, iobj, name, value); err != nil {
return err
}
}
return nil
}
开发者ID:atomx,项目名称:aerospike-client-go,代码行数:46,代码来源:batch_command.go
示例10: parseKey
func (cmd *baseMultiCommand) parseKey(fieldCount int) (*Key, error) {
var digest []byte
var namespace, setName string
var userKey Value
var err error
for i := 0; i < fieldCount; i++ {
if err = cmd.readBytes(4); err != nil {
return nil, err
}
fieldlen := int(Buffer.BytesToUint32(cmd.dataBuffer, 0))
if err = cmd.readBytes(fieldlen); err != nil {
return nil, err
}
fieldtype := FieldType(cmd.dataBuffer[0])
size := fieldlen - 1
switch fieldtype {
case DIGEST_RIPE:
digest = make([]byte, size, size)
copy(digest, cmd.dataBuffer[1:size+1])
case NAMESPACE:
namespace = string(cmd.dataBuffer[1 : size+1])
case TABLE:
setName = string(cmd.dataBuffer[1 : size+1])
case KEY:
if userKey, err = bytesToKeyValue(int(cmd.dataBuffer[1]), cmd.dataBuffer, 2, size-1); err != nil {
return nil, err
}
}
}
return &Key{namespace: namespace, setName: setName, digest: digest, userKey: userKey}, nil
}
开发者ID:shatil,项目名称:aerospike-client-go,代码行数:36,代码来源:batch_command.go
示例11: parseRecordResults
func (cmd *scanCommand) parseRecordResults(ifc command, receiveSize int) (bool, error) {
// Read/parse remaining message bytes one record at a time.
cmd.dataOffset = 0
for cmd.dataOffset < receiveSize {
if err := cmd.readBytes(int(_MSG_REMAINING_HEADER_SIZE)); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
resultCode := ResultCode(cmd.dataBuffer[5] & 0xFF)
if resultCode != 0 {
if resultCode == KEY_NOT_FOUND_ERROR {
// consume the rest of the input buffer from the socket
if cmd.dataOffset < receiveSize {
if err := cmd.readBytes(receiveSize - cmd.dataOffset); err != nil {
return false, err
}
}
return false, nil
}
err := NewAerospikeError(resultCode)
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
info3 := int(cmd.dataBuffer[3])
// If cmd is the end marker of the response, do not proceed further
if (info3 & _INFO3_LAST) == _INFO3_LAST {
return false, nil
}
generation := int(Buffer.BytesToUint32(cmd.dataBuffer, 6))
expiration := TTL(int(Buffer.BytesToUint32(cmd.dataBuffer, 10)))
fieldCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 18))
opCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 20))
key, err := cmd.parseKey(fieldCount)
if err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
// Parse bins.
var bins BinMap
for i := 0; i < opCount; i++ {
if err := cmd.readBytes(8); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
opSize := int(Buffer.BytesToUint32(cmd.dataBuffer, 0))
particleType := int(cmd.dataBuffer[5])
nameSize := int(cmd.dataBuffer[7])
if err := cmd.readBytes(nameSize); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
name := string(cmd.dataBuffer[:nameSize])
particleBytesSize := int(opSize - (4 + nameSize))
if err := cmd.readBytes(particleBytesSize); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
value, err := bytesToParticle(particleType, cmd.dataBuffer, 0, particleBytesSize)
if err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
if bins == nil {
bins = BinMap{}
}
bins[name] = value
}
// If the channel is full and it blocks, we don't want this command to
// block forever, or panic in case the channel is closed in the meantime.
select {
// send back the result on the async channel
case cmd.recordset.Records <- newRecord(cmd.node, key, bins, generation, expiration):
case <-cmd.recordset.cancelled:
return false, NewAerospikeError(SCAN_TERMINATED)
}
}
return true, nil
}
开发者ID:Kavec,项目名称:aerospike-client-go,代码行数:93,代码来源:scan_command.go
示例12: parseRecordResults
func (cmd *baseMultiCommand) parseRecordResults(ifc command, receiveSize int) (bool, error) {
// Read/parse remaining message bytes one record at a time.
cmd.dataOffset = 0
for cmd.dataOffset < receiveSize {
if err := cmd.readBytes(int(_MSG_REMAINING_HEADER_SIZE)); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
resultCode := ResultCode(cmd.dataBuffer[5] & 0xFF)
if resultCode != 0 {
if resultCode == KEY_NOT_FOUND_ERROR {
// consume the rest of the input buffer from the socket
if cmd.dataOffset < receiveSize {
if err := cmd.readBytes(receiveSize - cmd.dataOffset); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
}
return false, nil
}
err := NewAerospikeError(resultCode)
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
info3 := int(cmd.dataBuffer[3])
// If cmd is the end marker of the response, do not proceed further
if (info3 & _INFO3_LAST) == _INFO3_LAST {
return false, nil
}
generation := Buffer.BytesToUint32(cmd.dataBuffer, 6)
expiration := TTL(Buffer.BytesToUint32(cmd.dataBuffer, 10))
fieldCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 18))
opCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 20))
key, err := cmd.parseKey(fieldCount)
if err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
// if there is a recordset, process the record traditionally
// otherwise, it is supposed to be a record channel
if cmd.selectCases == nil {
// Parse bins.
var bins BinMap
for i := 0; i < opCount; i++ {
if err := cmd.readBytes(8); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
opSize := int(Buffer.BytesToUint32(cmd.dataBuffer, 0))
particleType := int(cmd.dataBuffer[5])
nameSize := int(cmd.dataBuffer[7])
if err := cmd.readBytes(nameSize); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
name := string(cmd.dataBuffer[:nameSize])
particleBytesSize := int((opSize - (4 + nameSize)))
if err = cmd.readBytes(particleBytesSize); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
value, err := bytesToParticle(particleType, cmd.dataBuffer, 0, particleBytesSize)
if err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
if bins == nil {
bins = make(BinMap, opCount)
}
bins[name] = value
}
// If the channel is full and it blocks, we don't want this command to
// block forever, or panic in case the channel is closed in the meantime.
select {
// send back the result on the async channel
case cmd.recordset.Records <- newRecord(cmd.node, key, bins, generation, expiration):
case <-cmd.recordset.cancelled:
return false, NewAerospikeError(cmd.terminationErrorType)
}
} else {
obj := reflect.New(cmd.resObjType)
if err := cmd.parseObject(obj, opCount, fieldCount, generation, expiration); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
// set the object to send
//.........这里部分代码省略.........
开发者ID:shatil,项目名称:aerospike-client-go,代码行数:101,代码来源:batch_command.go
示例13: parseResult
func (cmd *readCommand) parseResult(ifc command, conn *Connection) error {
// Read header.
_, err := conn.Read(cmd.dataBuffer, int(_MSG_TOTAL_HEADER_SIZE))
if err != nil {
Logger.Warn("parse result error: " + err.Error())
return err
}
// A number of these are commented out because we just don't care enough to read
// that section of the header. If we do care, uncomment and check!
sz := Buffer.BytesToInt64(cmd.dataBuffer, 0)
headerLength := int(cmd.dataBuffer[8])
resultCode := ResultCode(cmd.dataBuffer[13] & 0xFF)
generation := int(Buffer.BytesToUint32(cmd.dataBuffer, 14))
expiration := TTL(int(Buffer.BytesToUint32(cmd.dataBuffer, 18)))
fieldCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 26)) // almost certainly 0
opCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 28))
receiveSize := int((sz & 0xFFFFFFFFFFFF) - int64(headerLength))
// Read remaining message bytes.
if receiveSize > 0 {
if err = cmd.sizeBufferSz(receiveSize); err != nil {
return err
}
_, err = conn.Read(cmd.dataBuffer, receiveSize)
if err != nil {
Logger.Warn("parse result error: " + err.Error())
return err
}
}
if resultCode != 0 {
if resultCode == KEY_NOT_FOUND_ERROR && cmd.object == nil {
return nil
}
if resultCode == UDF_BAD_RESPONSE {
cmd.record, _ = cmd.parseRecord(opCount, fieldCount, generation, expiration)
err := cmd.handleUdfError(resultCode)
Logger.Warn("UDF execution error: " + err.Error())
return err
}
return NewAerospikeError(resultCode)
}
if cmd.object == nil {
if opCount == 0 {
// data Bin was not returned.
cmd.record = newRecord(cmd.node, cmd.key, nil, generation, expiration)
return nil
}
cmd.record, err = cmd.parseRecord(opCount, fieldCount, generation, expiration)
if err != nil {
return err
}
} else {
cmd.parseObject(opCount, fieldCount, generation, expiration)
}
return nil
}
开发者ID:Kavec,项目名称:aerospike-client-go,代码行数:64,代码来源:read_command.go
示例14: parseRecordResults
func (cmd *queryAggregateCommand) parseRecordResults(ifc command, receiveSize int) (bool, error) {
// Read/parse remaining message bytes one record at a time.
cmd.dataOffset = 0
for cmd.dataOffset < receiveSize {
if err := cmd.readBytes(int(_MSG_REMAINING_HEADER_SIZE)); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
resultCode := ResultCode(cmd.dataBuffer[5] & 0xFF)
if resultCode != 0 {
if resultCode == KEY_NOT_FOUND_ERROR {
// consume the rest of the input buffer from the socket
if cmd.dataOffset < receiveSize {
if err := cmd.readBytes(receiveSize - cmd.dataOffset); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
}
return false, nil
}
err := NewAerospikeError(resultCode)
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
info3 := int(cmd.dataBuffer[3])
// If cmd is the end marker of the response, do not proceed further
if (info3 & _INFO3_LAST) == _INFO3_LAST {
return false, nil
}
// generation := Buffer.BytesToUint32(cmd.dataBuffer, 6)
// expiration := TTL(Buffer.BytesToUint32(cmd.dataBuffer, 10))
fieldCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 18))
opCount := int(Buffer.BytesToUint16(cmd.dataBuffer, 20))
if opCount != 1 {
err := fmt.Errorf("Query aggregate command expects exactly only one bin. Received: %d", opCount)
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
_, err := cmd.parseKey(fieldCount)
if err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
// if there is a recordset, process the record traditionally
// otherwise, it is supposed to be a record channel
// Parse bins.
var bins BinMap
for i := 0; i < opCount; i++ {
if err := cmd.readBytes(8); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
opSize := int(Buffer.BytesToUint32(cmd.dataBuffer, 0))
particleType := int(cmd.dataBuffer[5])
nameSize := int(cmd.dataBuffer[7])
if err := cmd.readBytes(nameSize); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
name := string(cmd.dataBuffer[:nameSize])
particleBytesSize := int((opSize - (4 + nameSize)))
if err = cmd.readBytes(particleBytesSize); err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
value, err := bytesToParticle(particleType, cmd.dataBuffer, 0, particleBytesSize)
if err != nil {
cmd.recordset.Errors <- newNodeError(cmd.node, err)
return false, err
}
if bins == nil {
bins = make(BinMap, opCount)
}
bins[name] = value
}
recs, exists := bins["SUCCESS"]
if !exists {
if errStr, exists := bins["FAILURE"]; exists {
cmd.recordset.Errors <- NewAerospikeError(QUERY_GENERIC, errStr.(string))
return false, err
} else {
cmd.recordset.Errors <- NewAerospikeError(QUERY_GENERIC, fmt.Sprintf("QueryAggregate's expected result was not returned. Received: %v", bins))
return false, err
}
}
//.........这里部分代码省略.........
开发者ID:mantyr,项目名称:aerospike-client-go,代码行数:101,代码来源:query_aggregate_command.go
注:本文中的github.com/aerospike/aerospike-client-go/utils/buffer.BytesToUint32函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论