Re: [Modeling-users] Couple of questions...
Status: Abandoned
Brought to you by:
sbigaret
From: John L. <jo...@vi...> - 2004-04-21 22:12:23
|
Sender: John Lenton <jo...@ma...> On Tue, Apr 20, 2004 at 11:46:10PM +0200, Sebastien Bigaret wrote: > > Yes, that's another approach indeed. But while I'm a fervent defender > for KeyValueCoding ;)) in such cases one should be careful. Here are > some thoughts: > > - if the database have a lot of books, the KVC approach will load them > all in memory: KVC traverses relationships at the object level, and > in this case this means fetching Books published by every Publisher, > then these Books' Authors. This is probably the worst case one can > get. That's probably why you were asking for a callable vFKP on a > class, weren't you? > > - In the resulting lists, if an author has published N books for a > publisher, the corresponding list will receive N duplicates for that > author. agreed, and I think I pointed out (I know I tried to point out) the second one of these. However the first is what I understood was being requested. The way I think I'd *like* to solve the second one is along the lines of ec.fetch('Writer.books.publisher', unique=True) or, perhaps (if something sensible can be found to fill in the ellipsis), ec.fetch('Writer.books.publisher', groupBy='...') The first could be ameliorated by having fetch return an iterator instead of a list... in fact... if fetch returned something smarter than a list, it might be possible to do something like ec.fetch('Writer') - \ ec.fetch('Writer', 'books.publisher.bizName == "P1"') this means ec.fetch returns a set, as in relational algebra[1] sets, which you can operate on. These set objects wouldn't perform the select on the database until you accessed them as sequences, so the above wouldn't even touch the database until someone used the result for something other than operating on other sets. Maybe 'fetch' is a bad name for a method returning something that hasn't actually fetched :) If this falls in the 'intersting, but show me the code' category, I'm afraid it'll have to wait :( On Wed, Apr 21, 2004 at 10:55:26PM +0200, Mario Ruggier wrote: > ec.fetch('Writer', 'books.publisher.numPages>50 > AND (books.publisher.bizName IN ["P1","P2"]) > AND NOT EXISTS(books.publisher.country NOT IN ["c1","c2"] ) ' well, that's the same as ec.fetch('Writer', 'books.publisher.numPages > 50 \ AND books.publisher.bizName IN ["P1", "P2"]') - \ ec.fetch('Writer', 'books.publisher.country IN ["c1","c2"]') right? References: 1) http://www.cs.sfu.ca/CC/354/zaiane/material/notes/Chapter3/node7.html -- John Lenton (jo...@vi...) -- Random fortune: Above all else -- sky. |