1
0
mirror of https://github.com/redis/go-redis.git synced 2025-07-28 06:42:00 +03:00

Merge pull request #310 from go-redis/feature/scan-iterators

Scan iterators (v4)
This commit is contained in:
Vladimir Mihailenco
2016-04-26 16:05:38 +03:00
6 changed files with 216 additions and 18 deletions

View File

@ -694,41 +694,42 @@ type ScanCmd struct {
baseCmd
cursor int64
keys []string
page []string
}
func NewScanCmd(args ...interface{}) *ScanCmd {
return &ScanCmd{baseCmd: baseCmd{_args: args, _clusterKeyPos: 1}}
return &ScanCmd{
baseCmd: baseCmd{_args: args, _clusterKeyPos: 1},
}
}
func (cmd *ScanCmd) reset() {
cmd.cursor = 0
cmd.keys = nil
cmd.page = nil
cmd.err = nil
}
// TODO: cursor should be string to match redis type
// TODO: swap return values
func (cmd *ScanCmd) Val() (int64, []string) {
return cmd.cursor, cmd.keys
return cmd.cursor, cmd.page
}
func (cmd *ScanCmd) Result() (int64, []string, error) {
return cmd.cursor, cmd.keys, cmd.err
return cmd.cursor, cmd.page, cmd.err
}
func (cmd *ScanCmd) String() string {
return cmdString(cmd, cmd.keys)
return cmdString(cmd, cmd.page)
}
func (cmd *ScanCmd) readReply(cn *pool.Conn) error {
keys, cursor, err := readScanReply(cn)
page, cursor, err := readScanReply(cn)
if err != nil {
cmd.err = err
return cmd.err
}
cmd.keys = keys
cmd.page = page
cmd.cursor = cursor
return nil
}