--- /dev/null
+.. change::
+ :tags: bug, orm, regression
+ :tickets: 11562
+
+ Fixed regression going back to 1.4 where accessing a collection using the
+ "dynamic" strategy on a transient object and attempting to query would
+ raise an internal error rather than the expected :class:`.NoResultFound`
+ that occurred in 1.3.
return result.IteratorResult(
result.SimpleResultMetaData([self.attr.class_.__name__]),
- self.attr._get_collection_history( # type: ignore[arg-type]
- attributes.instance_state(self.instance),
- PassiveFlag.PASSIVE_NO_INITIALIZE,
- ).added_items,
+ iter(
+ self.attr._get_collection_history(
+ attributes.instance_state(self.instance),
+ PassiveFlag.PASSIVE_NO_INITIALIZE,
+ ).added_items
+ ),
_source_supports_scalars=True,
).scalars()
else:
use_default_dialect=True,
)
+ @testing.combinations(
+ ("all", []),
+ ("one", exc.NoResultFound),
+ ("one_or_none", None),
+ argnames="method, expected",
+ )
+ @testing.variation("add_to_session", [True, False])
+ def test_transient_raise(
+ self, user_address_fixture, method, expected, add_to_session
+ ):
+ """test 11562"""
+ User, Address = user_address_fixture()
+
+ u1 = User(name="u1")
+ if add_to_session:
+ sess = fixture_session()
+ sess.add(u1)
+
+ meth = getattr(u1.addresses, method)
+ if expected is exc.NoResultFound:
+ with expect_raises_message(
+ exc.NoResultFound, "No row was found when one was required"
+ ):
+ meth()
+ else:
+ eq_(meth(), expected)
+
def test_detached_raise(self, user_address_fixture):
"""so filtering on a detached dynamic list raises an error..."""