make_doc(obj=ansisql),
make_doc(obj=orm),
make_doc(obj=orm.mapperlib, classes=[orm.mapperlib.MapperExtension, orm.mapperlib.Mapper]),
+ make_doc(obj=orm.interfaces),
make_doc(obj=orm.query, classes=[orm.query.Query, orm.query.QueryContext, orm.query.SelectionContext]),
make_doc(obj=orm.session, classes=[orm.session.Session, orm.session.SessionTransaction]),
make_doc(obj=exceptions),
m = mapper(class_, extension=extension, *args, **kwargs)
class_.mapper = m
class_.query = classmethod(lambda cls: Query(class_, session=ctx.current))
- for name in ['get', 'select', 'select_by', 'selectfirst', 'selectfirst_by', 'selectone', 'get_by', 'join', 'count', 'count_by', 'options', 'instances']:
+ for name in ['get', 'filter', 'filter_by', 'select', 'select_by', 'selectfirst', 'selectfirst_by', 'selectone', 'get_by', 'join', 'count', 'count_by', 'options', 'instances']:
monkeypatch_query_method(ctx, class_, name)
for name in ['delete', 'expire', 'refresh', 'expunge', 'save', 'update', 'save_or_update']:
monkeypatch_objectstore_method(ctx, class_, name)
"""
return self.filter(self._join_by(args, kwargs, start=self._joinpoint))
- def _join_to(self, prop, outerjoin=False):
+ def _join_to(self, prop, outerjoin=False, start=None):
+ if start is None:
+ start = self._joinpoint
+
if isinstance(prop, list):
- mapper = self._joinpoint
+ mapper = start
keys = []
for key in prop:
p = mapper.props[key]
keys.append(key)
mapper = p.mapper
else:
- [keys,p] = self._locate_prop(prop, start=self._joinpoint)
+ [keys,p] = self._locate_prop(prop, start=start)
clause = self._from_obj[-1]
- mapper = self._joinpoint
+ mapper = start
for key in keys:
prop = mapper.props[key]
if prop._is_self_referential():
else:
q._group_by.extend(util.to_list(criterion))
return q
+
+ def reset_joinpoint(self):
+ """return a new Query reset the 'joinpoint' of this Query reset
+ back to the starting mapper. Subsequent generative calls will
+ be constructed from the new joinpoint.
+
+ This is an interim method which will not be needed with new behavior
+ to be released in 0.4."""
+
+ q = self._clone()
+ q._joinpoint = q.mapper
+ return q
def join(self, prop):
"""create a join of this ``Query`` object's criterion
"""
q = self._clone()
- (clause, mapper) = self._join_to(prop, outerjoin=False)
+ (clause, mapper) = self._join_to(prop, outerjoin=False, start=self.mapper)
q._from_obj = [clause]
q._joinpoint = mapper
return q