Contact: fumanchu@aminus.org

Log in as guest/dejavu to create tickets

I think I've seen this ORM somewhere before...

Changeset 481

Show
Ignore:
Timestamp:
09/08/07 21:45:41
Author:
fumanchu
Message:

New xmultirecall method on SM's, which also now takes order, limit, and offset.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/dejavu/storage/__init__.py

    r480 r481  
    327327                    yield [unit.__class__() for unit in row1] + row2 
    328328     
    329     def multirecall(self, classes, expr): 
     329    def xmultirecall(self, classes, expr=None, order=None, limit=None, offset=None): 
    330330        """Yield lists of units of the given classes which match expr.""" 
    331331        if expr is None: 
     
    335335        # each class in classes. 
    336336        filters = dict([(cls, None) for cls in classes]) 
    337         for unitrow in self._combine(classes, filters): 
    338             if expr(*unitrow): 
    339                 yield unitrow 
     337         
     338        def _combine_inner(): 
     339            for unitrow in self._combine(classes, filters): 
     340                if expr(*unitrow): 
     341                    yield unitrow 
     342        return self._paginate(_combine_inner, order, limit, offset) 
     343     
     344    def multirecall(self, classes, expr=None, order=None, limit=None, offset=None): 
     345        """Return lists of units which satisfy the expression.""" 
     346        return [t for t in self.xmultirecall(classes, expr=None, order=None, 
     347                                             limit=None, offset=None)] 
    340348     
    341349    def xview(self, query, distinct=False): 
     
    522530        return self.nextstore.xview(query, distinct) 
    523531     
    524     def multirecall(self, classes, expr): 
     532    def xmultirecall(self, classes, expr=None, order=None, limit=None, offset=None): 
    525533        """Full inner join units from each class.""" 
    526534        if self.logflags & logflags.RECALL: 
    527535            self.log(logflags.RECALL.message(classes, expr)) 
    528         return self.nextstore.multirecall(classes, expr
     536        return self.nextstore.xmultirecall(classes, expr, order, limit, offset
    529537     
    530538    def count(self, cls, expr=None): 
  • trunk/dejavu/storage/db.py

    r480 r481  
    293293            return data.scalar() 
    294294     
    295     def multirecall(self, relation, expr): 
     295    def xmultirecall(self, classes, expr=None, order=None, limit=None, offset=None): 
    296296        """Yield Unit instance sets which satisfy the expression.""" 
    297297        if self.logflags & logflags.RECALL: 
    298             self.log(logflags.RECALL.message(relation, expr)) 
     298            self.log(logflags.RECALL.message(classes, expr)) 
    299299         
    300300        # Gather attribute list. 
    301301        allattrs = [] 
    302302        props = [] 
    303         for cls in relation
     303        for cls in classes
    304304            t = self.schema[cls.__name__] 
    305305            attrs = [] 
     
    309309            allattrs.append(attrs) 
    310310         
    311         data = self.select((relation, allattrs, expr)) 
     311        data = self.select((classes, allattrs, expr), order=order, 
     312                           limit=limit, offset=offset) 
    312313        for row in data: 
    313314            # TODO: This is broken; won't work if same cls appears twice. 
     
    332333             
    333334            unitset = [] 
    334             for cls in relation
     335            for cls in classes
    335336                unit = units[cls] 
    336337                unit.cleanse() 
     
    344345            if acceptable: 
    345346                yield unitset 
    346      
    347347     
    348348    #                               Schemas                               #