From: Mike Bayer Date: Mon, 4 Jun 2007 15:10:34 +0000 (+0000) Subject: - interfaces lib in docstrings X-Git-Tag: rel_0_4_6~226 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6163b363d0faf6588b52d55fc5efd93783d0641f;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - interfaces lib in docstrings - query.join() resets the joinpoint - added filter(), filter_by() to assignmapper --- diff --git a/doc/build/gen_docstrings.py b/doc/build/gen_docstrings.py index 042cabbf5f..6b370fe80d 100644 --- a/doc/build/gen_docstrings.py +++ b/doc/build/gen_docstrings.py @@ -30,6 +30,7 @@ def make_all_docs(): 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), diff --git a/lib/sqlalchemy/ext/assignmapper.py b/lib/sqlalchemy/ext/assignmapper.py index 23c6cc9ae9..6e4f2ab322 100644 --- a/lib/sqlalchemy/ext/assignmapper.py +++ b/lib/sqlalchemy/ext/assignmapper.py @@ -42,7 +42,7 @@ def assign_mapper(ctx, class_, *args, **kwargs): 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) diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 2a93bd5d22..a26bf8dcb6 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -519,9 +519,12 @@ class Query(object): """ 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] @@ -530,9 +533,9 @@ class Query(object): 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(): @@ -699,6 +702,18 @@ class Query(object): 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 @@ -711,7 +726,7 @@ class Query(object): """ 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