backport stable branch
authorSylvain Thénault <sylvain.thenault@logilab.fr>
Thu, 06 Aug 2009 09:51:52 +0200
changeset 2715 acdaf780d4a6
parent 2711 7aee3bd7a704 (current diff)
parent 2714 4a8d93bd7c72 (diff)
child 2716 2f6edb0e9626
backport stable branch
__pkginfo__.py
server/test/unittest_msplanner.py
web/views/actions.py
--- a/.hgtags	Thu Aug 06 09:04:26 2009 +0200
+++ b/.hgtags	Thu Aug 06 09:51:52 2009 +0200
@@ -50,3 +50,5 @@
 2ba27ce8ecd9828693ec53c517e1c8810cbbe33e cubicweb-debian-version-3_3_3-2
 d46363eac5d71bc1570d69337955154dfcd8fcc8 cubicweb-version-3.3.4
 7dc22caa7640bf70fcae55afb6d2326829dacced cubicweb-debian-version-3.3.4-1
+d85937184430b2e7a8d9318100272757026c01a4 cubicweb-version-3.3.5
+82fe8a6d077b34e972664c8e2bace3ae30c94b9d cubicweb-debian-version-3.3.5-1
--- a/debian/changelog	Thu Aug 06 09:04:26 2009 +0200
+++ b/debian/changelog	Thu Aug 06 09:51:52 2009 +0200
@@ -1,3 +1,9 @@
+cubicweb (3.3.5-1) unstable; urgency=low
+
+  * new upstream release
+
+ -- Sylvain Thénault <sylvain.thenault@logilab.fr>  Thu, 06 Aug 2009 09:05:22 +0200
+
 cubicweb (3.3.4-2) unstable; urgency=low
 
   * fix conflicting test files
--- a/server/msplanner.py	Thu Aug 06 09:04:26 2009 +0200
+++ b/server/msplanner.py	Thu Aug 06 09:51:52 2009 +0200
@@ -100,6 +100,16 @@
 AbstractSource.dont_cross_relations = ()
 AbstractSource.cross_relations = ()
 
+def need_source_access_relation(vargraph):
+    if not vargraph:
+        return False
+    # check vargraph contains some other relation than the identity relation
+    # test of key nature since it may be a variable name (don't care about that)
+    # or a 2-uple (var1, var2) associated to the relation to traverse to go from
+    # var1 to var2
+    return any(key for key, val in vargraph.iteritems()
+               if isinstance(key, tuple) and val != 'identity')
+
 def need_aggr_step(select, sources, stepdefs=None):
     """return True if a temporary table is necessary to store some partial
     results to execute the given query
@@ -559,7 +569,8 @@
             # testing for rqlst with nothing in vargraph nor defined_vars is the
             # simplest way the check the condition explained below
             if not self.system_source in self._sourcesterms and \
-                   not self.rqlst.vargraph and not self.rqlst.defined_vars:
+                   not self.rqlst.defined_vars and \
+                   not need_source_access_relation(self.rqlst.vargraph):
                 self._sourcesterms = {self.system_source: {}}
         elif not self.needsplit:
             if not allequals(self._sourcesterms.itervalues()):
--- a/server/test/unittest_msplanner.py	Thu Aug 06 09:04:26 2009 +0200
+++ b/server/test/unittest_msplanner.py	Thu Aug 06 09:51:52 2009 +0200
@@ -1962,6 +1962,12 @@
                      None, None, [self.system], {}, [])],
                    {'x': 999998, 'u': 999999})
 
+    def test_nonregr_identity_no_source_access(self):
+        repo._type_source_cache[999999] = ('CWUser', 'ldap', 999998)
+        self._test('Any S WHERE S identity U, S eid %(s)s, U eid %(u)s',
+                   [('OneFetchStep', [('Any 999999 WHERE 999999 identity 999999', [{}])],
+                     None, None, [self.system], {}, [])],
+                   {'s': 999999, 'u': 999999})
 
 class MSPlannerTwoSameExternalSourcesTC(BasePlannerTC):
     """test planner related feature on a 3-sources repository:
--- a/web/data/cubicweb.css	Thu Aug 06 09:04:26 2009 +0200
+++ b/web/data/cubicweb.css	Thu Aug 06 09:51:52 2009 +0200
@@ -388,7 +388,7 @@
   padding: 1px 9px 1px 3px;
 }
 
-ul.boxListing a.selected {
+ul.boxListing .selected {
   color: #FF4500;
   font-weight: bold;
 }
--- a/web/views/actions.py	Thu Aug 06 09:04:26 2009 +0200
+++ b/web/views/actions.py	Thu Aug 06 09:51:52 2009 +0200
@@ -15,7 +15,7 @@
     authenticated_user, match_user_groups, match_search_state,
     has_permission, has_add_permission,
     )
-from cubicweb.web import uicfg
+from cubicweb.web import uicfg, controller
 from cubicweb.web.action import Action
 from cubicweb.web.views import linksearch_select_url, vid_from_rset
 from cubicweb.web.views.autoform import AutomaticEntityForm
@@ -112,8 +112,8 @@
 
     def url(self):
         params = self.req.form.copy()
-        params.pop('vid', None)
-        params.pop('__message', None)
+        for param in ('vid', '__message') + controller.NAV_FORM_PARAMETERS:
+            params.pop(param, None)
         return self.build_url(self.req.relative_path(includeparams=False),
                               **params)