[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.
--- 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)