.. changelog::
:version: 1.0.9
+ .. change::
+ :tags: bug, orm
+ :tickets: 3510
+ :versions: 1.1.0b1
+
+ Fixed 1.0 regression where the "noload" loader strategy would fail
+ to function for a many-to-one relationship. The loader used an
+ API to place "None" into the dictionary which no longer actually
+ writes a value; this is a side effect of :ticket:`3061`.
+
.. change::
:tags: bug, sybase
:tickets: 3508, 3509
+ :versions: 1.1.0b1
Fixed two issues regarding Sybase reflection, allowing tables
without primary keys to be reflected as well as ensured that
.. change::
:tags: bug, postgresql
:pullreq: github:190
+ :versions: 1.1.0b1
An adjustment to the new Postgresql feature of reflecting storage
options and USING of :ticket:`3455` released in 1.0.6,
def initialize(self, state, dict_):
"""Initialize the given state's attribute with an empty value."""
+ # As of 1.0, we don't actually set a value in
+ # dict_. This is so that the state of the object does not get
+ # modified without emitting the appropriate events.
+
+
return None
def get(self, state, dict_, passive=PASSIVE_OFF):
state_dict['manager'](self, inst, state_dict)
- def _initialize(self, key):
- """Set this attribute to an empty value or collection,
- based on the AttributeImpl in use."""
-
- self.manager.get_impl(key).initialize(self, self.dict)
-
def _reset(self, dict_, key):
"""Remove the given attribute and any
callables associated with it."""
self, context, path, loadopt, mapper,
result, adapter, populators):
def invoke_no_load(state, dict_, row):
- state._initialize(self.key)
+ if self.uselist:
+ state.manager.get_impl(self.key).initialize(state, dict_)
+ else:
+ dict_[self.key] = None
populators["new"].append((self.key, invoke_no_load))
{'id': 7, 'addresses': (Address, [{'id': 1}])},
)
+ def test_m2o_noload_option(self):
+ Address, addresses, users, User = (
+ self.classes.Address,
+ self.tables.addresses,
+ self.tables.users,
+ self.classes.User)
+ mapper(Address, addresses, properties={
+ 'user': relationship(User)
+ })
+ mapper(User, users)
+ s = Session()
+ a1 = s.query(Address).filter_by(id=1).options(
+ sa.orm.noload('user')).first()
+
+ def go():
+ eq_(a1.user, None)
+ self.sql_count_(0, go)
+
class RequirementsTest(fixtures.MappedTest):