func (c *Context) goScan(zop bool, tableId uint8, rowKey, colKey []byte, score int64, start, asc, orderByScore bool, num int, done chan *Call) (*Call, error) { call := c.cli.newCall(proto.CmdScan, done) if call.err != nil { return call, call.err } if num < 1 { c.cli.errCall(call, ErrInvScanNum) return call, call.err } var p proto.PkgScanReq p.Seq = call.seq p.DbId = c.dbId p.Cmd = call.cmd if asc { p.PkgFlag |= proto.FlagScanAsc } if start { p.PkgFlag |= proto.FlagScanKeyStart } p.Num = uint16(num) p.TableId = tableId p.RowKey = rowKey p.ColKey = colKey // ZScan if zop { p.PkgFlag |= proto.FlagZop p.SetScore(score) if orderByScore { p.SetColSpace(proto.ColSpaceScore1) } else { p.SetColSpace(proto.ColSpaceScore2) } } var pkgLen = p.Length() if pkgLen > proto.MaxPkgLen { c.cli.errCall(call, ErrInvPkgLen) return call, call.err } call.pkg = make([]byte, pkgLen) _, err := p.Encode(call.pkg) if err != nil { c.cli.errCall(call, err) return call, err } call.ctx = scanContext{tableId, rowKey, zop, asc, orderByScore, num} c.cli.sending <- call return call, nil }
func myScan(in proto.PkgScanReq, au Authorize, t *testing.T) proto.PkgScanResp { var pkg = make([]byte, in.Length()) _, err := in.Encode(pkg) if err != nil { t.Fatalf("Encode failed: ", err) } pkg = testTbl.Scan(&PkgArgs{in.Cmd, in.DbId, in.Seq, pkg}, au) var out proto.PkgScanResp _, err = out.Decode(pkg) if err != nil { t.Fatalf("Decode failed: ", err) } if out.ErrCode != 0 { t.Fatalf("Failed with ErrCode %d", out.ErrCode) } if out.DbId != in.DbId || out.Seq != in.Seq { t.Fatalf("DbId/Seq mismatch") } return out }