web/facet.py
changeset 10307 4b8253fb3125
parent 10074 ab956b780d4e
child 10495 5bd914ebf3ae
equal deleted inserted replaced
10306:ea73a949e802 10307:4b8253fb3125
  1463                                    '%s:%s' % (self.rtype, self),
  1463                                    '%s:%s' % (self.rtype, self),
  1464                                    self._cw.form.get(self.__regid__))
  1464                                    self._cw.form.get(self.__regid__))
  1465 
  1465 
  1466     def add_rql_restrictions(self):
  1466     def add_rql_restrictions(self):
  1467         """add restriction for this facet into the rql syntax tree"""
  1467         """add restriction for this facet into the rql syntax tree"""
  1468         self.select.set_distinct(True) # XXX
       
  1469         value = self._cw.form.get(self.__regid__)
  1468         value = self._cw.form.get(self.__regid__)
  1470         if not value: # no value sent for this facet
  1469         if not value: # no value sent for this facet
  1471             return
  1470             return
       
  1471         exists = nodes.Exists()
       
  1472         self.select.add_restriction(exists)
  1472         var = self.select.make_variable()
  1473         var = self.select.make_variable()
  1473         if self.role == 'subject':
  1474         if self.role == 'subject':
  1474             self.select.add_relation(self.filtered_variable, self.rtype, var)
  1475             subj, obj = self.filtered_variable, var
  1475         else:
  1476         else:
  1476             self.select.add_relation(var, self.rtype, self.filtered_variable)
  1477             subj, obj = var, self.filtered_variable
       
  1478         exists.add_relation(subj, self.rtype, obj)
  1477 
  1479 
  1478 
  1480 
  1479 class BitFieldFacet(AttributeFacet):
  1481 class BitFieldFacet(AttributeFacet):
  1480     """Base facet class for Int field holding some bit values using binary
  1482     """Base facet class for Int field holding some bit values using binary
  1481     masks.
  1483     masks.