[facet] Add infered type restriction to Filtered result set (closes #1988776) stable
authorPierre-Yves David <pierre-yves.david@logilab.fr>
Tue, 11 Oct 2011 14:04:18 +0200
branchstable
changeset 7936 82d76492e21e
parent 7935 28fe0b91ad8a
child 7938 80c6e2155c3d
[facet] Add infered type restriction to Filtered result set (closes #1988776) This does not alter the result while allowing more selection option on other variable than the filtered one.
web/views/facets.py
--- a/web/views/facets.py	Tue Oct 11 14:28:48 2011 +0200
+++ b/web/views/facets.py	Tue Oct 11 14:04:18 2011 +0200
@@ -27,6 +27,7 @@
                                 match_context_prop, yes, relation_possible)
 from cubicweb.utils import json_dumps
 from cubicweb.web import component, facet as facetbase
+from cubicweb.rqlrewrite import add_types_restriction
 
 def facets(req, rset, context, mainvar=None):
     """return the base rql and a list of widgets for facets applying to the
@@ -53,6 +54,17 @@
     # union not yet supported
     if len(origqlst.children) != 1:
         return None, ()
+
+    # Add type restriction to rql. This allow the get_type() method to return
+    # useful value on variable extracted from a select statement.
+    #
+    # This is done on origqlst to ensure all rql related objects are properly
+    # enriched when handled by a Facet:
+    #    - the rset.syntax_tree() during selection
+    #    - the select during selection
+    #    - the select during filtering
+
+    add_types_restriction(req.vreg.schema, origqlst.children[0])
     rqlst = origqlst.copy()
     select = rqlst.children[0]
     filtered_variable, baserql = facetbase.init_facets(rset, select, mainvar)