protected override void LRange(int database, RedisKey key, long start, Span <TypedRedisValue> arr) { var stack = GetStack(key, false); using (var iter = stack.GetEnumerator()) { // skip while (start-- > 0) { if (!iter.MoveNext()) { ThrowArgumentOutOfRangeException(); } } // take for (int i = 0; i < arr.Length; i++) { if (!iter.MoveNext()) { ThrowArgumentOutOfRangeException(); } arr[i] = TypedRedisValue.BulkString(iter.Current); } } }
protected virtual TypedRedisValue Rpush(RedisClient client, RedisRequest request) { var key = request.GetKey(1); long length = -1; for (int i = 2; i < request.Count; i++) { length = Rpush(client.Database, key, request.GetValue(i)); } return(TypedRedisValue.Integer(length)); }
protected virtual TypedRedisValue Srem(RedisClient client, RedisRequest request) { int removed = 0; var key = request.GetKey(1); for (int i = 2; i < request.Count; i++) { if (Srem(client.Database, key, request.GetValue(i))) { removed++; } } return(TypedRedisValue.Integer(removed)); }
protected virtual TypedRedisValue LRange(RedisClient client, RedisRequest request) { var key = request.GetKey(1); long start = request.GetInt64(2), stop = request.GetInt64(3); var len = Llen(client.Database, key); if (len == 0) { return(TypedRedisValue.EmptyArray); } if (start < 0) { start = len + start; } if (stop < 0) { stop = len + stop; } if (stop < 0 || start >= len || stop < start) { return(TypedRedisValue.EmptyArray); } if (start < 0) { start = 0; } else if (start >= len) { start = len - 1; } if (stop < 0) { stop = 0; } else if (stop >= len) { stop = len - 1; } var arr = TypedRedisValue.Rent(checked ((int)((stop - start) + 1)), out var span); LRange(client.Database, key, start, span); return(arr); }
protected virtual TypedRedisValue ClientReply(RedisClient client, RedisRequest request) { if (request.IsString(2, "on")) { client.SkipReplies = -1; // reply to nothing } else if (request.IsString(2, "off")) { client.SkipReplies = 0; // reply to everything } else if (request.IsString(2, "skip")) { client.SkipReplies = 2; // this one, and the next one } else { return(TypedRedisValue.Error("ERR syntax error")); } return(TypedRedisValue.OK); }
protected virtual TypedRedisValue Scard(RedisClient client, RedisRequest request) => TypedRedisValue.Integer(Scard(client.Database, request.GetKey(1)));
protected virtual TypedRedisValue Spop(RedisClient client, RedisRequest request) => TypedRedisValue.BulkString(Spop(client.Database, request.GetKey(1)));
protected virtual TypedRedisValue ClientGetname(RedisClient client, RedisRequest request) => TypedRedisValue.BulkString(client.Name);
public TypedRedisValue UnknownSubcommandOrArgumentCount() => TypedRedisValue.Error($"ERR Unknown subcommand or wrong number of arguments for '{ToString()}'.");
public TypedRedisValue CommandNotFound() => TypedRedisValue.Error($"ERR unknown command '{ToString()}'");
public TypedRedisValue WrongArgCount() => TypedRedisValue.Error($"ERR wrong number of arguments for '{ToString()}' command");