The solution to the fact that aggregate mutates the query is to have aggregates() do self._clone() like all the other queryset methods do(not sure how we missed this).
My guess as to why the odd typecasting occurs is because the `is_computed` check occurs because the check for DecimalField. When it sees is_computed it just casts to float and returns, I have no idea if this behavior is correct or not. Alex On Wed, Jan 7, 2009 at 2:48 PM, Ian Kelly <ian.g.ke...@gmail.com> wrote: > > On Wed, Jan 7, 2009 at 8:55 AM, Karen Tracey <kmtra...@gmail.com> wrote: > > On Wed, Jan 7, 2009 at 9:46 AM, Russell Keith-Magee < > freakboy3...@gmail.com> > > wrote: > >> > >> I've just pushed some updates to Github that should hopefully fix the > >> problems that have been reported (ORA-00933, ORA-00923 and ORA-00972 > >> and the decimal/datetime conversion problems). If someone with access > >> to an Oracle test machine can confirm that this has cleaned up the > >> errors, I'd be much obliged. > > > > The aggregation tests now pass. aggregation_regress has one (minor?) > > problem: > > > > Doctest: regressiontests.aggregation_regress.models.__test__.API_TESTS > ... > > FAIL > > > > ====================================================================== > > FAIL: Doctest: > regressiontests.aggregation_regress.models.__test__.API_TESTS > > ---------------------------------------------------------------------- > > Traceback (most recent call last): > > File "d:\u\kmt\django\aggregates.git\django\test\_doctest.py", line > 2180, > > in runTest > > raise self.failureException(self.format_failure(new.getvalue())) > > AssertionError: Failed doctest test for > > regressiontests.aggregation_regress.models.__test__.API_TESTS > > File > > > "D:\u\kmt\django\aggregates.git\tests\regressiontests\aggregation_regress\models.py", > > line unknown line number, in API_TESTS > > > > ---------------------------------------------------------------------- > > File > > > "D:\u\kmt\django\aggregates.git\tests\regressiontests\aggregation_regress\models.py", > > line ?, in regressiontests.aggregation_regress.models.__test__.API_TESTS > > Failed example: > > > > > Publisher.objects.annotate(avg_price=Avg('book__price')).aggregate(Max('avg_price')) > > Expected: > > {'avg_price__max': 75.0...} > > Got: > > {'avg_price__max': 75} > > > > > > ---------------------------------------------------------------------- > > Ran 1 test in 11.757s > > > > FAILED (failures=1) > > Destroying test database... > > This appears to be an existing problem in the Oracle backend where > convert_values neglects to convert FloatField values (interesting that > nothing else in the test suite catches this). But is there a reason > that the aggregation field returns an internal type of FloatField when > the field was originally a DecimalField? > > Another oddity with this query is that removing the aggregate call > from the above query and leaving only the annotate still results in > floats instead of decimals. It appears that ops.convert_values isn't > getting called in that case. But replace Avg with Max or Sum and it > does get called. > > I noticed another bug while testing this: the annotate query above is > modified after the aggregate call, which can be observed by the > following code. I don't think this one is related to the Oracle > backend. > > >>> qs = Publisher.objects.annotate(avg_price=Avg('book__price')) > >>> qs.query.as_sql() > >>> qs.aggregate(Max('avg_price')) > >>> qs.query.as_sql() > > Ian > > > > -- "I disapprove of what you say, but I will defend to the death your right to say it." --Voltaire "The people's good is the highest law."--Cicero --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-developers?hl=en -~----------~----~----~----~------~----~------~--~---