From 8e4c20e9281d877a7d8fcf4eba12b295e8d8e128 Mon Sep 17 00:00:00 2001 From: Jason Penny Date: Mon, 29 Apr 2024 13:13:28 -0400 Subject: [PATCH 1/2] Test shows multi in pipeline does not return hash for #hgetall --- test/redis/pipelining_commands_test.rb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/redis/pipelining_commands_test.rb b/test/redis/pipelining_commands_test.rb index 6265921a0..92417ac76 100644 --- a/test/redis/pipelining_commands_test.rb +++ b/test/redis/pipelining_commands_test.rb @@ -239,6 +239,23 @@ def test_zpopmax_in_a_pipeline_produces_future assert_equal ["value", 1.0], future.value end + def test_hgetall_in_a_multi_in_a_pipeline_returns_hash + future = nil + result = r.pipelined do |p| + p.multi do |m| + m.hmset("hash", "field", "value", "field2", "value2") + future = m.hgetall("hash") + end + end + + if Gem::Version.new(Redis::VERSION) > Gem::Version.new("4.8") + result = result.last + end + + assert_equal({ "field" => "value", "field2" => "value2" }, result.last) + assert_equal({ "field" => "value", "field2" => "value2" }, future.value) + end + def test_keys_in_a_pipeline r.set("key", "value") result = r.pipelined do |p| From b1e58105b81ed994fa6e1ee1227576fa26c42f34 Mon Sep 17 00:00:00 2001 From: Jason Penny Date: Mon, 29 Apr 2024 14:12:09 -0400 Subject: [PATCH 2/2] Redis::MultiFuture in a pipeline transforms values --- lib/redis/pipeline.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/redis/pipeline.rb b/lib/redis/pipeline.rb index 0e415aa98..99eaf101f 100644 --- a/lib/redis/pipeline.rb +++ b/lib/redis/pipeline.rb @@ -118,12 +118,14 @@ def initialize(futures) end def _set(replies) - if replies - @futures.each_with_index do |future, index| + @object = if replies + @futures.map.with_index do |future, index| future._set(replies[index]) + future.value end + else + replies end - @object = replies end end end