Changeset 481
- Timestamp:
- 09/08/07 21:45:41
- Files:
-
- trunk/dejavu/storage/__init__.py (modified) (3 diffs)
- trunk/dejavu/storage/db.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/dejavu/storage/__init__.py
r480 r481 327 327 yield [unit.__class__() for unit in row1] + row2 328 328 329 def multirecall(self, classes, expr):329 def xmultirecall(self, classes, expr=None, order=None, limit=None, offset=None): 330 330 """Yield lists of units of the given classes which match expr.""" 331 331 if expr is None: … … 335 335 # each class in classes. 336 336 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)] 340 348 341 349 def xview(self, query, distinct=False): … … 522 530 return self.nextstore.xview(query, distinct) 523 531 524 def multirecall(self, classes, expr):532 def xmultirecall(self, classes, expr=None, order=None, limit=None, offset=None): 525 533 """Full inner join units from each class.""" 526 534 if self.logflags & logflags.RECALL: 527 535 self.log(logflags.RECALL.message(classes, expr)) 528 return self.nextstore. multirecall(classes, expr)536 return self.nextstore.xmultirecall(classes, expr, order, limit, offset) 529 537 530 538 def count(self, cls, expr=None): trunk/dejavu/storage/db.py
r480 r481 293 293 return data.scalar() 294 294 295 def multirecall(self, relation, expr):295 def xmultirecall(self, classes, expr=None, order=None, limit=None, offset=None): 296 296 """Yield Unit instance sets which satisfy the expression.""" 297 297 if self.logflags & logflags.RECALL: 298 self.log(logflags.RECALL.message( relation, expr))298 self.log(logflags.RECALL.message(classes, expr)) 299 299 300 300 # Gather attribute list. 301 301 allattrs = [] 302 302 props = [] 303 for cls in relation:303 for cls in classes: 304 304 t = self.schema[cls.__name__] 305 305 attrs = [] … … 309 309 allattrs.append(attrs) 310 310 311 data = self.select((relation, allattrs, expr)) 311 data = self.select((classes, allattrs, expr), order=order, 312 limit=limit, offset=offset) 312 313 for row in data: 313 314 # TODO: This is broken; won't work if same cls appears twice. … … 332 333 333 334 unitset = [] 334 for cls in relation:335 for cls in classes: 335 336 unit = units[cls] 336 337 unit.cleanse() … … 344 345 if acceptable: 345 346 yield unitset 346 347 347 348 348 # Schemas #
