Hi. Ran into an issue the other day, which I think could be described as a bug, or perhaps a mis-feature, depending on how you look at it.
If you use an accumulator function on a SelectResults object (sum, avg, etc.), it will silently do the "wrong thing" if that SelectResults object has a LIMIT in it. Now, I understand that adding a LIMIT to a standard SQL query won't affect the result either: SELECT AVG(size) FROM Thing ORDER BY size LIMIT 5 This will return the average size of all rows, not just the smallest 5, as if the ORDER BY and LIMIT weren't there at all. In this sense, the current behavior of SQLObject is correct. However, consider this code: class Thing(SQLObject): size = IntCol() things = [Thing(size=n) for n in range(10)] allThings = Thing.select() smallThings = allThings.orderBy(Thing.q.size).limit(5) bigThings = allThings.orderBy(Thing.q.size).reversed().limit(5) evenThings = allThings.filter(Thing.q.size % 2 == 0) print allThings.avg(Thing.q.size) print smallThings.avg(Thing.q.size) print bigThings.avg(Thing.q.size) print evenThings.avg(Thing.q.size) In this case, iterating over any of these SelectResults objects works as you would expect, but the values returned by accumulators on smallThings and bigThings are "wrong". So, my question is, would it be reasonable for SQLObject to automatically detect this, and form a subquery? A query like this yields the correct results: SELECT AVG(size) FROM (SELECT size FROM Thing ORDER BY SIZE LIMIT 5) AS _tmp If so, it would make user code much easier to read/write, as compared to using sqlbuilder to do the same thing. I was able to do it, but it was painfully awkward and ugly. Alternatively, if that's not possible, maybe at least throw an exception similar to .limit(n).count()? Cheers, -miker P.S. Been a long-time SQLObject user--it's one of my favorite Python things. Thanks, Oleg, for all your hard work on it. :) ------------------------------------------------------------------------------ Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ sqlobject-discuss mailing list sqlobject-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss