mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-06-04 23:06:24 -04:00
- a non_primary mapper will inherit the _identity_class
of the primary mapper. This so that a non_primary established against a class that's normally in an inheritance mapping will produce results that are identity-map compatible with that of the primary mapper [ticket:2151] (also in 0.6.8)
This commit is contained in:
@@ -31,6 +31,13 @@ CHANGES
|
||||
- horizontal shard query should use execution
|
||||
options per connection as per [ticket:2131]
|
||||
|
||||
- a non_primary mapper will inherit the _identity_class
|
||||
of the primary mapper. This so that a non_primary
|
||||
established against a class that's normally in an
|
||||
inheritance mapping will produce results that are
|
||||
identity-map compatible with that of the primary
|
||||
mapper [ticket:2151] (also in 0.6.8)
|
||||
|
||||
- sql
|
||||
- Some improvements to error handling inside
|
||||
of the execute procedure to ensure auto-close
|
||||
|
||||
@@ -589,6 +589,7 @@ class Mapper(object):
|
||||
"a primary mapper first before setting up a non primary "
|
||||
"Mapper." % self.class_)
|
||||
self.class_manager = manager
|
||||
self._identity_class = manager.mapper._identity_class
|
||||
_mapper_registry[self] = True
|
||||
return
|
||||
|
||||
|
||||
@@ -474,6 +474,21 @@ class MapperTest(_fixtures.FixtureTest):
|
||||
assert n1.children[0] is n1._children[0] is n2
|
||||
eq_(str(Node.parent == n2), ":param_1 = nodes.parent_id")
|
||||
|
||||
def test_non_primary_identity_class(self):
|
||||
User = self.classes.User
|
||||
users, addresses = self.tables.users, self.tables.addresses
|
||||
class AddressUser(User):
|
||||
pass
|
||||
m1 = mapper(User, users, polymorphic_identity='user')
|
||||
m2 = mapper(AddressUser, addresses, inherits=User,
|
||||
polymorphic_identity='address')
|
||||
m3 = mapper(AddressUser, addresses, non_primary=True)
|
||||
assert m3._identity_class is m2._identity_class
|
||||
eq_(
|
||||
m2.identity_key_from_instance(AddressUser()),
|
||||
m3.identity_key_from_instance(AddressUser())
|
||||
)
|
||||
|
||||
def test_illegal_non_primary(self):
|
||||
users, Address, addresses, User = (self.tables.users,
|
||||
self.classes.Address,
|
||||
|
||||
Reference in New Issue
Block a user