Skip to content

Commit 508de8b

Browse files
committed
Add test to check SqlPooledResult is not prematurely disposed
1 parent 0c926e0 commit 508de8b

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

test/SqlPooledResultTest.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,32 @@ public function testIdleConnectionsRemovedAfterTimeout()
4949

5050
$this->assertTrue($invoked); // No next result set, so release callback invoked.
5151
}
52+
53+
public function testIteratorRetainsReference(): void
54+
{
55+
$expectedRow = ['column' => 'value'];
56+
$expectedRows = [$expectedRow, $expectedRow, $expectedRow];
57+
$stubResult = new StubSqlResult([$expectedRow, $expectedRow, $expectedRow]);
58+
59+
$invoked = false;
60+
$release = function () use (&$invoked) {
61+
$invoked = true;
62+
};
63+
64+
$iterationCount = 0;
65+
foreach ((new StubSqlPooledResult($stubResult, $release)) as $row) {
66+
++$iterationCount;
67+
68+
delay(0); // Tick event loop to allow entry into disposal function if queued in event loop.
69+
70+
self::assertSame($expectedRow, $row);
71+
self::assertFalse($invoked);
72+
}
73+
74+
self::assertSame(count($expectedRows), $iterationCount);
75+
76+
delay(0); // Tick event loop to dispose of result set.
77+
78+
$this->assertTrue($invoked);
79+
}
5280
}

0 commit comments

Comments
 (0)