Contact: fumanchu@aminus.org

Log in as guest/dejavu to create tickets

Changeset 500

Show
Ignore:
Timestamp:
09/22/07 14:56:59
Author:
fumanchu
Message:

Fix for bug in fallback xview with order/limit/offset.

Files:

Legend:

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

    r499 r500  
    4242        self.classes = set() 
    4343        self.associations = Graph(directed=False) 
     44         
    4445        # TODO: move these somewhere else 
    4546        self.engine_functions = {} 
     47         
    4648        self.logflags = logflags.ERROR + logflags.IO 
    4749     
     
    6466    def register(self, cls): 
    6567        """Assert that Units of class 'cls' will be handled.""" 
     68        try: 
     69            # hack for db SM's 
     70            nodename = self.db.name 
     71        except AttributeError: 
     72            nodename = self.__class__.__name__ 
     73         
     74        if self.logflags & logflags.REGISTER: 
     75            msg = logflags.REGISTER.message(nodename, cls) 
     76            print msg 
     77            self.log(msg) 
     78         
    6679        self.classes.add(cls) 
    6780         
     
    390403            filters = dict([(cls, None) for cls in query.relation]) 
    391404            data = self._combine(query.relation, filters) 
     405            if order: 
     406                data = [unit for unit in data] 
     407                data.sort(dejavu.sort(order)) 
     408                data = iter(data) 
    392409             
    393410            if isinstance(query.attributes, logic.Expression): 
     
    403420                                yield datarow 
    404421            elif query.attributes is None: 
    405                 # What sort order (within each Unit)? 
     422                # TODO: What sort order (within each Unit)? 
    406423                choke 
    407424            else: 
     
    427444        else: 
    428445            data = self.recall(query.relation, expr) 
     446            if order: 
     447                data.sort(dejavu.sort(order)) 
     448                data = iter(data) 
    429449             
    430450            if isinstance(query.attributes, logic.Expression): 
     
    455475                            else: 
    456476                                yield datarow 
    457         return self._paginate(puller(), order, limit, offset) 
     477         
     478        ordered_data = puller() 
     479        try: 
     480            for x in xrange(offset or 0): 
     481                ordered_data.next() 
     482             
     483            if limit: 
     484                for x in xrange(limit): 
     485                    yield ordered_data.next() 
     486            else: 
     487                for unit in ordered_data: 
     488                    yield unit 
     489        except StopIteration: 
     490            return 
    458491     
    459492    def view(self, query, order=None, limit=None, offset=None, distinct=False):