--- /dev/null
+.. change::
+ :tags: bug, asyncio
+ :tickets: 12338
+
+ Fixed bug where :meth:`_asyncio.AsyncResult.scalar`,
+ :meth:`_asyncio.AsyncResult.scalar_one_or_none`, and
+ :meth:`_asyncio.AsyncResult.scalar_one` would raise an ``AttributeError``
+ due to a missing internal attribute. Pull request courtesy Allen Ho.
self._metadata = real_result._metadata
self._unique_filter_state = real_result._unique_filter_state
+ self._source_supports_scalars = real_result._source_supports_scalars
self._post_creational_filter = None
# BaseCursorResult pre-generates the "_row_getter". Use that
await conn.run_sync(lambda _: cursor.close())
+ @async_test
+ @testing.variation("case", ["scalar_one", "scalar_one_or_none", "scalar"])
+ async def test_stream_scalar(self, async_engine, case: testing.Variation):
+ users = self.tables.users
+ async with async_engine.connect() as conn:
+ result = await conn.stream(
+ select(users).limit(1).order_by(users.c.user_name)
+ )
+
+ if case.scalar_one:
+ u1 = await result.scalar_one()
+ elif case.scalar_one_or_none:
+ u1 = await result.scalar_one_or_none()
+ elif case.scalar:
+ u1 = await result.scalar()
+ else:
+ case.fail()
+
+ eq_(u1, 1)
+
class TextSyncDBAPI(fixtures.TestBase):
__requires__ = ("asyncio",)