import sqlalchemy.objectstore as objectstore
import random, copy, types
-__ALL__ = ['eagermapper', 'eagerloader', 'lazymapper', 'lazyloader', 'eagerload', 'lazyload', 'mapper', 'lazyloader', 'lazymapper', 'clear_mappers']
+__ALL__ = ['eagermapper', 'eagerloader', 'lazymapper', 'lazyloader', 'eagerload', 'lazyload', 'mapper', 'lazyloader', 'lazymapper', 'clear_mappers', 'objectstore', 'sql']
def relation(*args, **params):
if isinstance(args[0], Mapper):
else:
return EagerLoader(mapper, secondary, primaryjoin, secondaryjoin, **options)
-def relation_mapper(class_, selectable, secondary = None, primaryjoin = None, secondaryjoin = None, table = None, properties = None, lazy = True, uselist = True, foreignkey = None, primary_keys = None, **options):
- return relation_loader(mapper(class_, selectable, table=table, properties=properties, primary_keys=primary_keys, **options), secondary, primaryjoin, secondaryjoin, lazy = lazy, uselist = uselist, foreignkey = foreignkey, **options)
+def relation_mapper(class_, selectable, secondary = None, primaryjoin = None, secondaryjoin = None, table = None, properties = None, lazy = True, foreignkey = None, primary_keys = None, **options):
+ return relation_loader(mapper(class_, selectable, table=table, properties=properties, primary_keys=primary_keys, **options), secondary, primaryjoin, secondaryjoin, lazy = lazy, foreignkey = foreignkey, **options)
+
# TODO: where do we want to register these mappers, register them against their classes/objects etc
_mappers = {}
def mapper(*args, **params):
if not found. The *ident argument is a
list of primary keys in the order of the table def's primary keys."""
key = objectstore.get_id_key(ident, self.class_, self.table)
- print "key: " + repr(key) + " ident: " + repr(ident)
+ #print "key: " + repr(key) + " ident: " + repr(ident)
try:
return objectstore.uow()._get(key)
except KeyError:
# including modifying any of its related items lists, as its already
# been exposed to being modified by the application.
identitykey = self._identity_key(row)
- if objectstore.has_key(identitykey):
+ if objectstore.uow().has_key(identitykey):
instance = objectstore.uow()._get(identitykey)
if result is not None:
result.append_nohistory(instance)
class PropertyLoader(MapperProperty):
"""describes an object property that holds a single item or list of items that correspond to a related
database table."""
- def __init__(self, mapper, secondary, primaryjoin, secondaryjoin, uselist = True, foreignkey = None, private = False):
+ def __init__(self, mapper, secondary, primaryjoin, secondaryjoin, foreignkey = None, uselist = None, private = False):
self.uselist = uselist
self.mapper = mapper
self.target = self.mapper.selectable
self.secondaryjoin = secondaryjoin
self.foreignkey = foreignkey
self.private = private
- self._hash_key = "%s(%s, %s, %s, %s, %s, uselist=%s)" % (self.__class__.__name__, hash_key(mapper), hash_key(secondary), hash_key(primaryjoin), hash_key(secondaryjoin), hash_key(foreignkey), repr(self.uselist))
+ self._hash_key = "%s(%s, %s, %s, %s, %s, %s)" % (self.__class__.__name__, hash_key(mapper), hash_key(secondary), hash_key(primaryjoin), hash_key(secondaryjoin), hash_key(foreignkey), repr(uselist))
def hash_key(self):
return self._hash_key
raise "cant determine primary foreign key in the join relationship....specify foreignkey=<column>"
else:
self.foreignkey = w.dependent
-
+
+ if self.uselist is None and self.foreignkey is not None and self.foreignkey.table == self.parent.table:
+ self.uselist = False
+
+ if self.uselist is None:
+ self.uselist = True
+
(self.lazywhere, self.lazybinds) = create_lazy_clause(self.parent.selectable, self.primaryjoin, self.secondaryjoin)
if not hasattr(parent.class_, key):
scope )
)
-
-