Skip to content

Commit 6d78dc1

Browse files
WaVEVtimgraham
authored andcommitted
test improvement.
1 parent da72ec6 commit 6d78dc1

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

django_mongodb/compiler.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,19 @@ def pre_sql_setup(self, with_col_aliases=False):
7373
# the SELECT clause are already part of the GROUP BY.
7474
if not is_ref:
7575
group_expressions |= set(expr.get_group_by_cols())
76+
77+
for expr, *_ in self.select:
78+
group_expressions |= set(expr.get_group_by_cols())
79+
7680
having_group_by = self.having.get_group_by_cols() if self.having else ()
7781
for expr in having_group_by:
7882
group_expressions.add(expr)
7983
if isinstance(self.query.group_by, tuple | list):
8084
group_expressions |= set(self.query.group_by)
8185

86+
if self.query.group_by is None:
87+
group_expressions = set()
88+
8289
all_strings = "".join(
8390
str(col.as_mql(self, self.connection)) for col in group_expressions
8491
)

django_mongodb/features.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ class DatabaseFeatures(BaseDatabaseFeatures):
3838
"expressions.tests.NegatedExpressionTests.test_filter",
3939
"expressions_case.tests.CaseExpressionTests.test_order_by_conditional_implicit",
4040
# NotSupportedError: order_by() expression not supported.
41+
# Lookup in order_by() not supported:
42+
# argument of type '<database function>' is not iterable
43+
"aggregation.tests.AggregateTestCase.test_aggregation_order_by_not_selected_annotation_values",
4144
"db_functions.comparison.test_coalesce.CoalesceTests.test_ordering",
4245
"db_functions.tests.FunctionTests.test_nested_function_ordering",
4346
"db_functions.text.test_length.LengthTests.test_ordering",
@@ -95,6 +98,10 @@ class DatabaseFeatures(BaseDatabaseFeatures):
9598
# QuerySet.explain() not implemented:
9699
# https://github.com/mongodb-labs/django-mongodb/issues/28
97100
"queries.test_explain.ExplainUnsupportedTests.test_message",
101+
# Sum returns 0 instead of None in mongodb.
102+
"aggregation.test_filter_argument.FilteredAggregateTests.test_plain_annotate",
103+
"aggregation.tests.AggregateTestCase.test_annotation_expressions",
104+
"aggregation.tests.AggregateTestCase.test_reverse_fkey_annotate",
98105
}
99106
# $bitAnd, #bitOr, and $bitXor are new in MongoDB 6.3.
100107
_django_test_expected_failures_bitwise = {
@@ -270,6 +277,7 @@ def django_test_expected_failures(self):
270277
"timezones.tests.NewDatabaseTests.test_query_annotation",
271278
},
272279
"Exists is not supported on MongoDB.": {
280+
"aggregation.test_filter_argument.FilteredAggregateTests.test_filtered_aggregate_ref_multiple_subquery_annotation",
273281
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_exists_none_query",
274282
"delete_regress.tests.DeleteTests.test_self_reference_with_through_m2m_at_second_level",
275283
"expressions.tests.BasicExpressionsTests.test_annotation_with_deeply_nested_outerref",
@@ -314,6 +322,14 @@ def django_test_expected_failures(self):
314322
"queries.tests.Ticket22429Tests.test_ticket_22429",
315323
},
316324
"Subquery is not supported on MongoDB.": {
325+
"aggregation.tests.AggregateAnnotationPruningTests.test_referenced_composed_subquery_requires_wrapping",
326+
"aggregation.tests.AggregateAnnotationPruningTests.test_referenced_subquery_requires_wrapping",
327+
"aggregation.tests.AggregateTestCase.test_aggregation_nested_subquery_outerref",
328+
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation",
329+
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_multivalued",
330+
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_related_field",
331+
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_values",
332+
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_values_collision",
317333
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_filter_with_subquery",
318334
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_subquery_outerref_transform",
319335
"annotations.tests.NonAggregateAnnotationTestCase.test_empty_queryset_annotation",
@@ -494,6 +510,7 @@ def django_test_expected_failures(self):
494510
"queries.tests.Queries6Tests.test_col_alias_quoted",
495511
},
496512
"Test executes raw SQL.": {
513+
"aggregation.tests.AggregateTestCase.test_coalesced_empty_result_set",
497514
"annotations.tests.NonAggregateAnnotationTestCase.test_raw_sql_with_inherited_field",
498515
"delete_regress.tests.DeleteLockingTest.test_concurrent_delete",
499516
"expressions.tests.BasicExpressionsTests.test_annotate_values_filter",
@@ -585,6 +602,7 @@ def django_test_expected_failures(self):
585602
"model_fields.test_jsonfield.TestQuerying.test_none_key_exclude",
586603
},
587604
"Randomized ordering isn't supported by MongoDB.": {
605+
"aggregation.tests.AggregateTestCase.test_aggregation_random_ordering",
588606
"ordering.tests.OrderingTests.test_random_ordering",
589607
},
590608
"Queries without a collection aren't supported on MongoDB.": {
@@ -600,6 +618,7 @@ def django_test_expected_failures(self):
600618
"aggregation.tests.AggregateAnnotationPruningTests.test_non_aggregate_annotation_pruned",
601619
"aggregation.tests.AggregateTestCase.test_add_implementation",
602620
"aggregation.tests.AggregateTestCase.test_aggregation_default_using_datetime_from_database",
621+
"aggregation.tests.AggregateTestCase.test_multi_arg_aggregate",
603622
# SQL custom values.
604623
"aggregation.tests.AggregateTestCase.test_aggregation_default_using_date_from_database",
605624
# No sql generate
@@ -611,7 +630,17 @@ def django_test_expected_failures(self):
611630
"aggregation.tests.AggregateAnnotationPruningTests.test_referenced_aggregate_annotation_kept",
612631
# Using a QuerySet in annotate() is not supported on MongoDB
613632
"aggregation.tests.AggregateTestCase.test_group_by_subquery_annotation",
614-
}
633+
# Query set with annotate not supported.
634+
"aggregation.tests.AggregateTestCase.test_group_by_reference_subquery",
635+
"aggregation.tests.AggregateTestCase.test_filter_in_subquery_or_aggregation",
636+
# Exists is not supported in mongodb
637+
"aggregation.tests.AggregateTestCase.test_aggregation_exists_multivalued_outeref",
638+
"aggregation.tests.AggregateTestCase.test_group_by_exists_annotation",
639+
"aggregation.tests.AggregateTestCase.test_exists_none_with_aggregate",
640+
"aggregation.tests.AggregateTestCase.test_exists_extra_where_with_aggregate",
641+
# Queryset dates not supported
642+
"aggregation.tests.AggregateTestCase.test_dates_with_aggregation",
643+
},
615644
}
616645

617646
@cached_property

django_mongodb/functions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ def aggregate(self, compiler, connection, **extra_context): # noqa: ARG001
8686
node = self
8787
lhs_mql = process_lhs(node, compiler, connection)
8888
operator = MONGO_AGGREGATION.get(self.__class__)
89+
if self.__class__ in (StdDev, Variance) and "_SAMP" in self.functions:
90+
operator = operator.replace("Pop", "Samp")
8991
return {f"${operator}": lhs_mql}
9092

9193

0 commit comments

Comments
 (0)