From 0aa02b32e09b37a125fe5eebfea547d56234c405 Mon Sep 17 00:00:00 2001 From: Caio Chassot Date: Wed, 19 Nov 2025 14:15:35 -0300 Subject: [PATCH 1/2] support calling each_hash without block. returns enumerator --- lib/sqlite3/resultset.rb | 1 + test/test_result_set.rb | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/lib/sqlite3/resultset.rb b/lib/sqlite3/resultset.rb index 8af61913..6ecbf7fb 100644 --- a/lib/sqlite3/resultset.rb +++ b/lib/sqlite3/resultset.rb @@ -54,6 +54,7 @@ def each # Provides an internal iterator over the rows of the result set where # each row is yielded as a hash. def each_hash + return enum_for(__method__) unless block_given? while (node = next_hash) yield node end diff --git a/test/test_result_set.rb b/test/test_result_set.rb index 4fc12280..bdde3d64 100644 --- a/test/test_result_set.rb +++ b/test/test_result_set.rb @@ -24,6 +24,12 @@ def test_each_hash assert_equal list[hash["a"] - 1], hash["b"] end rs.close + + rs = @db.prepare("select * from foo").execute + rs.each_hash.to_a do |hash| + assert_equal list[hash["a"] - 1], hash["b"] + end + rs.close end def test_next_hash From 23836c05f9426ddf8e7350a42a42a8ee89683cb0 Mon Sep 17 00:00:00 2001 From: Caio Chassot Date: Wed, 19 Nov 2025 15:26:59 -0300 Subject: [PATCH 2/2] support calling #each without block. returns enumerator --- lib/sqlite3/resultset.rb | 1 + test/test_integration_resultset.rb | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/sqlite3/resultset.rb b/lib/sqlite3/resultset.rb index 6ecbf7fb..bb8819f4 100644 --- a/lib/sqlite3/resultset.rb +++ b/lib/sqlite3/resultset.rb @@ -46,6 +46,7 @@ def next # Required by the Enumerable mixin. Provides an internal iterator over the # rows of the result set. def each + return enum_for(__method__) unless block_given? while (node = self.next) yield node end diff --git a/test/test_integration_resultset.rb b/test/test_integration_resultset.rb index 531d6154..c7ab9048 100644 --- a/test/test_integration_resultset.rb +++ b/test/test_integration_resultset.rb @@ -117,6 +117,13 @@ def test_each assert_equal 2, called end + def test_each_enum + called = 0 + @result.reset(1, 2) + @result.each.to_a.each { |row| called += 1 } + assert_equal 2, called + end + def test_enumerable @result.reset(1, 2) assert_equal 2, @result.to_a.length @@ -139,7 +146,7 @@ def test_close assert_predicate stmt, :closed? assert_raise(SQLite3::Exception) { result.reset } assert_raise(SQLite3::Exception) { result.next } - assert_raise(SQLite3::Exception) { result.each } + assert_raise(SQLite3::Exception) { result.each.next } assert_raise(SQLite3::Exception) { result.close } assert_raise(SQLite3::Exception) { result.types } assert_raise(SQLite3::Exception) { result.columns }